OSDN Git Service

update manuals
[luatex-ja/luatexja.git] / doc / luatexja.dtx
index dedc7df..0f95747 100644 (file)
-%#! lualatex -shell-escape manual.ins
+%<*!showexpl>
+%#! lualatex -shell-escape
 
+% To typeset this manual, you need following two fonts:
+%  - KozMinPr6N-Regular.otf
+%  - KozGoPr6N-Medium.otf
+%  - KozGoPr6N-Regular.otf
+
+%%%%% section ==> 章
+%%%%% subsection => 節
+
+%<en>\documentclass[a4paper,titlepage]{article}
+%<ja>\documentclass[a4paper,titlepage]{ltjsarticle}
+
+%%%%%%%%
+\makeatletter
+%%%%%%%%
+\directlua{if jit then jit.on() end}
+\usepackage{metalogo,amsmath,array,tikz,pict2e,multienum,float}
+\usepackage{booktabs,multicol,luatexja-ruby}
+\usepackage[all]{xy}
+\usepackage{lltjext,alltt}
+
+%%%%%%%% fonts
+\usepackage{luatexja-otf}
+\directlua{luatexja.otf.enable_ivs()}
+\usepackage[match]{luatexja-fontspec}
+\usepackage[kozuka-pr6n]{luatexja-preset}
+\usepackage{unicode-math}
+\setmainfont[Ligatures=TeX]{Linux Libertine O}
+\setmonofont[Scale=MatchLowercase, ItalicFont=lmmono10-italic.otf,
+  BoldFont=lmmonolt10-bold.otf, BoldItalicFont=lmmonolt10-boldoblique.otf
+]{lmmono10-regular.otf}
+\setmonojfont{KozGoPr6N-Regular.otf}
+\setmathfont[Scale=MatchLowercase]{xits-math.otf}
+\setsansfont[Scale=MatchLowercase,Ligatures=TeX]{Linux Biolinum O}
+
+\setLaTeXa{\scshape a}
+%<*ja>
+\def\emph#1{\textbf{\textgt{#1}}}
+\def\headfont{\normalfont\bfseries\gtfamily}\normalsize
+%</ja>
 %<*en>
-\documentclass[a4paper,titlepage]{article}
-\usepackage[margin=25mm,footskip=5mm]{geometry}
+\frenchspacing
+\usepackage[margin=25mm,lmargin=30mm,rmargin=30mm,footskip=6mm]{geometry}
+\usepackage{luatexja-adjust}\ltjdisableadjust
+\parskip=\smallskipamount
+\makeatletter
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+    {3.25ex \@plus1ex \@minus.2ex}%
+    {-1em}%
+    {\normalfont\normalsize\bfseries\raisebox{.2ex}{$\mdlgblksquare\mkern1mu$}}}
 %</en>
 %<*ja>
-\documentclass[a4paper,titlepage]{ltjsarticle}
-\usepackage[margin=25mm, footskip=5mm]{geometry}
+\usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry}
+\usepackage{luatexja-adjust}%\ltjdisableadjust
 \advance\leftmargini-1\zw\advance\leftmarginii-1\zw
 %</ja>
 
-\usepackage{amsmath,amssymb,xcolor,pict2e,multienum,amsthm,float,makecell}
-\usepackage{mathptmx}
-\usepackage{booktabs,listings,showexpl,multicol}
-\usepackage{luatexja-otf}
-\usepackage{luatexja-fontspec}
-\usepackage[unicode=true]{hyperref}
-\usepackage[all]{xy}
-%<ja> \SelectTips{cm}{}
+%%%%%%%% listings
+
+%%%%%%%% IVS
+
+\def\IVS#1{\char\numexpr "E0100+#1\relax}%"
+\def\IVSA#1#2#3#4#5{%
+  \textcolor{blue}{\raisebox{3.5pt}{\tt%
+    \fboxsep=0.5pt\fbox{\tiny \oalign{0#1#2\crcr#3#4#5\crcr}}}}%
+}
+{\catcode`\%=11
+  \gdef\IVSB#1{\expandafter\IVSA\directlua{
+    local cat_str = luatexbase.catcodetables['string']
+    tex.sprint(cat_str, string.format('%X', 0xE00EF+#1))
+}}}
+
+\usepackage{listings,showexpl,enumitem}
+\lstset{
+  basicstyle=\ttfamily\small, pos=r, breaklines=true,
+  numbers=none, rframe={}, basewidth=0.5em, numberstyle=\tiny, numbersep=0.5em,
+  explpreset={numberstyle=\tiny, numbers=left, numbersep=1em, columns=fixed}
+}
+% Suppress output from showexpl to stdout.
+\makeatletter
+\let\SX@Info\relax
+
+%%%%%%%% colors
+%% modified from http://jfly.iam.u-tokyo.ac.jp/colorset/
+\usepackage{transparent}
+\definecolor{red}{rgb}{1, 0.16, 0}
+\definecolor{blue}{rgb}{0, 0.25, 1}
+\definecolor{gray}{rgb}{.50, .53, .56}
+\definecolor{green}{rgb}{.21, .63, .42}
+\definecolor{cyan}{rgb}{0.40, .80, 1}
+\definecolor{b_gray}{rgb}{0.78, 0.78, 0.80}
+\definecolor{b_pink}{rgb}{1, 0.82, 0.82}
+\definecolor{b_green}{rgb}{.53, .91, .69}
+\definecolor{b_cyan}{rgb}{0.70, .92, 98}
+
+%%%%%%%% hyperref
+\usepackage{hyperref,bookmark}
 %<*en>
-\usepackage{mathptmx}
-\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
-\setsansfont[Ligatures=TeX]{TeX Gyre Heros}
-\frenchspacing
+\title{The \LuaTeX-ja package}
+\author{The \LuaTeX-ja project team}
 %</en>
-\def\labelenumii{(\arabic{enumii})}
+%<*ja>
+\title{\LuaTeX-jaパッケージ}
+\author{\LuaTeX-jaプロジェクトチーム}
+%</ja>
+\hypersetup{%
+       unicode,
+       colorlinks,
+       allbordercolors=1 1 1,
+       allcolors=blue,
+%<*en>
+       pdfauthor={The LuaTeX-ja project team},
+       pdftitle={The LuaTeX-ja package}
+%</en>
+%<*ja>
+       pdfauthor={LuaTeX-jaプロジェクトチーム},
+       pdftitle={LuaTeX-jaパッケージ}
+%</ja>
+}
+
+%%%%%%%% definition env.
+\usepackage{amsthm}
+\theoremstyle{definition}
+%<en>\newtheorem{defn}{Definition}
+%<ja>\newtheorem{defn}{定義}
 
+%%%%%%%% logo
+\usepackage{metalogo}
 \DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
 \DeclareRobustCommand\LuaTeX{Lua\TeX}
 \DeclareRobustCommand\pdfTeX{pdf\TeX}
-\DeclareRobustCommand\pTeX{p\kern-.05em\TeX}
-\DeclareRobustCommand\upTeX{up\kern-.05em\TeX}
+\DeclareRobustCommand\pTeX{p\kern-.15em\TeX}
+\DeclareRobustCommand\upTeX{up\kern-.15em\TeX}
 \DeclareRobustCommand\pLaTeX{p\kern-.05em\LaTeX}
 \DeclareRobustCommand\pLaTeXe{p\kern-.05em\LaTeXe}
-\DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\kern-.125em\pTeX}
-
-\theoremstyle{definition}
-%<en>\newtheorem{defn}{Definition}
-%<ja>\newtheorem{defn}{定義}
-
-\newenvironment{cslist}{%
-  \leftskip2em\parindent=0pt\def\makelabel##1{{\tt\char92##1}}
-  \def\{{\char`\{}\def\}{\char`\}}
-  \let\origitem=\item
-  \def\item[##1]{\par\smallskip\par\hskip-\leftskip\makelabel{##1}\par}
-}{}
+\DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\pTeX}
+
+%%%%%%%% other macros
+\newlist{cslist}{description}{2}
+\setlist[cslist]{%
+    style=nextline,font=\mdseries\ttfamily,
+    before*=\def\<{\char`\<}\def\>{\char`\>}\def\{{\char`\{}\def\}{\char`\}},
+    topsep=\medskipamount,
+%<ja> leftmargin=2\zw,
+%<en> leftmargin=2em,
+}
 
-\makeatletter
+\def\labelenumii{(\arabic{enumii})}
 \long\def\@makecaption#1#2{%
   \vskip\abovecaptionskip
   \sbox\@tempboxa{{\small #1. #2}}%
     \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
   \fi
   \vskip\belowcaptionskip}
-% Suppress output from showexpl to stdout.
-\let\SX@Info\relax
+
+\def\_{\leavevmode \kern .06em\vbox {\hrule \@width .333em}}
+\def\cs#1{\texttt{\upshape
+  \texorpdfstring{\textbackslash\ltjsetparameter{autoxspacing=false}#1}{\textbackslash#1}}}
+
+%%%%%%%%
 \makeatother
+%%%%%%%%
 
 \def\Node#1#2{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr
-  #1\mathstrut\cr\noalign{\hrule height.4pt}\strut#2\cr}}}}\,}}
+  #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}\strut#2\cr}}}}}\,}
+\def\HNode#1#2#3#4{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr
+  #1\mathstrut\cr\noalign{\vskip1pt\hrule height.4pt\vskip1pt}%
+  width:\hfill\ #2\cr height:\hfill\ #3\cr depth:\hfill\ #4\cr
+  }}}}}\,}
 
-%<*en>
-\title{The \LuaTeX-ja package}
-\author{The \LuaTeX-ja project team}
-%</en>
-%<*ja>
-\title{\LuaTeX-jaパッケージ}
-\author{\LuaTeX-jaプロジェクトチーム}
-%</ja>
+\protected\def\Param#1{\hyperlink{fld:#1}{\underline{\smash{\textsf{#1}}}}} % parameter name
+\protected\def\DParam#1{\hypertarget{fld:#1}{\underline{\smash{\textsf{#1}}}}} % parameter name (definition)
+\protected\def\Pkg#1{\textsf{#1}} % packages/classes
 
+
+\begin{document}
 \lstset{
-  basicstyle=\ttfamily\small, pos=o, breaklines=true,
-  numbers=none, rframe={}, basewidth=0.5em
+  vscmd=\IVSB
 }
 
-\parskip=\smallskipamount
-\protected\def\Param#1{\textsf{#1}} % parameter name
-\protected\def\Pkg#1{\underline{\smash{\texttt{#1}}}} % packages/classes
-
-\begin{document}
 \catcode`\<=13
-\def<#1>{{\normalfont\rm\itshape$\langle$#1$\rangle$}}
+\def<#1>{{\normalfont\rm\itshape$\langle$#1\/$\rangle$}}
+\let\LARG=<
 \maketitle
 
 \tableofcontents
 %<*en>
 \textbf{This documentation is far from complete. It may have many
 grammatical (and contextual) errors.} Also, several parts
-(especially, Section~\ref{sec-jfmglue}) are written in Japanese only.
+are written in Japanese only.
 %</en>
 %<*ja>
-\textbf{\large 本ドキュメントはまだまだ未完成です.}
+\emph{\large 本ドキュメントはまだまだ未完成です.}
 %</ja>
 
 \clearpage
@@ -106,6 +208,7 @@ grammatical (and contextual) errors.} Also, several parts
 %<en>\section{Introduction}
 %<ja>\section{はじめに}
 
+
 %<*en>
 The \LuaTeX-ja package is a macro package for typesetting high-quality
 Japanese documents when using \LuaTeX.
@@ -114,7 +217,6 @@ Japanese documents when using \LuaTeX.
 \LuaTeX-jaパッケージは,次世代標準\TeX である\LuaTeX の上で,\pTeX と同等
 /それ以上の品質の日本語組版を実現させようとするマクロパッケージである.
 %</ja>
-
 %<en>\subsection{Backgrounds}
 %<ja>\subsection{背景}
 
@@ -132,8 +234,8 @@ Japanese processing in computers (\textit{e.g.}, the UTF-8 encoding).
 ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX
 のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に
 も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に
\82\82ã\81ªã\81£ã\81¦ã\81\97ã\81¾ã\81£ã\81\9fï¼\9a\pTeX という(組版的に)満足なものがあったため,海外で
-è¡\8cã\82\8fã\82\8cã\81¦ã\81\84ã\82\8bæ\95°ã\80\85ã\81®\TeX ã\81®æ\8b¡å¼µâ\94\80â\94\80ä¾\8bã\81\88ã\81°\eTeX ã\82\84\pdfTeX â\94\80â\94\80や,TrueType,
\82\82ã\81ªã\81£ã\81¦ã\81\97ã\81¾ã\81£ã\81\9fï¼\8e\pTeX という(組版的に)満足なものがあったため,海外で
+è¡\8cã\82\8fã\82\8cã\81¦ã\81\84ã\82\8bæ\95°ã\80\85ã\81®\TeX ã\81®æ\8b¡å¼µâ\80\95â\80\95ä¾\8bã\81\88ã\81°\eTeX ã\82\84\pdfTeX â\80\95â\80\95や,TrueType,
 OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること
 を怠ってしまったのだ.
 %</ja>
@@ -156,14 +258,14 @@ extent, but gaps still exist.
 
 %<*en>
 However, the appearance of \LuaTeX\ changed the whole situation. With
-using Lua `callbacks', users can customize the internal processing of
+using Lua ``callbacks'', users can customize the internal processing of
 \LuaTeX. So there is no need to modify sources of engines to
 support Japanese typesetting: to do this, we only have to write Lua
 scripts for appropriate callbacks.
 %</en>
 %<*ja>
 しかし,\LuaTeX の登場で,状況は大きく変わることになった.Luaコードで
-`callback'を書くことにより,\LuaTeX の内部処理に割り込みをかけることが可
+``callback''を書くことにより,\LuaTeX の内部処理に割り込みをかけることが可
 能となった.これは,エンジン拡張という真似をしなくても,Luaコードとそれに
 関する\TeX マクロを書けば,エンジン拡張とほぼ同程度のことができるようになっ
 たということを意味する.\LuaTeX-jaは,このアプローチによってLuaコード・
@@ -171,85 +273,118 @@ scripts for appropriate callbacks.
 が始まったパッケージである.
 %</ja>
 
-%<en>\subsection{Major Changes from \pTeX}
+%<en>\subsection{Major changes from \pTeX}
 %<ja>\subsection{\pTeX からの主な変更点}
+\label{ssec:chgptex}
 
 %<*en>
 The \LuaTeX-ja package is under much influence of \pTeX\ engine. The initial
 target of development was to implement features of \pTeX. However,
-\emph{\LuaTeX-ja is not a just porting of \pTeX; unnatural
+implementing all feature of \pTeX\ is impossible,
+since all process of \LuaTeX-ja must be implemented only by Lua and \TeX\ macros.
+Hence \emph{\LuaTeX-ja is not a just porting of \pTeX; unnatural
 specifications/behaviors of \pTeX\ were not adopted}.
 %</en>
 %<*ja>
 \LuaTeX-jaは,\pTeX に多大な影響を受けている.初期の開発目標は,\pTeX の機
-能をLuaコードにより実装することであった.しかし,開発が進むにつれ,\pTeX
+能をLuaコードにより実装することであった.しかし,(\pTeX はエンジン拡張であったのに対し)
+\LuaTeX-jaはLuaコードと\TeX マクロを用いて全てを実装していなければならないため,\pTeX
 の完全な移植は不可能であり,また\pTeX における実装がいささか不可解になっ
-ているような状況も発見された.そのため,\textbf{\LuaTeX-jaは,もはや
+ているような状況も発見された.そのため,\emph{\LuaTeX-jaは,もはや
 \pTeX の完全な移植は目標とはしない.\pTeX における不自然な仕様・挙動があ
 れば,そこは積極的に改める.}
 %</ja>
 
 %<*en>
-The followings are major changes from \pTeX:
+The followings are major changes from \pTeX.
+For more detailed information, see Part~\ref{part-imp} or other sections of this manual.
 %</en>
 %<*ja>
 以下は \pTeX からの主な変更点である.
+より詳細については第\ref{part-imp}部など本文書の残りを参照.
 %</ja>
 
-\begin{itemize}
 %<*en>
-\item A Japanese font is a tuple of a `real' font, a Japanese font
-      metric (\textbf{JFM}, for short), and an optional string called
-      `variation'.
+\paragraph{Command names} \pTeX\ addes several primitives, such as \cs{kanjiskip},
+\cs{prebreakpenalty},~and,~\cs{ifydir}. They can be used as follows:
+%</en>
+%<*ja>
+\paragraph{命令の名称} 例えば\pTeX で追加された次のようなプリミティブ
+%</ja>
+\begin{verbatim}
+\kanjiskip=10pt  \dimen0=kanjiskip
+\tbaselineshift=0.1zw
+\dimen0=\tbaselineshift
+\prebreakpenalty`ぁ=100
+\ifydir ... \fi
+\end{verbatim}
+%<en> However, we cannot use them under \LuaTeX-ja.
+%<en> Instead of them, we have to write as the following.
+%<ja> は\LuaTeX-jaには存在しない.\LuaTeX-jaでは以下のように記述することになる.
+\begin{verbatim}
+\ltjsetparameter{kanjiskip=10pt}  \dimen0=\ltjgetparameter{kanjiskip}
+\ltjsetparameter{talbaselineshift=0.1\zw}
+\dimen0=\ltjgetparameter{talbaselineshift}
+\ltjsetparameter{prebreakpenalty={`ぁ,100}}
+\ifnum\ltjgetparemeter{direction}=4 ... \fi
+\end{verbatim}
+%<*en>
+Note that \pTeX\ adds new two useful units, namely \texttt{zw}~and~\texttt{zh}.
+As shown above, they are changed by \cs{zw}~and~\cs{zh} respectively, in \LuaTeX-ja.
 %</en>
 %<*ja>
-\item 和文フォントは(小塚明朝,IPA明朝などの)実際のフォント,和文フォントメトリック(JFMと呼ぶ),そ
-      して`variation'と呼ばれる文字列の組である.
+特に注意してほしいのは,\pTeX で追加された \texttt{zw} と \texttt{zh} という単位は
+\LuaTeX-ja では使用できず,\cs{zw}, \cs{zh} と制御綴の形にしないといけないという点である.
 %</ja>
 
 %<*en>
-\item In \pTeX, a line break after Japanese character is ignored (and
+\paragraph{Linebreak after a Japanese character}
+In \pTeX, a line break after Japanese character is ignored (and
       doesn't yield a space), since line breaks (in source files) are
       permitted almost everywhere in Japanese texts. However, \LuaTeX-ja
-      doesn't have this function completely, because of a specification
-      of \LuaTeX.
+      doesn't have this feature completely, because of a specification
+      of \LuaTeX. For the detail, see Section~\ref{sec-lbreak}.
 %</en>
 %<*ja>
-\item 日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字
+\paragraph{和文文字直後の改行}
+日本語の文書中では改行はほとんどどこでも許されるので,\pTeX では和文文字
       直後の改行は無視される(スペースが入らない)ようになっていた.しかし,
       \LuaTeX-ja では \LuaTeX の仕様のためにこの機能は完全には実装されていない.
+      詳しくは\ref{sec-lbreak}章を参照.
 %</ja>
 
 %<*en>
-\item The insertion process of glues/kerns between two Japanese
+\paragraph{Spaces related to Japanese characters}
+The insertion process of glues/kerns between two Japanese
       characters and between a Japanese character and other characters
-      (we refer these glues/kerns as \textbf{JAglue}) is rewritten from
+      (we refer glues/kerns of both kinds as \textbf{JAglue}) is rewritten from
       scratch.
 %</en>
 %<*ja>
-\item 2つの和文文字の間,和文文字と欧文文字の間に入るグルー/カーン
-      (\textbf{JAglue} と呼ぶ)の挿入処理が0から書き直されている.
+\paragraph{和文関連の空白}
+2つの和文文字の間や,和文文字と欧文文字の間に入るグルー/カーン
+      (両者をあわせて\textbf{JAglue}と呼ぶ)の挿入処理が0から書き直されている.
 %</ja>
 
 \begin{itemize}
 %<*en>
-\item As \LuaTeX's internal character handling is `node-based'
+\item As \LuaTeX's internal ligature handling is \emph{node-based}
       (\textit{e.g.}, \verb+of{}fice+ doesn't prevent ligatures), the
-      insertion process of \textbf{JAglue} is now `node-based'.
+      insertion process of \textbf{JAglue} is now \emph{node-based}.
 %</en>
 %<*ja>
-\item \LuaTeX の内部での文字の扱いが「ノードベース」になっているように(例えば,
-      \verb+of{}fice+ で合字は抑制されない),\textbf{JAglue}の挿入処理も
-      ã\80\8cã\83\8eã\83¼ã\83\89ã\83\99ã\83¼ã\82¹ã\80\8dã\81§ã\81\82る.
+\item \LuaTeX の内部での合字の扱いは「ノード」を単位として行われるようになっている(例えば,
+      \verb+of{}fice+ ã\81§å\90\88å­\97ã\81¯æ\8a\91å\88¶ã\81\95ã\82\8cã\81ªã\81\84ï¼\89ï¼\8eã\81\9dã\82\8cã\81«å\90\88ã\82\8fã\81\9bï¼\8c\textbf{JAglue}ã\81®æ\8c¿å\85¥å\87¦ç\90\86ã\82\82
+      ã\83\8eã\83¼ã\83\89å\8d\98ä½\8dã\81§å®\9fè¡\8cã\81\95ã\82\8cる.
 %</ja>
 
 %<*en>
 \item Furthermore, nodes between two characters which have no effects in
-      line break (\textit{e.g.}, \verb+\special+ node) and kerns from
+      line break (\textit{e.g.}, \cs{special} node) and kerns from
       italic correction are ignored in the insertion process.
 %</en>
 %<*ja>
-\item さらに,2つの文字の間にある行末では効果を持たないノード(例えば \verb+\special+ ノード)や,
+\item さらに,2つの文字の間にある行末では効果を持たないノード(例えば \cs{special} ノード)や,
   イタリック補正に伴い挿入されるカーンは挿入処理中では無視される.
 %</ja>
 
@@ -259,48 +394,88 @@ The followings are major changes from \pTeX:
       effective anymore.} In concrete terms, the following two methods are not effective anymore:
 %</en>
 %<*ja>
-\item \textbf{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに
+\item \emph{注意:上の2つの変更により,従来\textbf{JAglue}の挿入処理を分断するのに
       使われていたいくつかの方法は用いることができない.具体的には,次の方法はもはや無効である:}
 %</ja>
-\begin{verbatim}
\80\80ã\80\80ã\81¡ã\82\87{}ã\81£ã\81¨ã\80\80ã\80\80ちょ\/っと
-\end{verbatim}
+\begin{lstlisting}
\81¡ã\82\87{}ã\81£ã\81¨    ちょ\/っと
+\end{lstlisting}
 %<*en>
-      If you want to do so, please put an empty hbox between it instead:
+      If you want to do so, please put an empty horizontal box (hbox) between it instead:
 %</en>
 %<*ja>
-      もし同じことをやりたければ,空の水平ボックスを間に挟めばよい:
+      もし同じことをやりたければ,空の水平ボックス(hbox)を間に挟めばよい:
 %</ja>
-\begin{verbatim}
-  ちょ\hbox{}っと
-\end{verbatim}
-
+\begin{lstlisting}
+ちょ\hbox{}っと
+\end{lstlisting}
 
 %<*en>
-\item In the process, two Japanese fonts which only differ in their `real'
+\item In the process, two Japanese fonts which only differ in their ``real''
       fonts are identified.
 %</en>
 %<*ja>
-\item 処理中では,2つの和文フォントは,「実際の」フォントのみが異なる場合に同一視
+\item 処理中では,2つの和文フォントは,実フォントが異なるだけの場合には同一視
       される.
 %</ja>
 \end{itemize}
 
 %<*en>
-\item At the present, vertical typesetting (\emph{tategaki}), is not
-      supported in \LuaTeX-ja.
+\paragraph{Directions}
+From version~20150420.0, \LuaTeX-ja supports vertical writing.
+We implement this feature by using callbacks of \LuaTeX; so it must \emph{not} be confused
+with $\Omega$-style direction support of \LuaTeX\ itself.
+Due to implementation, the dimension returned by \cs{wd},~\cs{ht}, or~\cs{dp} depends
+on the content of the register \emph{only}. This is major difference with \pTeX.
 %</en>
 %<*ja>
-\item 現時点では,縦書きは\LuaTeX-jaではサポートされていない.
+\paragraph{組方向}
+20150420.0版からは,不安定ながらも\LuaTeX-ja における縦組みをサポートしている.
+なお,\LuaTeX 本体も$\Omega$流の組方向をサポートしているが,それとは全くの別物であること
+に注意してほしい.
+特に,異なった組方向のボックスを扱う場合には
+\cs{wd}, \cs{ht}, \cs{dp}等の仕様が\pTeX と異なるので注意.詳細は第\ref{sec-direction}章を参照.
 %</ja>
 
-\end{itemize}
+%<*en>
+\paragraph{\cs{discretionary}}
+Japanese characters in discretionary break (\cs{discretionary}) is not supported.
+%</en>
+%<*ja>
+\paragraph{\cs{discretionary}}
+ \cs{discretionary} 内に直接和文文字を記述することは,\pTeX においても想定されていなかった
+ 感があるが.\LuaTeX-jaにおいても想定していない.和文文字をどう
+      しても使いたい場合は \cs{hbox} で括ること.
+%</ja>
 
 %<*en>
-For detailed information, see Part~\ref{part-imp}.
+\paragraph{Greek and Cyrillic letters, and ISO~8859-1 symbols}
+By default, \LuaTeX-ja uses Japanese fonts to typeset Greek and Cyrillic letters,
+      To change this behavior, 
+      put \verb!\ltjsetparameter{jacharrange={-2,-3}}! in the preamble.
+      For the detailed description, see Subsection~\ref{ssec-setrange}.
+
+From this version, characters which belongs both ISO~8859-1 and JIS~X~0208,
+      such as \P~and~\S, are now typeset in alphabetic fonts. This means that
+      without the \cs{fontspec} (and~\Pkg{luatexja-fontspec}) package, these characters are not typeset correctly.
 %</en>
 %<*ja>
-詳細については第 \ref{part-imp} 部を参照.
+\paragraph{ギリシャ文字・キリル文字とISO~8859-1の記号}
+標準では,\LuaTeX-jaはギリシャ文字やキリル文字を和文フォントを使っ
+      て組む.ギリシャ語などを本格的に組むなどこの状況が望ましくない場合,
+      プリアンブルに
+\begin{lstlisting}
+ \ltjsetparameter{jacharrange={-2,-3}}
+\end{lstlisting}
+      を入れると
+      上記種類の文字は欧文フォントを用いて組まれるようになる.
+      詳しい説明は\ref{ssec-setrange}節を参照してほしい.
+
+また,\P,~\S といったISO~8859-1の上位領域とJIS~X~0208の共通部分の文字は
+      本バージョンから標準で欧文扱いとなり,\emph{ソース中に直接記述しても
+      \Pkg{fontspec}パッケージ(および\Pkg{luatexja-fontspec}パッケージ)非読み込みの状態では出力されなくなった}.
+      和文扱いで出力するには \verb+\ltjjachar`§+ のように \cs{ltjjachar} 命令
+      を使えばよい.
 %</ja>
 
 %<en>\subsection{Notations}
@@ -312,111 +487,91 @@ In this document, the following terms and notations are used:
 %<*ja>
 本ドキュメントでは,以下の用語と記法を用いる:
 %</ja>
-
 \begin{itemize}
 %<*en>
-\item Characters are divided into two types:
+\item Characters are classified into following two types.
+      Note that the classification can be customized by a user
+      (see Subsection~\ref{ssec-setrange}).
 %</en>
 %<*ja>
-\item 文字は2種類に分けられる:
+\item 文字は次の2種類に分けられる.この類別は固定されているものではなく,ユーザが後から変更可能である
+      (\ref{ssec-setrange}節を参照).
 %</ja>
 \begin{itemize}
 %<*en>
-\item \textbf{JAchar}: standing for Japanese characters such as
-      Hiragana, Katakana, Kanji and other punctuation marks for
-      Japanese.
+\item \textbf{JAchar}: standing for characters which is used in Japanese typesetting,
+      such as Hiragana,~Katakana, Kanji, and~other Japanese punctuation marks.
 %</en>
 %<*ja>
-\item \textbf{JAchar}: ひらがな,カタカナ,漢字,和文用の約物といった和文文字の
-      ことを指す.
+\item \textbf{JAchar}: ひらがな,カタカナ,漢字,和文用の約物といった
+      日本語組版に使われる文字のことを指す.
 %</ja>
 
-%<*en>
-\item \textbf{ALchar}: standing for all other characters like alphabets.
-%</en>
-%<*ja>
-\item \textbf{ALchar}: アルファベットを始めとする,その他全ての文字を指す.
-%</ja>
+%<en>\item \textbf{ALchar}: standing for all other characters like latin alphabets.
+%<ja>\item \textbf{ALchar}: ラテンアルファベットを始めとする,その他全ての文字を指す.
 \end{itemize}
 
 %<*en>
-We say `alphabetic fonts' for fonts used in \textbf{ALchar}, and `Japanese fonts' for fonts used in \textbf{JAchar}.
+We say \emph{alphabetic fonts} for fonts used in \textbf{ALchar},
+and \emph{Japanese fonts} for fonts used in \textbf{JAchar}.
 %</en>
 %<*ja>
-そして,\textbf{ALchar}の出力に用いられるフォントを「欧文フォント」と呼び,
-\textbf{JAchar}の出力に用いられるフォントを「和文フォント」と呼ぶ.
+そして,\textbf{ALchar}の出力に用いられるフォントを\emph{欧文フォント}と呼び,
+\textbf{JAchar}の出力に用いられるフォントを\emph{和文フォント}と呼ぶ.
 %</ja>
-
 %<*en>
-\item A word in a sans-serif font (like \Param{prebreakpenalty})
+\item A word in a sans-serif font with underline (like \Param{prebreakpenalty})
       means an internal parameter for Japanese typesetting, and it
-      is used as a key in \verb+\ltjsetparameter+ command.
+      is used as a key in \cs{ltjsetparameter} command.
 %</en>
 %<*ja>
-\item サンセリフ体で書かれた語(例:\Param{prebreakpenalty})は日本語組版用の
-      パラメータを表し,これらは \verb+\ltjsetparameter+ コマンドのキーとして
+\item 下線つきローマン体で書かれた語(例:\Param{prebreakpenalty})は日本語組版用の
+      パラメータを表し,これらは \cs{ltjsetparameter} 命令のキーとして
       用いられる.
 %</ja>
-
 %<*en>
-\item A word in typewriter font with underline (like \Pkg{fontspec})
+\item A word in a sens-serif font without underline (like \Pkg{fontspec})
       means a package or a class of \LaTeX.
 %</en>
 %<*ja>
-\item 下線付きのタイプライタ体で書かれた語(例:\Pkg{fontspec})は\LaTeX の
+\item 下線なしサンセリフ体の語(例:\Pkg{fontspec})は\LaTeX の
       パッケージやクラスを表す.
 %</ja>
-
-%<*en>
-\item The word `primitive' is used not only for primitives in \LuaTeX,
-      but also for control sequences that defined in the core module of
-      \LuaTeX-ja.
-%</en>
-%<*ja>
-\item 「プリミティブ」という語を,\LuaTeX のプリミティブだけではなく \LuaTeX-ja
-      のコアモジュールで定義されたコントロールシーケンスに対しても用いる.
-%</ja>
-
 %<*en>
-\item In this document, natural numbers start from~0.
+\item In this document, natural numbers start from~zero.
+  $\omega$ denotes the set of all natural numbers.
 %</en>
 %<*ja>
-\item 本ドキュメントでは,自然数は0から始まる.
+\item 本ドキュメントでは,自然数は0から始まる.自然数全体の集合は$\omega$と表記する.
 %</ja>
 \end{itemize}
 
 %<en>\subsection{About the project}
 %<ja>\subsection{プロジェクトについて}
 
-%<*en>
-\paragraph{Project Wiki} Project Wiki is under construction.
-%</en>
-%<*ja>
-\paragraph{プロジェクトWiki} プロジェクトWikiは構築中である.
-%</ja>
-
+%<en>\paragraph{Project Wiki} Project Wiki is under construction.
+%<ja>\paragraph{プロジェクトWiki} プロジェクトWikiは構築中である.
 %<*en>
 \begin{itemize}
-\item \url{http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage%28en%29} (English)
-\item \url{http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage} (Japanese)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28en%29} (English)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage} (Japanese)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28zh%29} (Chinese)
 \end{itemize}
 %</en>
 %<*ja>
 \begin{itemize}
-\item \url{http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage}(日本語)
-\item \url{http://sourceforge.jp/projects/luatex-ja/wiki/FrontPage%28en%29}(英語)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage}(日本語)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28en%29}(英語)
+\item \url{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28zh%29}(中国語)
 \end{itemize}
 %</ja>
 
-%<*en>
-This project is hosted by SourceForge.JP.
-%</en>
-%<*ja>
-本プロジェクトはSourceForge.JPのサービスを用いて運営されている.
-%</ja>
+%<en>This project is hosted by OSDN.
+%<ja>本プロジェクトはOSDNのサービスを用いて運営されている.
 
 %<en>\paragraph{Members}\
 %<ja>\paragraph{開発メンバー}\
+
 %<*en>
 \begin{multienumerate}
 \def\labelenumi{$\bullet$}
@@ -434,7 +589,6 @@ This project is hosted by SourceForge.JP.
 \end{multienumerate}
 %</ja>
 
-
 % \paragraph{Acknowledgments} -- 挿入するならここ
 
 \clearpage
@@ -443,95 +597,100 @@ This project is hosted by SourceForge.JP.
 %<en>\subsection{Installation}
 %<ja>\subsection{インストール}
 
-%<*en>
-To install the \LuaTeX-ja\ package, you will need:
-%</en>
-%<*ja>
-\LuaTeX-jaパッケージのインストールには,次のものが必要である.
-%</ja>
+%<en>The following packages are needed for the \LuaTeX-ja\ package.
+%<ja>\LuaTeX-jaパッケージの動作には次のパッケージ類が必要である.
 \begin{itemize}
-%<*en>
-\item \LuaTeX\ (version 0.65.0-beta or later) and its supporting packages.\\
-If you are using \TeX~Live~2011 or current W32\TeX, you don't have to worry.
-%</en>
-%<*ja>
-\item \LuaTeX(バージョン 0.65.0-beta 以降)とその支援パッケージ.
-      \TeX~Live~2011やW32\TeX の最新版ならば問題ない.
-%</ja>
-%<*en>
-\item The source archive of \LuaTeX-ja, of course\texttt{:)}
-%</en>
-%<*ja>
-\item \LuaTeX-jaのソースアーカイブ(もちろん\texttt{:)}).
-%</ja>
-%<*en>
-\item The \Pkg{xunicode} package, which version is \emph{just v0.981 (2011/09/09)}.\\
-If you have the \Pkg{fontspec} package, this \Pkg{xunicode} package must be exist.
-But be careful about the version; other versions may not work correctly with \LuaTeX-ja.
-%</en>
+\item \LuaTeX\ beta-0.80.0 (or later)
+\item \Pkg{luaotfload} v2.5 (or later)
+\item \Pkg{adobemapping} (Adobe cmap and pdfmapping files)
+\item \Pkg{everysel} (if you want to use \LuaTeX-ja with \LaTeXe)
+\item \Pkg{fontspec} v2.4
+%<en>\item \emph{IPAex fonts} (\url{http://ipafont.ipa.go.jp/})
+%<ja>\item \emph{IPAexフォント(\url{http://ipafont.ipa.go.jp/})}
+\end{itemize}
+%<en>In summary, this version of \LuaTeX-ja no longer supports \TeX~Live~2014 (or older version).
 %<*ja>
-\item \Pkg{xunicode}パッケージ(\textbf{2011/09/09,~v0.981}).\\
-\Pkg{fontspec}パッケージが導入されていればこのパッケージも導入されているはずであるが,
-このv0.981以外のバージョンでは\LuaTeX-ja上で正しく動作しない危険性がある
+要約すると,本バージョンの\LuaTeX-jaは\TeX~Live~2014以前では動作しない\footnote{%
+  もっとも,自分で\LuaTeX のバイナリをSubversionリポジトリからビルドしていれば話は別である.
+}
 %</ja>
-\end{itemize}
 
 %<*en>
-The installation methods are as follows:
+Now \LuaTeX-ja is available from
+CTAN (in the \texttt{macros/luatex/generic/luatexja} directory), and
+the following distributions:
+  \begin{itemize}
+  \item MiK\TeX\ (in \texttt{luatexja.tar.lzma}); see the next subsection
+  \item \TeX\ Live (in \texttt{texmf-dist/tex/luatex/luatexja})
+  \item W32\TeX\ (in \texttt{luatexja.tar.xz})
+  \end{itemize}
+IPAex fonts are also available in these distributions.
 %</en>
 %<*ja>
-インストール方法は以下のようになる:
-%</ja>
+現在,\LuaTeX-jaはCTAN (\texttt{macros/luatex/generic/luatexja})に収録されている他,
+以下のディストリビューションにも収録されている:
+  \begin{itemize}
+  \item MiK\TeX\ (\texttt{luatexja.tar.lzma})
+  \item \TeX\ Live (\texttt{texmf-dist/tex/luatex/luatexja})
+  \item W32\TeX\ (\texttt{luatexja.tar.xz})
+  \end{itemize}
+これらのディストリビューションはIPAexフォントも収録している.
+W32\TeX においてはIPAexフォントは \texttt{luatexja.tar.xz} 内にある.
+%</ja>
+
+% %<*ja>
+% 例えば\TeX~Live~2015を利用しているなら,\LuaTeX-jaは\TeX~Live manager (\texttt{tlmgr})を
+% 使ってインストールすることができる.
+% \begin{lstlisting}
+% $ tlmgr install luatexja
+% \end{lstlisting}
+% %</ja>
+% %<*en>
+% If you are using \TeX~Live~2015, you can install \LuaTeX-ja
+% from \TeX~Live manager (\texttt{tlmgr}):
+% \begin{lstlisting}
+% $ tlmgr install luatexja
+% \end{lstlisting}
+% %</en>
+
+%<en>\paragraph{Manual installation}
+%<ja>\paragraph{手動インストール方法}
+
 \begin{enumerate}
 %<*en>
-\item Download the source archive, by one of the following method.
+\item Download the source, by one of the following method.
       At the present, \LuaTeX-ja has no \emph{stable} release.
 
 \begin{itemize}
-\item Copy the Git repository:
-\begin{verbatim}
-$ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
-\end{verbatim}
+\item Clone the Git repository:
+\begin{lstlisting}
+$ git clone git://git.osdn.jp/gitroot/luatex-ja/luatexja.git
+\end{lstlisting}
 \item Download the \texttt{tar.gz} archive of HEAD in the \texttt{master} branch from
 \begin{flushleft}
-\url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
+\url{http://git.osdn.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
 \end{flushleft}
-\item Now \LuaTeX-ja is available from the following archive and distributions:
-  \begin{itemize}
-  \item CTAN (in the \texttt{macros/luatex/generic/luatexja} directory)
-  \item \TeX\ Live (in \texttt{texmf-dist/tex/luatex/luatexja})
-  \item W32\TeX\ (in \texttt{luatexja.tar.xz})
-  \end{itemize}
-  These are based on the \texttt{master} branch.
 \end{itemize}
 
 Note that the \texttt{master} branch, and hence the archive in CTAN, are not updated frequently;
 the forefront of development is not the \texttt{master} branch.
 %</en>
 %<*ja>
-\item ã\82½ã\83¼ã\82¹ã\82¢ã\83¼ã\82«ã\82¤ã\83\96ã\82\92以ä¸\8bã\81®ã\81\84ã\81\9aã\82\8cã\81\8bã\81®æ\96¹æ³\95ã\81§å\8f\96å¾\97ã\81\99ã\82\8bï¼\8eç\8f¾å\9c¨å\85¬é\96\8bã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81®ã\81¯ã\81\82ã\81\8fã\81¾ã\81§ã\82\82
+\item ソースを以下のいずれかの方法で取得する.現在公開されているのはあくまでも
       開発版であって,安定版でないことに注意.
 
 \begin{itemize}
-\item Gitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81®å\86\85容ã\82\92ã\82³ã\83\94ã\83¼する:
-\begin{verbatim}
-$ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
-\end{verbatim}
-\item \texttt{master}ブランチのスナップショット(\texttt{tar.gz}形式)をダウンロードする.
+\item Gitã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\82\92ã\82¯ã\83­ã\83¼ã\83³する:
+\begin{lstlisting}
+$ git clone git://git.osdn.jp/gitroot/luatex-ja/luatexja.git
+\end{lstlisting}
+\item \texttt{master} ブランチのスナップショット(\texttt{tar.gz} 形式)をダウンロードする.
 \begin{flushleft}
-\url{http://git.sourceforge.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
+\url{http://git.osdn.jp/view?p=luatex-ja/luatexja.git;a=snapshot;h=HEAD;sf=tgz}.
 \end{flushleft}
-\item 今や,\LuaTeX-jaは以下のアーカイブ,およびディストリビューションにも収録されている:
-  \begin{itemize}
-  \item CTAN (\texttt{macros/luatex/generic/luatexja})
-  \item \TeX\ Live (\texttt{texmf-dist/tex/luatex/luatexja})
-  \item W32\TeX\ (\texttt{luatexja.tar.xz})
-  \end{itemize}
-  これらは\texttt{master}ブランチの内容を元にしている.
 \end{itemize}
-
-\texttt{master}ブランチ(従って,CTAN内のアーカイブも)はたまにしか更新されないことに注意.
-主な開発は\texttt{master}の外で行われ,比較的まとまってきたらそれを\texttt{master}に
+\texttt{master} ブランチ(従って,CTAN内のアーカイブも)はたまにしか更新されないことに注意.
+主な開発は\texttt{master}の外で行われ,比較的まとまってきたらそれを \texttt{master} に
 反映させることにしている.
 %</ja>
 
@@ -540,10 +699,40 @@ $ git clone git://git.sourceforge.jp/gitroot/luatex-ja/luatexja.git
 But only the contents in \texttt{src/} are needed to work \LuaTeX-ja.
 %</en>
 %<*ja>
-\item 「Gitリポジトリをコピー」以外の方法でアーカイブを取得したならば,それを展開する.
-      \texttt{src/}をはじめとしたいくつかのディレクトリができるが,
-      動作には\texttt{src/}以下の内容だけで十分.
+\item 「Gitリポジトリをクローン」以外の方法でアーカイブを取得したならば,それを展開する.
+      \texttt{src/} をはじめとしたいくつかのディレクトリができるが,
+      動作には \texttt{src/} 以下の内容だけで十分.
+%</ja>
+
+%<*en>
+\item If you downloaded this package from CTAN, you have to run following commands
+    to generate classes
+    and \texttt{ltj-kinsoku.lua} (the file which stores default ``\textit{kinsoku}'' parameters):
+%</en>
+%<*ja>
+\item もしCTANから本パッケージを取得したのであれば,日本語用クラスファイルや
+標準の禁則処理用パラメータを
+格納した \texttt{ltj-kinsoku.lua} を生成するために,
+以下を実行する必要がある:
 %</ja>
+\begin{lstlisting}
+$ cd src
+$ lualatex ltjclasses.ins
+$ lualatex ltjsclasses.ins
+$ lualatex ltjltxdoc.ins
+$ luatex   ltj-kinsoku_make.tex
+\end{lstlisting}
+%<*en>
+\emph{Do not forget The last line (processing \texttt{ltj-kinsoku\_make.tex})}.
+\texttt{*.\{dtx,ins\}} and \texttt{ltj-kinsoku\_make.tex} used here are not needed in regular use.
+%</en>
+%<*ja>
+\emph{最後の \texttt{ltj-kinsoku\_make.tex} の実行を忘れないように注意}.
+ここで使用した \texttt{*.\{dtx,ins\}} と \texttt{ltj-kinsoku\_make.tex} は
+通常の使用にあたっては必要ない.
+%</ja>
+
+
 
 %<*en>
 \item Copy all the contents of \texttt{src/} into one of your \texttt{TEXMF} tree.
@@ -552,104 +741,148 @@ But only the contents in \texttt{src/} are needed to work \LuaTeX-ja.
       instead copying is also good.
 %</en>
 %<*ja>
-\item \texttt{src/}の中身を自分の\texttt{TEXMF}ツリーにコピーする.
-      場所の例としては,例えば\texttt{TEXMF/tex/luatex/luatexja/}がある.
+\item \texttt{src} の中身を自分の \texttt{TEXMF} ツリーにコピーする.
+      場所の例としては,例えば
+\begin{quote}
+ \texttt{TEXMF/tex/luatex/luatexja/}
+\end{quote}
+      がある.
       シンボリックリンクが利用できる環境で,かつリポジトリを直接取得したのであれば,
       (更新を容易にするために)コピーではなくリンクを貼ることを勧める.
 %</ja>
-
 %<*en>
 \item If \texttt{mktexlsr} is needed to update the file name database, make it so.
 %</en>
 %<*ja>
-\item 必要があれば,\texttt{mktexlsr}を実行する.
+\item 必要があれば,\texttt{mktexlsr} を実行する.
 %</ja>
 \end{enumerate}
 
-
-%<en>\subsection{Cautions}
-%<ja>\subsection{注意点}
-
+%<*en>
+\subsection{Cautions}
+For changes from \pTeX, see Subsection~\ref{ssec:chgptex}.
+%</en>
+%<*ja>
+\subsection{注意点}
+\pTeX からの変更点として,\ref{ssec:chgptex}節も熟読するのが望ましい.
+ここでは一般的な注意点を述べる.
+%</ja>
 \begin{itemize}
 %<*en>
-\item The encoding of your source file must be UTF-8. No other
+\item The encoding of your source file must be UTF-8. Other
       encodings, such as EUC-JP or Shift-JIS, are not supported.
 %</en>
 %<*ja>
 \item 原稿のソースファイルの文字コードはUTF-8固定である.
       従来日本語の文字コードとして用いられてきたEUC-JPやShift-JISは使用できない.
 %</ja>
-\end{itemize}
-
-%<en>\subsection{Using in plain \TeX}
-%<ja>\subsection{plain \TeX で使う}
-\label{ssec-plain}
+%<*en>
+\item \LuaTeX-ja is very slower than \pTeX.
+Generally speaking, LuaJIT\TeX\ processes \LuaTeX-ja
+about 30\% faster than \LuaTeX, but not always.
+%</en>
+%<*ja>
+\item \LuaTeX-jaは動作が\pTeX に比べて非常に遅い.
+コードを調整して徐々に速くしているが,まだ満足できる速度ではない.
+LuaJIT\TeX を用いると\LuaTeX のだいたい1.3倍の速度で動くようであるが,
+IPA mj明朝などの大きいフォントを用いた場合には\LuaTeX よりも遅くなることもある.
+%</ja>
 
+\item%
 %<*en>
-To use \LuaTeX-ja in plain \TeX, simply put the following at the beginning of the document:
+\textbf{(Outdated) note for MiK\TeX\ users}\quad
+\LuaTeX-ja requires that several CMap files%
+\footnote{\texttt{UniJIS2004-UTF32-\{H,V\}} and \texttt{Adobe-Japan1-UCS2}.}
+must be found from \LuaTeX.
+Strictly speaking, those CMaps are needed
+only in the first run of \LuaTeX-ja after installing or updating.
+But it seems that MiK\TeX\ does not satisfy this condition,
+so you will encounter an error like the following:
 %</en>
 %<*ja>
-\LuaTeX-jaを plain \TeX で使うためには,単に次の行をソースファイルの冒頭に追加すればよい:
+\LuaTeX-jaが動作するためには,\emph{導入・更新後の初回起動時に}
+\texttt{UniJIS2004-UTF32-\{H,V\}}, \texttt{Adobe-Japan1-UCS2}という3つのCMapが
+\LuaTeX によって見つけられることが必要である.
+しかし古いバージョンのMiK\TeX ではそのようになっていないので,次のエラーが発生するだろう:
 %</ja>
-\begin{verbatim}
-\input luatexja.sty
-\end{verbatim}
+\begin{lstlisting}
+! LuaTeX error ...iles (x86)/MiKTeX 2.9/tex/luatex/luatexja/ltj-rmlgbm.lua
+bad argument #1 to 'open' (string expected, got nil)
+\end{lstlisting}
+
 %<*en>
-This does minimal settings (like \texttt{ptex.tex}) for typesetting Japanese documents:
+If so, please execute a batch file which is written on
+\href{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28en%29}{ the Project Wiki (English)}.
+This batch file creates a temporary directory, copy CMaps in it,
+run a test file which loads \LuaTeX-ja in this directory, 
+and finally delete the temporary directory.
 %</en>
 %<*ja>
-これで(\texttt{ptex.tex}のように)日本語組版のための最低限の設定がなされる:
+そのような場合には,
+\href{https://osdn.jp/projects/luatex-ja/wiki/FrontPage%28en%29}{%
+  プロジェクトWiki英語版トップページ}中に書かれているバッチファイルを
+実行して欲しい.このバッチファイルは,作業用ディレクトリにCMap達を
+コピーし,その中で\LuaTeX-jaの初回起動を行い,作業用ディレクトリを消す作業をしている.
 %</ja>
 
+\end{itemize}
+
+%<en>\subsection{Using in plain \TeX}
+%<ja>\subsection{plain \TeX で使う}
+\label{ssec-plain}
+
+%<en>To use \LuaTeX-ja in plain \TeX, simply put the following at the beginning of the document:
+%<ja>\LuaTeX-jaを plain \TeX で使うためには,単に次の行をソースファイルの冒頭に追加すればよい:
+\begin{lstlisting}
+\input luatexja.sty
+\end{lstlisting}
+%<en>This does minimal settings (like \texttt{ptex.tex}) for typesetting Japanese documents:
+%<ja>これで(\texttt{ptex.tex}のように)日本語組版のための最低限の設定がなされる:
+
 \begin{itemize}
 %<*en>
-\item The following 6~Japanese fonts are preloaded:
-\begin{center}
-\begin{tabular}{ccccc}
+\item The following 12~Japanese fonts are preloaded:
+\begin{center}\small
+\begin{tabular}{cccccc}
 \toprule
-\textbf{classification}&\textbf{font name}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
-\emph{mincho}&Ryumin-Light    &\verb+\tenmin+&\verb+\sevenmin+&\verb+\fivemin+\\
-\emph{gothic}&GothicBBB-Medium&\verb+\tengt+ &\verb+\sevengt+ &\verb+\fivegt+\\
+\textbf{direction}&
+\textbf{classification}&\textbf{font name}&\bf ``10\,pt''&\bf``7\,pt''&\bf``5\,pt''\\\midrule
+\smash{\raisebox{-1ex}{\emph{yoko} (horizontal)}}&
+\emph{mincho}&IPAex Mincho&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
+&\emph{gothic}&IPAex Gothic&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
+\midrule
+\smash{\raisebox{-1ex}{\emph{tate} (vertical)}}&
+\emph{mincho}&IPAex Mincho&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
+&\emph{gothic}&IPAex Gothic&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</en>
 %<*ja>
-\item 以下の6つの和文フォントが定義される:
-\begin{center}
-\begin{tabular}{ccccc}
+\item 以下の12個の和文フォントが定義される:
+\begin{center}\small
+\begin{tabular}{cccccc}
 \toprule
-\textbf{字体}&\textbf{フォント名}&\bf `10\,pt'&\bf`7\,pt'&\bf`5\,pt'\\\midrule
-明朝体&Ryumin-Light    &\verb+\tenmin+&\verb+\sevenmin+&\verb+\fivemin+\\
-ゴシック体&GothicBBB-Medium&\verb+\tengt+ &\verb+\sevengt+ &\verb+\fivegt+\\
+\emph{組方向}&\emph{字体}&\emph{フォント名}&\bf ``10\,pt''&\bf``7\,pt''&\bf``5\,pt''\\\midrule
+\smash{\raisebox{-1ex}{横組}}&
+明朝体&IPAex明朝&\cs{tenmin}&\cs{sevenmin}&\cs{fivemin}\\
+&ゴシック体&IPAexゴシック&\cs{tengt} &\cs{sevengt} &\cs{fivegt}\\
+\midrule
+\smash{\raisebox{-1ex}{縦組}}&
+明朝体&IPAex明朝&\cs{tentmin}&\cs{seventmin}&\cs{fivetmin}\\
+&ゴシック体&IPAexゴシック&\cs{tentgt} &\cs{seventgt} &\cs{fivetgt}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</ja>
 \begin{itemize}
 %<*en>
-\item The `Q(級)' is a unit used in Japanese phototypesetting, and
-      $1\,\textrm{Q}=0.25\,\textrm{mm}$. This length is stored in a
-      dimension \verb+\jQ+.
-%</en>
-%<*ja>
-\item `Q(級)'は日本の写植で用いられる単位で,$1\,\textrm{Q}=0.25\,\textrm{mm}$
-      である.この長さは \verb+\jQ+ に保持されている.
-%</ja>
-
-%<*en>
-\item It is widely accepted that the font `Ryumin-Light' and
-      `GothicBBB-Medium' aren't embedded into PDF files, and PDF reader
-      substitute them by some external Japanese fonts (\textit{e.g.},
-      Kozuka Mincho is used for Ryumin-Light in Adobe Reader). We adopt this custom to
-      the default setting.
+\item With \texttt{luatexja.cfg}, one can use other fonts
+as ``default'' Japanese fonts (Subsection~\ref{ssec-cfg}).
 %</en>
 %<*ja>
-\item `Ryumin-Light'と`GothicBBB-Medium'はPDFファイルに埋め込まずに
-      名前参照のみで用いることが広く受け入れられており,この場合PDFリーダーが
-      適切な外部フォントで代用する(例えば,Adobe ReaderではRyumin-Lightは
-      小塚明朝で代替される).そこで,これらを引き続きデフォルトのフォントと
-      して採用する.
+\item \texttt{luatexja.cfg} を用いることによって,標準和文フォントを
+IPAexフォントから別のフォントに置き換えることができる.\ref{ssec-cfg}節を参照.
 %</ja>
 
 %<*en>
@@ -684,8 +917,6 @@ This does minimal settings (like \texttt{ptex.tex}) for typesetting Japanese doc
 %<ja>\subsection{\LaTeX で使う}
 \label{ssec-ltx}
 
-\paragraph{\LaTeXe}
-
 %<*en>
 Using in \LaTeXe\ is basically same. To set up the minimal environment
 for Japanese, you only have to load \texttt{luatexja.sty}:
@@ -694,11 +925,11 @@ for Japanese, you only have to load \texttt{luatexja.sty}:
 \LaTeXe を用いる場合も基本的には同じである.日本語組版のための最低限の環境を
 設定するためには,\texttt{luatexja.sty}を読み込むだけでよい:
 %</ja>
-\begin{verbatim}
+\begin{lstlisting}
 \usepackage{luatexja}
-\end{verbatim}
+\end{lstlisting}
 %<*en>
-It also does minimal settings (counterparts in \pLaTeX\ are \texttt{
+It also does minimal settings (counterparts in \pLaTeX\ are \texttt{%
 plfonts.dtx} and \texttt{pldefs.ltx}):
 %</en>
 %<*ja>
@@ -708,53 +939,87 @@ plfonts.dtx} and \texttt{pldefs.ltx}):
 
 \begin{itemize}
 %<*en>
-\item \texttt{JY3} is the font encoding for Japanese fonts (in horizontal direction).\\
-When vertical typesetting is supported by \LuaTeX-ja in the future, \texttt{JT3} will be used for vertical fonts.
+\item Font encodings for Japanese fonts is \texttt{JY3}~(for horizontal direction) and
+\texttt{JT3}~(for vertical direction).
 %</en>
 %<*ja>
-\item \texttt{JY3}は和文フォント用のフォントエンコーディングである(横書き用).\\
-将来的に,\LuaTeX-jaで縦書きがサポートされる際には,\texttt{JT3}を縦書き用として
-用いる予定である.
+\item 和文フォントのエンコーディングとしては,横組用には \texttt{JY3},縦組用には\
+\texttt{JT3}が用いられる.
 %</ja>
 
 %<*en>
-\item Two font families \texttt{mc} and \texttt{gt} are defined:
-\begin{center}
+\item Traditionally, Japanese documents use two typeface categories: \emph{mincho}~(明朝体) and
+ \emph{gothic}~(\textgt{ゴシック体}). \emph{mincho} is used in the main text, while \emph{gothic}
+      is used in the headings or for emphasis.
+\begin{center}\small
+\begin{tabular}{lllc}
+\toprule
+\textbf{classification}&&&\textbf{family name}\\\midrule
+\emph{mincho} (明朝体)&\verb+\textmc{...}+&\verb+{\mcfamily ...}+&\cs{mcdefault}\\
+\emph{gothic} (\textgt{ゴシック体})&\verb+\textgt{...}+&\verb+{\gtfamily ...}+&\cs{gtdefault}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\item
+By default, the following fonts are used for \emph{mincho} and \emph{gothic}:
+\begin{center}\small
 \begin{tabular}{ccccc}
 \toprule
-\textbf{classification}&\textbf{family}&\verb+\mdseries+&\verb+\bfseries+&\textbf{scale}\\\midrule
-\emph{mincho}&\tt mc&Ryumin-Light    &GothicBBB-Medium&0.962216\\
-\emph{gothic}&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\
+\textbf{classification}&\textbf{family}&\cs{mdseries}&\cs{bfseries}&\textbf{scale}\\\midrule
+\emph{mincho} (明朝体)&\tt mc&IPAex Mincho&IPAex Gothic&0.962216\\
+\emph{gothic} (\textgt{ゴシック体})&\tt gt&IPAex Gothic&IPAex Gothic&0.962216\\
 \bottomrule
 \end{tabular}
 \end{center}
-Remark that the bold series in both family are same as the medium series of \emph{gothic} family.
-This is a convention in \pLaTeX. This is a trace that there were only 2~fonts (these are Ryumin-Light
-and GothicBBB-Medium) in early years of DTP.
+Note that the bold series in both family are same as the medium series of \emph{gothic}
+     family. There is no italic nor slanted shape for
+      these \texttt{mc}~and~\texttt{gt}.
 %</en>
 %<*ja>
-\item 2つのフォントファミリ\texttt{mc}と\texttt{gt}が定義されている:
-\begin{center}
+\item \pLaTeX と同様に,標準では「明朝体」「ゴシック体」の2種類を用いる:
+\begin{center}\small
+\begin{tabular}{cllc}
+\toprule
+\emph{字体}&&&\emph{ファミリ名}\\\midrule
+明朝体&\verb+\textmc{...}+&\verb+{\mcfamily ...}+&\cs{mcdefault}\\
+\textgt{ゴシック体}&\verb+\textgt{...}+&\verb+{\gtfamily ...}+&\cs{gtdefault}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\item 標準では,次のフォントファミリが用いられる:
+\begin{center}\small
 \begin{tabular}{ccccc}
 \toprule
-\textbf{字体}&\textbf{ファミリ}&\verb+\mdseries+&\verb+\bfseries+&\textbf{スケール}\\\midrule
-明朝体&\tt mc&Ryumin-Light    &GothicBBB-Medium&0.962216\\
-ゴシック体&\tt gt&GothicBBB-Medium&GothicBBB-Medium&0.962216\\
+\emph{字体}&\emph{ファミリ}&\cs{mdseries}&\cs{bfseries}&\emph{スケール}\\\midrule
+明朝体&\tt mc&IPAex明朝&IPAexゴシック&0.962216\\
+ゴシック体&\tt gt&IPAexゴシック&IPAexゴシック&0.962216\\
 \bottomrule
 \end{tabular}
 \end{center}
-どちらのファミリにおいても,そのboldシリーズはゴシック体のmediumシリーズで
-あることに注意.これは初期のDTPにおいて和文フォントが2つ(それがちょうど\
-Ryumin-Light, GothicBBB-Mediumだった)しか利用できなかった時の名残であり,\pLaTeX{}
-での標準設定とも同じである.
+どちらのファミリにおいても,そのboldシリーズで使われるフォントは
+ゴシック体のmediumシリーズで使われるフォントと同じであることに注意.
+また,どちらのファミリでもイタリック体・スラント体は定義されない.
 %</ja>
 
+%<en>\item Japanese characters in math mode are typeset by the font family \texttt{mc}.
+%<ja>\item 数式モード中の和文文字は明朝体(\texttt{mc})で出力される.
+
 %<*en>
-\item Japanese characters in math mode are typeset by the font family \texttt{mc}.
+\item If you use the \Pkg{beamer} class with the default font theme (which uses sans serif
+      fonts) and with \LuaTeX-ja, you might want to change default Japanese fonts to
+      \emph{gothic} family. The following line  changes  the default Japanese font family
+      to \emph{gothic}:
 %</en>
 %<*ja>
-\item 数式モード中の和文文字は\texttt{mc}ファミリで出力される.
+\item \Pkg{beamer}クラスを既定のフォント設定で使う場合,既定欧文フォントがサンセリフなの
+      で,既定和文フォントもゴシック体にしたいと思うかもしれない.その場合はプリアンブルに
+次を書けばよい:
 %</ja>
+\begin{lstlisting}
+ \renewcommand{\kanjifamilydefault}{\gtdefault}
+\end{lstlisting}
+
+
 \end{itemize}
 
 %<*en>
@@ -763,237 +1028,280 @@ documents. To typeset Japanese-based documents, you are better to use
 class files other than \texttt{article.cls}, \texttt{book.cls}, and so on.  At
 the present, we have the counterparts of \Pkg{jclasses} (standard
 classes in \pLaTeX) and \Pkg{jsclasses} (classes by Haruhiko
-Okumura), namely, \Pkg{ltjclasses} and \Pkg{ltjsclasses}.
+Okumura), namely, \Pkg{ltjclasses}\footnote{%
+  \texttt{ltjarticle.cls},~\texttt{ltjbook.cls}, \texttt{ltjreport.cls},
+  \texttt{ltjtarticle.cls}, \texttt{ltjtbook.cls}, \texttt{ltjtreport.cls}.
+  The latter \texttt{ltjt*.cls} are for vertically writtened Japanese documents.
+} and \Pkg{ltjsclasses}\footnote{%
+  \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls},~\texttt{ltjskiyou.cls}.}.
 %</en>
 %<*ja>
 しかしながら,上記の設定は日本語の文書にとって十分とは言えない.
 日本語文書を組版するためには,\texttt{article.cls}, \texttt{book.cls}といった
 欧文用のクラスファイルではなく,和文用のクラスファイルを用いた方がよい.
-現時点では,\Pkg{jclasses}(\pLaTeX の標準クラス)と\Pkg{jsclasses}
-(奥村晴彦氏によるクラスファイル)に対応するものとして,\Pkg{ltjclasses},
-\Pkg{ltjsclasses}がそれぞれ用意されている.
+現時点では,\Pkg{jclasses}(\pLaTeX の標準クラス)と\Pkg{jsclasses}%
+(奥村晴彦氏による「\pLaTeXe 新ドキュメントクラス」)に対応するものとして,
+\Pkg{ltjclasses}\footnote{%
+  横組用は \texttt{ltjarticle.cls},~\texttt{ltjbook.cls}, \texttt{ltjreport.cls} であり,
+  縦組用は \texttt{ltjtarticle.cls}, \texttt{ltjtbook.cls}, \texttt{ltjtreport.cls} である.
+},
+\Pkg{ltjsclasses}\footnote{%
+  \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls},~\texttt{ltjskiyou.cls}.}%
+がそれぞれ用意されている.
 %</ja>
 
-%<*en>
-\paragraph{\texttt{\char92 CID}, \texttt{\char92 UTF} and macros in OTF package}
-Under \pLaTeX, \Pkg{otf} package (developed by Shuzaburo Saito) is
-used for typesetting characters which is in Adobe-Japan1-6 CID but not
-in JIS~X~0208. Since this package is widely used, \LuaTeX-ja
-supports some of functions in \Pkg{otf} package.
-If you want to use these functions, load \Pkg{luatexja-otf} package.
-%</en>
 %<*ja>
-\paragraph{\texttt{\char92 CID}, \texttt{\char92 UTF}とOTFパッケージのマクロ}
-\pLaTeX では,JIS~X~0208にないAdobe-Japan1-6の文字を出力するために,
-齋藤修三郎氏による\Pkg{otf}パッケージが用いられていた.このパッケージは
-広く用いられているため,\LuaTeX-jaにおいても\Pkg{otf}パッケージの機能の
-一部をサポートしている.これらの機能を用いるためには\Pkg{luatexja-otf}パッケージ
-を読み込めばよい.
-%</ja>
-
-\begin{LTXexample}
-森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。
-
-\CID{7652}飾区の\CID{13706}野家,
-葛飾区の吉野家
-\end{LTXexample}
+\paragraph{脚注とボトムフロートの出力順序}
+オリジナルの\LaTeX では脚注がボトムフロートの上に来るようになっており,
+\pLaTeX では脚注がボトムフロートの下に来るように変更されている.
 
-%<en>\subsection{Changing Fonts}
-%<ja>\subsection{フォントの変更}
-\label{ssub-chgfnt}
-
-%<*en>
-\paragraph{Remark: Japanese Characters in Math Mode}
-Since \pTeX\ supports Japanese characters in math mode, there are
-sources like the following:
-%</en>
-%<*ja>
-\paragraph{意見:数式モード中の和文文字}
-\pTeX では,特に何もしないでも数式中に和文文字を記述することができた.そのため,
-以下のようなソースが見られた:
-%</ja>
-\begin{LTXexample}
-$f_{高温}$~($f_{\text{high temperature}}$).
-\[ y=(x-1)^2+2\quad よって\quad y>0 \]
-$5\in 素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$.
-\end{LTXexample}
-%<*en>
-We (the project members of \LuaTeX-ja) think that using
-Japanese characters in math mode are allowed if and only if these are used as identifiers.
-In this point of view,
-%</en>
-%<*ja>
-\LuaTeX-jaプロジェクトでは,数式モード中での和文文字はそれらが識別子として用いられる
-ときのみ許されると考えている.
-この観点から,
-%</ja>
-\begin{itemize}
-%<*en>
-\item The lines 1~and~2 above are not correct, since `高温' in above is used as a textual label, and
-`よって' is used as a conjunction.
-%</en>
-%<*ja>
-\item 上記数式のうち1, 2行目は正しくない.なぜならば`高温'が意味のあるラベルと
-      して,`よって'が接続詞として用いられているからである.
-%</ja>
-%<*en>
-\item However, the line~3 is correct, since `素' is used as an identifier.
-%</en>
-%<*ja>
-\item しかしながら,3行目は`素'が識別子として用いられているので正しい.
+\LuaTeX-jaでは「欧文クラスの中にちょっとだけ日本語を入れる」という利用も考慮し,
+脚注とボトムフロートの順序は\LaTeX 通りとした.もし\pLaTeX の出力順序が好みならば,
+\Pkg{stfloats}パッケージを利用して
+\begin{lstlisting}
+ \usepackage{stfloats}\fnbelowfloat
+\end{lstlisting}
+のようにすればよい.\Pkg{footmisc}パッケージを \texttt{bottom}\ オプションを指定して
+読み込むという方法もあるが,それだとボトムフロートと脚注の間が開いてしまう.
 %</ja>
-\end{itemize}
+%%% ↑は英訳しない
+
 %<*en>
-Hence, in our opinion, the above input should be corrected as:
+\paragraph{\Pkg{geometry} package and classes for vertical writing}
+It is well-known that the \Pkg{geometry} package produces the following error, when classes for
+vertical writing is used:
 %</en>
 %<*ja>
-したがって,\LuaTeX-jaプロジェクトの意見としては,上記の入力は次のように直されるべき
-である:
+\paragraph{縦組での\Pkg{geometry}パッケージ}
+\pLaTeX の縦組用標準クラスファイルでは\Pkg{geometry}パッケージを利用することは出来ず,
 %</ja>
-\begin{LTXexample}
-$f_{\text{高温}}$~%
-($f_{\text{high temperature}}$).
-\[ y=(x-1)^2+2\quad
-  \mathrel{\text{よって}}\quad y>0 \]
-$5\in 素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$.
-\end{LTXexample}
-%BUG?: \{\}がなければ「素」がでない.上の段落の「よって」もでてない.
+\begin{lstlisting}
+! Incompatible direction list can't be unboxed.
+\@begindvi ->\unvbox \@begindvibox
+                                   \global \let \@begindvi \@empty
+\end{lstlisting}
 %<*en>
-We also believe that using Japanese characters as identifiers is rare,
-hence we don't describe how to change Japanese fonts in math mode in
-this chapter. For the method, please see Subsection~\ref{ssec-math}.
+Now, \LuaTeX-ja automatically applies the patch \Pkg{lltjp-geometry} to the
+\Pkg{geometry} package, when the direction of the document is \emph{tate} (vertical
+writing).
+This patch \Pkg{lltjp-geometry} also can be used in \pLaTeX; for the detail, please refer
+\url{lltjp-geometry.pdf}~(Japanese).
 %</en>
 %<*ja>
-また\LuaTeX-jaプロジェクトでは,和文文字が識別子として用いられることはほとんどない
-と考えており,したがってこの節では数式モード中の和文フォントを変更する方法については
-記述しない.この方法については \ref{ssec-math} 節を参照のこと.
+というようなエラーが発生することが知られている.
+\LuaTeX-jaでは, \texttt{ltjtarticle.cls} といった縦組クラスの下でも
+\Pkg{geometry}パッケージが利用できるようにパッチ\Pkg{lltjp-geometry}パッケージを自動的に当てている.
+
+なお,\Pkg{lltjp-geometry}パッケージは\pTeX 系列でも明示的に読み込むことによって
+使用可能である.詳細や注意事項は \url{lltjp-geometry.pdf} を参照のこと.
 %</ja>
 
-%<*en>
+
+%<en>\section{Changing Fonts}
+%<ja>\section{フォントの変更}
+
+\subsection{plain \TeX~and~\LaTeXe}
+\label{ssec-chgfnt}
+
 \paragraph{plain \TeX}
-To change Japanese fonts in plain \TeX, you must use the primitive
-\verb+\jfont+. So please see Subsection~\ref{ssec-jfont}.
+%<*en>
+To change Japanese fonts in plain \TeX, you must use the command
+\cs{jfont}~and~\cs{tfont}. So please see Subsection~\ref{ssec-jfont}.
 %</en>
 %<*ja>
-\paragraph{plain \TeX}
-plain \TeX で和文フォントを変更するためには,\verb+\jfont+ プリミティブを用いなけれ
-ばならない.\ref{ssec-jfont} 節を参照.
+plain \TeX で和文フォントを変更するためには,
+\pTeX のように \cs{jfont} 命令や \cs{tfont} 命令を直接用いる.
+\ref{ssec-jfont}節を参照.
 %</ja>
 
+\paragraph{\LaTeXe\ (NFSS2)}
 %<*en>
-\paragraph{NFSS2}
 For \LaTeXe, \LuaTeX-ja adopted most of the font selection system of \pLaTeXe\ (in \texttt{plfonts.dtx}).
 %</en>
 %<*ja>
-\paragraph{NFSS2}
-\LaTeXe については,\LuaTeX-jaではフォント選択システムを\pLaTeXe\ (\texttt{plfonts.dtx})
-の大部分をそのまま採用している.
+\LaTeX で用いる際には,\pLaTeXe\ (\texttt{plfonts.dtx})用のフォント選択機構の大部分を流用している.
 %</ja>
 \begin{itemize}
 %<*en>
-\item Two control sequences \verb+\mcdefault+ and \verb+\gtdefault+ are
-      used to specify the default font families for \emph{mincho} and
-      \emph{gothic}, respectively. Default values: \texttt{mc} for
-      \verb+\mcdefault+ and \texttt{gt} for \verb+\gtdefault+.
-%</en>
-%<*ja>
-\item 2つのコントロールシーケンス \verb+\mcdefault+ と \verb+\gtdefault+ がそれぞ
-      れ明朝体とゴシック体のデフォルトのフォントファミリを指定するために用いられる.
-      初期値:\verb+\mcdefault+ は\texttt{mc},\verb+\gtdefault+ は\texttt{gt}.
-%</ja>
-%<*en>
-\item Commands \verb+\fontfamily+, \verb+\fontseries+,
-      \verb+\fontshape+ and \verb+\selectfont+ can be used to change
+\item Commands \cs{fontfamily}, \cs{fontseries}, and \cs{fontshape} can be used to change
       attributes of Japanese fonts.
 %</en>
 %<*ja>
-\item \verb+\fontfamily+, \verb+\fontseries+, \verb+\fontshape+, そして
-      \verb+\selectfont+ が和文フォントの属性を変更するために使用できる.
+\item 和文フォントの属性を変更するには,\cs{fontfamily}, \cs{fontseries}, \cs{fontshape} を使用する.
+      もちろん,それらを実際に反映させるには手動で \cs{selectfont} を実行する必要がある.
 %</ja>
 
 %<*en>
-\begin{center}
+\begin{center}\small
 \begin{tabular}{cccccc}
 \toprule
 &\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}&\textbf{selection}\\\midrule
 alphabetic fonts
-&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+
-&\verb+\useroman+\\
+&\cs{romanencoding}&\cs{romanfamily}&\cs{romanseries}&\cs{romanshape}
+&\cs{useroman}\\
 Japanese fonts
-&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+
-&\verb+\usekanji+\\
-both&---&--&\verb+\fontseries+&\verb+\fontshape+&---\\
-auto select&\verb+\fontencoding+&\verb+\fontfamily+&---&---&\verb+\usefont+\\
+&\cs{kanjiencoding}&\cs{kanjifamily}&\cs{kanjiseries}&\cs{kanjishape}
+&\cs{usekanji}\\
+both&---&--&\cs{fontseries}&\cs{fontshape}&---\\
+auto select&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</en>
 %<*ja>
-\begin{center}
+\begin{center}\small
 \begin{tabular}{cccccc}
 \toprule
-&\textbf{エンコーディング}&\textbf{ファミリ}&\textbf{シリーズ}&\textbf{シェープ}&\textbf{選択}\\\midrule
-欧文フォント
-&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+
-&\verb+\useroman+\\
-和文フォント
-&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+
-&\verb+\usekanji+\\
-両方&---&--&\verb+\fontseries+&\verb+\fontshape+&---\\
-自動選択&\verb+\fontencoding+&\verb+\fontfamily+&---&---&\verb+\usefont+\\
+&\emph{エンコーディング}&\emph{ファミリ}&\emph{シリーズ}&\emph{シェープ}&\emph{選択}\\\midrule
+欧文
+&\cs{romanencoding}&\cs{romanfamily}&\cs{romanseries}&\cs{romanshape}
+&\cs{useroman}\\
+和文
+&\cs{kanjiencoding}&\cs{kanjifamily}&\cs{kanjiseries}&\cs{kanjishape}
+&\cs{usekanji}\\
+両方&---&--&\cs{fontseries}&\cs{fontshape}&---\\
+自動選択&\cs{fontencoding}&\cs{fontfamily}&---&---&\cs{usefont}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</ja>
 
 %<*en>
-      \verb+\fontencoding{<encoding>}+ changes the encoding of alphabetic fonts
+      \verb+\fontencoding{+<encoding>\verb+}+ changes the encoding of alphabetic fonts
       or Japanese fonts depending on the argument. For example,
       \verb+\fontencoding{JY3}+ changes the encoding of Japanese fonts to
-      \texttt{JY3} and \verb+\fontencoding{T1}+ changes the encoding of
+      \texttt{JY3}, and \verb+\fontencoding{T1}+ changes the encoding of
       alphabetic fonts to \texttt{T1}.
-      \verb+\fontfamily+ also changes the family of Japanese fonts, alphabetic
-      fonts, \emph{or both}. For detail, see Subsection~\ref{ssub-nfsspat}.
+      \cs{fontfamily} also changes the current Japanese font family,
+      the current alphabetic font family, \emph{or both}.
+      For the detail, see Subsection~\ref{ssec-nfsspat}.
 %</en>
 %<*ja>
-      ここで,\verb+\fontencoding{<encoding>}+ は,引数により和文側か欧文
+      ここで,\verb+\fontencoding{+<encoding>\verb+}+ は,引数により和文側か欧文
       側かのどちらかのエンコーディングを変更する.例えば,
       \verb+\fontencoding{JY3}+ は和文フォントのエンコーディングを
       \texttt{JY3}に変更し,\verb+\fontencoding{T1}+ は欧文フォント側を
-      \texttt{T1}へと変更する.\verb+\fontfamily+ も引数により和文側,欧文
-      側,\textbf{あるいは両方}のフォントファミリを変更する.詳細は
-      \ref{ssub-nfsspat} 節を参照すること.
+      \texttt{T1}へと変更する.\cs{fontfamily} も引数により和文側,欧文
+      側,\emph{あるいは両方}のフォントファミリを変更する.詳細は
+      \ref{ssec-nfsspat}節を参照すること.
 %</ja>
 
 %<*en>
 \item For defining a Japanese font family, use
-      \verb+\DeclareKanjiFamily+ instead of
-      \verb+\DeclareFontFamily+. However, in the present implementation,
-      using \verb+\DeclareFontFamily+ doesn't cause any problem.
+      \cs{DeclareKanjiFamily} instead of
+      \cs{DeclareFontFamily}. (In previous version of \LuaTeX-ja, 
+      using \cs{DeclareFontFamily} didn't cause any problem. But this no longer applies
+      the current version.)
+\item Defining a Japanese font shape can be done by usual \cs{DeclareFontShape}:
+%</en>
+%<*ja>
+\item 和文フォントファミリの定義には \cs{DeclareFontFamily} の
+      代わりに \cs{DeclareKanjiFamily} を用いる.以前の
+      実装では \cs{DeclareFontFamily} を用いても問題は生じなかったが,現在の実装では
+      そうはいかない.
+\item 和文フォントのシェイプを定義するには,通常の \cs{DeclareFontShape} を使えば良い:
+%</ja>
+\begin{lstlisting}
+\DeclareFontShape{JY3}{mc}{bx}{n}{<-> s*KozMinPr6N-Bold:jfm=ujis;-kern}{}
+    % Kozuka Mincho Pr6N Bold
+\end{lstlisting}
+%<*ja>
+仮名書体を使う場合など,複数の和文フォントを組み合わせて使いたい場合は
+\ref{ssec-altfont}節の \cs{ltjdeclarealtfont} と,その\LaTeX 版の\
+\cs{DeclareAlternateKanjiFont}(\ref{ssec-nfsspat}節)を参照せよ.
+%</ja>
+
+\end{itemize}
+
+%<*en>
+\paragraph{Remark: Japanese characters in math mode}
+Since \pTeX\ supports Japanese characters in math mode, there are
+sources like the following:
+%</en>
+%<*ja>
+\paragraph{注意:数式モード中の和文文字}
+\pTeX では,特に何もしないでも数式中に和文文字を記述することができた.そのため,
+以下のようなソースが見られた:
+%</ja>
+
+\begin{LTXexample}
+$f_{高温}$~($f_{\text{high temperature}}$).
+\[ y=(x-1)^2+2\quad よって\quad y>0 \]
+$5\in 素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$.
+\end{LTXexample}
+%<*en>
+We (the project members of \LuaTeX-ja) think that using
+Japanese characters in math mode are allowed if and only if these are used as identifiers.
+In this point of view,
+%</en>
+%<*ja>
+\LuaTeX-jaプロジェクトでは,数式モード中での和文文字はそれらが識別子として用いられる
+ときのみ許されると考えている.
+この観点から,
+%</ja>
+
+\begin{itemize}
+%<*en>
+\item The lines 1~and~2 above are not correct, since ``高温'' in above is used as a textual label, and
+``よって'' is used as a conjunction.
 %</en>
 %<*ja>
-\item 和文フォントファミリの定義には \verb+\DeclareFontFamily+ の
-      代わりに \verb+\DeclareKanjiFamily+ を用いる.しかし,現在の
-      実装では \verb+\DeclareFontFamily+ を用いても問題は生じない.
+\item 上記数式のうち1, 2行目は正しくない.なぜならば「高温」が意味のあるラベルと
+      して,「よって」が接続詞として用いられているからである.
 %</ja>
+%<en>\item However, the line~3 is correct, since ``素'' is used as an identifier.
+%<ja>\item しかしながら,3行目は「素」が単なる識別子として用いられているので正しい.
 \end{itemize}
+%<en>Hence, in our opinion, the above input should be corrected as:
+%<ja>したがって,\LuaTeX-jaプロジェクトの意見としては,上記の入力は次のように直されるべきである:
+\begin{LTXexample}
+$f_{\text{高温}}$~%
+($f_{\text{high temperature}}$).
+\[ y=(x-1)^2+2\quad
+  \mathrel{\text{よって}}\quad y>0 \]
+$5\in 素:=\{\,p\in\mathbb N:\text{$p$ is a prime}\,\}$.
+\end{LTXexample}
+%<*en>
+We also believe that using Japanese characters as identifiers is rare,
+hence we don't describe how to change Japanese fonts in math mode in
+this chapter. For the method, please see Subsection~\ref{ssec-math}.
+%</en>
+%<*ja>
+また\LuaTeX-jaプロジェクトでは,和文文字が識別子として用いられることはほとんどない
+と考えており,したがってこの節では数式モード中の和文フォントを変更する方法については
+記述しない.この方法については\ref{ssec-math}節を参照のこと.
+%</ja>
 
-\subsection{fontspec}
+%<en>\subsection{\Pkg{luatexja-fontspec} package}
+%<ja>\subsection{\Pkg{luatexja-fontspec}パッケージ}
 \label{ssec-fontspec}
 %<*en>
-To coexist with the \Pkg{fontspec} package, it is needed to load
-\Pkg{luatexja-fontspec} package in the preamble. This additional
-package automatically loads \Pkg{luatexja} and \Pkg{fontspec}
-package, if needed.
+To use the functionality of the \Pkg{fontspec} package to Japanese fonts, 
+it is needed to load the \Pkg{luatexja-fontspec} package in the preamble, as follows:
+\begin{quote}
+\ttfamily \textbackslash usepackage[<options>]\{luatexja-fontspec\}
+\end{quote}
+This \Pkg{luatexja-fontspec} package
+automatically loads \Pkg{luatexja} and \Pkg{fontspec}
+packages, if needed.
 %</en>
 %<*ja>
-\Pkg{fontspec}パッケージと同様の機能を和文フォントに対しても用いるためには,
-\Pkg{luatexja-fontspec}パッケージをプリアンブルで読み込む必要がある.このパッケージ
-は必要ならば自動で\Pkg{luatexja}パッケージと\Pkg{fontspec}パッケージを読み込む.
+\Pkg{fontspec}パッケージは,\LuaTeX・\XeTeX において
+TrueType・OpenTypeフォントを容易に扱うためのパッケージであり,このパッケージを読み込んでお
+けばUnicodeによる各種記号の直接入力もできるようになる.
+\LuaTeX-jaでは和文と欧文を区別しているため,\Pkg{fontspec}パッケージの機能は欧文フォントに
+対してのみ有効なものとなっている.
+
+\LuaTeX-ja上において,\Pkg{fontspec}パッケージと同様の機能を和文フォントに対しても用いる場
+合は\Pkg{luatexja-fontspec}パッケージを読み込む:
+\begin{quote}
+\ttfamily \textbackslash usepackage[<options>]\{luatexja-fontspec\}
+\end{quote}
+このパッケージは自動で\Pkg{luatexja}パッケージと\Pkg{fontspec}パッケージを読み込む.
 %</ja>
 
 %<*en>
-In \Pkg{luatexja-fontspec} package, the following 7~commands are defined as
+In the \Pkg{luatexja-fontspec} package, the following seven~commands are defined as
 counterparts of original commands in the \Pkg{fontspec} package:
 %</en>
 %<*ja>
@@ -1001,3559 +1309,8516 @@ counterparts of original commands in the \Pkg{fontspec} package:
 パッケージの元のコマンドに対応するものとして定義している:
 %</ja>
 %<*en>
-\begin{center}
+\begin{center}\small
 \begin{tabular}{ccccc}
 \toprule
 Japanese fonts
-&\verb+\jfontspec+&\verb+\setmainjfont+&\verb+\setsansjfont+&\verb+\newjfontfamily+\\
+&\cs{jfontspec}&\cs{setmainjfont}&\cs{setsansjfont}&\cs{setmonojfont}$^*$\\
 alphabetic fonts
-&\verb+\fontspec+&\verb+\setmainfont+&\verb+\setsansfont+&\verb+\newfontfamily+\\
+&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}&\cs{setmonofont}\\
 \midrule
 Japanese fonts
-&\verb+\newjfontface+&\verb+\defaultjfontfeatures+&\verb+\addjfontfeatures+\\
+&\cs{newjfontfamily}&\cs{newjfontface}
+&\cs{defaultjfontfeatures}&\cs{addjfontfeatures}\\
 alphabetic fonts
-&\verb+\newfontface+&\verb+\defaultfontfeatures+&\verb+\addfontfeatures+\\
+&\cs{newfontfamily}&\cs{newfontface}
+&\cs{defaultfontfeatures}&\cs{addfontfeatures}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</en>
 %<*ja>
-\begin{center}
-\begin{tabular}{ccccc}
+\begin{center}\small
+\begin{tabular}{cccc}
 \toprule
-和文フォント
-&\verb+\jfontspec+&\verb+\setmainjfont+&\verb+\setsansjfont+&\verb+\newjfontfamily+\\
-欧文フォント
-&\verb+\fontspec+&\verb+\setmainfont+&\verb+\setsansfont+&\verb+\newfontfamily+\\
+和文
+&\cs{jfontspec}&\cs{setmainjfont}&\cs{setsansjfont}\\
+欧文
+&\cs{fontspec}&\cs{setmainfont}&\cs{setsansfont}\\
 \midrule
-和文フォント
-&\verb+\newjfontface+&\verb+\defaultjfontfeatures+&\verb+\addjfontfeatures+\\
-欧文フォント
-&\verb+\newfontface+&\verb+\defaultfontfeatures+&\verb+\addfontfeatures+\\
+和文
+&\cs{newjfontfamily}&\cs{newjfontface}&\cs{defaultjfontfeatures}\\
+欧文
+&\cs{newfontfamily}&\cs{newfontface}&\cs{defaultfontfeatures}\\
+\midrule
+和文
+&\cs{addjfontfeatures}\\
+欧文
+&\cs{addfontfeatures}\\
 \bottomrule
 \end{tabular}
 \end{center}
 %</ja>
 
-\begin{LTXexample}
-\fontspec[Numbers=OldStyle]{TeX Gyre Termes}
-\jfontspec{IPAexMincho}
-JIS~X~0213:2004→辻
-
-\addjfontfeatures{CJKShape=JIS1990}
-JIS~X~0208:1990→辻
-\end{LTXexample}
-
+%<en> The package option of \Pkg{luatexja-fontspec} are the followings:
+%<ja> \Pkg{luatexja-fontspec} パッケージのオプションは以下の通りである:
+\begin{cslist}
+ \item[match]
 %<*en>
-Note that there is no command named \verb+\setmonojfont+, since it is
-popular for Japanese fonts that nearly all Japanese glyphs have same
-widths.  Also note that the kerning feature is set off by default in
-these 7~commands, since this feature and \textbf{JAglue} will clash (see
-\ref{para-kern}).
+If this option is specified, usual family-changing commands such as
+\cs{rmfamily},~\cs{textrm}, \cs{sffamily},~\dots\ also change Japanese font family.
+
+Note that \emph{\cs{setmonojfont} is defined
+if and only if this \texttt{\textup{match}} option is specified}.
 %</en>
+
 %<*ja>
-和文フォントについては全ての和文文字のグリフがほぼ等幅であるのが普通であるため,
-\verb+\setmonojfont+ コマンドは存在しないことに注意.また,これらの和文用の7つのコマ
-ンドではKerning featureはデフォルトではoffとなっている.これはこの
-featureが\textbf{JAglue}と衝突するためである(\ref{para-kern} 節を参照).
+このオプションが指定されると,「\pLaTeXe 新ドキュメントクラス」のように\
+\cs{rmfamily}, \verb+\textrm{...}+, \cs{sffamily} 等が
+欧文フォントだけでなく和文フォントも変更するようになる.
+
+\emph{なお,\cs{setmonojfont} はこの \texttt{match} オプションが
+指定された時のみ定義される.}この命令は標準の「タイプライタ体に対応する和文フォント」を指定する.
 %</ja>
 
-%<en>\section{Changing Parameters}
-%<ja>\section{パラメータの変更}
+ \item[pass=<opts>]
+%<en> \emph{(Obsoleted)}\ Specify options <opts> which will be passed to the \Pkg{fontspec} package.
+%<ja> \Pkg{fontspec} パッケージに渡すオプション <opts> を指定する.本オプションは時代遅れである.
 
+\item[scale=<float>]
 %<*en>
-There are many parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX,
-most of them are not stored as internal register of \TeX, but as an
-original storage system in \LuaTeX-ja. Hence, to assign or acquire those
-parameters, you have to use commands \verb+\ltjsetparameter+ and
-\verb+\ltjgetparameter+.
+Override the ratio of the font size of Japanese fonts to that of alphabetic fonts.
+The default value is calculated automatically (for~example, about~0.924865 when
+            the \Pkg{ltjsarticle} class is used).
 %</en>
 %<*ja>
-\LuaTeX-jaには多くのパラメータが存在する.そして\LuaTeX の仕様のために,
-その多くは\TeX のレジスタにではなく,\LuaTeX-ja独自の方法で保持されている.
-そのため,これらのパラメータを設定・取得するためには \verb+\ltjsetparameter+ と \verb+\ltjgetparameter+ を
-用いる必要がある.
+欧文に対する和文の比率は,標準では \Pkg{luatexja-fontspec}読み込み時の和欧文比率から
+自動計算される(例えば,\Pkg{ltjsarticle}クラス使用時には和文は欧文の約0.924865倍となる)が,
+それを手動で上書きするときに使用する.
 %</ja>
-
-%<en>\subsection{Editing the range of \textbf{JAchar}s}
-%<ja>\subsection{\textbf{JAchar}の範囲の設定}
+\end{cslist}
 
 %<*en>
-To edit the range of \textbf{JAchar}s, you have to assign a non-zero
-natural number which is less than 217 to the character range first. This
-can be done by using \verb+\ltjdefcharrange+ primitive. For example, the
-next line assigns whole characters in Supplementary Ideographic Plane
-and the character `漢' to the range number~100.
+All other options listed above are simply passed to the \Pkg{fontspec} package.
+This means that two lines below are equivalent, for example.
 %</en>
 %<*ja>
-\textbf{JAchar}の範囲を設定するためには,まず各文字に0より大きく217より小さいindexを
-割り当てる必要がある.これには \verb+\ltjdefcharrange+ プリミティブを用いる.
-例えば,次のように書くことで追加漢字面(SIP)にある全ての文字と`漢'が
-「100番の文字範囲」に属するように設定される.
+上記にないオプションは全て \Pkg{fontspec} パッケージに渡される.
+例えば,下の2行は同じ意味になる:
 %</ja>
 \begin{lstlisting}
-\ltjdefcharrange{100}{"10000-"1FFFF,`漢}
+\usepackage[no-math]{fontspec}\usepackage{luatexja-fontspec}
+\usepackage[no-math]{luatexja-fontspec}
 \end{lstlisting}
-%<*en>
-This assignment of numbers to ranges are always global, so you should
-not do this in the middle of a document.
-%</en>
-%<*ja>
-この文字範囲の割り当ては常にグローバルであり,したがって文書の途中で
-この操作をするべきではない.
-%</ja>
 
-%<*en>
-If some character has been belonged to some non-zero numbered range,
-this will be overwritten by the new setting. For example, whole SIP
-belong to the range~4 in the default setting of \LuaTeX-ja, and if you
-specify the above line, then SIP will belong to the range~100 and be
-removed from the range~4.
-%</en>
-%<*ja>
-もし指定されたある文字がある非零番号の範囲に属していたならば,これは新しい設定で
-上書きされる.例えば,SIPは全て\LuaTeX-jaのデフォルトでは4番の文字範囲に
-属しているが,上記の指定を行えばSIPは100番に属すようになり,4番からは除かれる.
-%</ja>
 
 %<*en>
-After assigning numbers to ranges, the \textsf{jacharrange} parameter can
-be used to customize which character range will be treated as ranges of
-\textbf{JAchar}s, as the following line (this is just the default
-setting of \LuaTeX-ja):
-%</en>
-%<*ja>
-文字範囲に番号を割り当てた後は,\textsf{jacharrange}パラメータが\textbf{JAchar}と
-して扱われる文字の範囲を設定するために用いられる.例えば,以下は\LuaTeX-jaの
-初期設定である:
-%</ja>
-\begin{verbatim}
-\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, +8}}
-\end{verbatim}
-%<*en>
-The argument to \textsf{jacharrange} parameter is a list of integer.
-Negative integer $-n$ in the list means that `the characters that belong to
-range~$n$ are treated as \textbf{ALchar}', and positive integer $+n$ means
-that `the characters that belong to range~$n$ are treated as \textbf{JAchar}'.
-%</en>
-%<*ja>
-\textsf{jacharrange}パラメータには整数のリストを与える.
-リスト中の負の整数$-n$は「文字範囲$n$に属する文字は\textbf{ALchar}として
-扱われる」ことを意味し,正の整数$+n$は\textbf{JAchar}として扱うことを意味する.
-%</ja>
+The reason that \cs{setmonojfont} is not defined by default is that
+it is popular for Japanese fonts that nearly all Japanese glyphs have same
+widths.  Also note that kerning information in a font is not used
+(that is, \texttt{kern} feature is set off) by default in these seven (or~eight) commands.
+This is because of the compatibility with previous versions of \LuaTeX-ja
+(see \ref{para-kern}).
 
-%<*en>
-\paragraph{Default Setting}
-\LuaTeX-ja predefines eight character ranges for convenience. They are
-determined from the following data:
+Below is an example of \cs{jfontspec}.
 %</en>
 %<*ja>
-\paragraph{初期設定}
-\LuaTeX-jaでは8つの文字範囲を設定している.これらは以下のデータに基づいて決定して
-いる.
+標準で \cs{setmonojfont} コマンドが定義されないのは,
+和文フォントではほぼ全ての和文文字のグリフが等幅であるのが伝統的であったことによる.
+また,これらの和文用のコマンドではフォント内のペアカーニング情報は標準では使用されない,
+言い換えれば \texttt{kern} featureは標準では無効化となっている.
+これは以前のバージョンの\LuaTeX-jaとの互換性のためである(\ref{para-kern}節を参照).
+
+以下に\cs{jfontspec}の使用例を示す.
 %</ja>
-\begin{itemize}
+
+\begin{LTXexample}[width=0.4\textwidth]
+\jfontspec[CJKShape=NLC]{KozMinPr6N-Regular}
+JIS~X~0213:2004→辻\par
+\jfontspec[CJKShape=JIS1990]{KozMinPr6N-Regular}
+JIS~X~0208:1990→辻
+\end{LTXexample}
+
+%<en>\subsection{Presets of Japanese fonts}
+%<ja>\subsection{和文フォントのプリセット設定}
+\label{ssec-preset}
+
 %<*en>
-\item Blocks in Unicode~6.0.
+One can load the \Pkg{luatexja-preset}
+package to use several ``presets'' of Japanese fonts. 
+This package provides functions in a part of
+\Pkg{japanese-otf} package and a part of \Pkg{PXchfon} package by Takayuki Yato.
+
+One can specified other options other than listed in this subsection.
+These are simply passed to the \Pkg{luatexja-fontspec}\footnote{if \texttt{nfssonly} option is
+\emph{not} specified; in this case these options are simply ignored.}.
+For example, the line~5 in below example is eqivalent to lines 1--3.
 %</en>
 %<*ja>
-\item Unicode~6.0のブロック.
+よく使われている和文フォント設定を一行で指定できるようにしたのが
+\Pkg{luatexja-preset}パッケージである.このパッケージは,
+\Pkg{otf}パッケージの一部機能と八登崇之氏による\Pkg{PXchfon}パッケージの一部機能とを
+合わせたような格好をしている.
+
+オプションとして,本節にないものも指定することができるが,それらは
+\Pkg{luatexja-fontspec}パッケージに渡される\footnote{\texttt{nfssonly} オプションが
+指定されていた場合は,\Pkg{luatexja-fontspec}パッケージは読み込まれないので単純に無視され
+る.}.例えば,下の1--3行目は5行目のように一行にまとめることができる.
 %</ja>
+\begin{lstlisting}
+\usepackage[no-math]{fontspec}
+\usepackage[match]{luatexja-fontspec}
+\usepackage[kozuka-pr6n]{luatexja-preset}
+%%--------
+\usepackage[no-math,match,kozuka-pr6n]{luatexja-preset}
+\end{lstlisting}
+
+%<en>\paragraph{General options}
+%<ja>\paragraph{一般的なオプション}
+\begin{cslist}[before*=]
+
+\item[fontspec]
 %<*en>
-\item The \texttt{Adobe-Japan1-UCS2} mapping between a CID Adobe-Japan1-6 and Unicode.
+With this option, Japanese fonts are selected using functionality of
+the \Pkg{luatexja-fontspec} package. This means that the \Pkg{fontspec} package is
+            automatically loaded by this package.
+\emph{This option is enabled by default.}
+
+If you need to pass some options to \Pkg{fontspec}, you can load \Pkg{fontspec} manually
+before \Pkg{luatexja-preset}:
 %</en>
 %<*ja>
-\item \texttt{Adobe-Japan1-UCS2}によるAdobe-Japan1-6のCIDとUnicodeの間の
-      マッピング.
+\Pkg{luatexja-fontspec}パッケージの機能を用いて和文フォントを選択する.
+これは,\Pkg{fontspec}パッケージが自動で読み込まれることを意味する.
+\emph{このオプションは標準で有効になっている.}
+
+もし\Pkg{fontspec}パッケージに何らかのオプションを渡す必要がある
+\footnote{例えば,数式フォントまで置換されてしまい,\cs{mathit}によってギリシャ文字の
+斜体大文字が出なくなる,など.}場合は,
+次のように\Pkg{luatexja-preset}の前に\Pkg{fontspec}を手動で読みこめば良い:
 %</ja>
+\begin{lstlisting}
+\usepackage[no-math]{fontspec}
+\usepackage[...]{luatexja-preset}
+\end{lstlisting}
+
+\item[nfssonly]
 %<*en>
-\item The \texttt{PXbase} bundle for \upTeX\ by Takayuki Yato.
+With this option, selecting Japanese fonts won't be performed using the functionality of
+            the \Pkg{fontspec} package, but only standard NFSS2 (hence without
+            \cs{addjfontfeatures} etc.).
+This option is ignored when \Pkg{luatexja-fontspec} package is loaded.
+
+When this option is specified, \Pkg{fontspec}~and~\Pkg{luatexja-fontspec} are
+\emph{not} loaded by default. Nevertheless, 
+the package\Pkg{fontspec} can coexist with the option, as the following:
+\begin{lstlisting}
+\usepackage{fontspec}
+\usepackage[hiragino-pron,nfssonly]{luatexja-preset}
+\end{lstlisting}
+In this case, one can use \cs{setmainfont} etc.\ to select \emph{alphabetic} fonts.
 %</en>
 %<*ja>
-\item 八登崇之氏による\upTeX 用の\texttt{PXbase}バンドル.
+\LaTeX 標準のフォント選択機構(NFSS2)を用いて
+\texttt{ltjpm}(明朝),\texttt{ltjpg}(ゴシック),それに後に述べる \texttt{deluxe} オプ
+            ションが指定された場合には \texttt{ltjpmg}(丸ゴシック)という
+3つの和文フォントファミリを定義し,これらを用いる.
+
+本オプション指定時には\Pkg{fontspec}・\Pkg{luatexja-fontspec}パッケージは
+自動では読み込まれない,しかし,
+\begin{lstlisting}
+\usepackage{fontspec}
+\usepackage[hiragino-pron,nfssonly]{luatexja-preset}
+\end{lstlisting}
+のようにすれば,このオプションを指定すれば
+欧文フォントを\Pkg{fontspec}パッケージの機能を使って指定することができる.
+一方,
+パッケージ読み込み時に既に\Pkg{luatexja-fontspec}パッケージが読み込まれて
+            いる場合は \texttt{nfssonly} オプションは無視される.
 %</ja>
-\end{itemize}
 
+\item[nodeluxe]
 %<*en>
-Now we describe these eight ranges. The alphabet `J' or `A' after the
-number shows whether characters in the range is treated as
-\textbf{JAchar}s or not by default. These settings are similar to the
-\texttt{prefercjk} settings defined in \texttt{PXbase} bundle.
+Use one-weighted \textit{mincho} and \textit{gothic} font families.
+This means that \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+ and
+\verb+\gtfamily\mdseries+ use the same font.
+\emph{This option is enabled by default.}
 %</en>
 %<*ja>
-以下ではこれら8つの文字範囲について記述する.番号のあとのアルファベット`J'と`A'
-はデフォルトで\textbf{JAchar}か\textbf{ALchar}かを表している.これらの設定は
-\texttt{PXbase}バンドルで定義されている\texttt{prefercjk}と類似のものである.
+\LaTeXe 環境下の標準設定のように,明朝体・ゴシック体を各1ウェイトで使用する.
+より具体的に言うと,この設定の下では
+\ \verb+\mcfamily\bfseries+, \verb+\gtfamily\bfseries+,
+\verb+\gtfamily\mdseries+はみな同じフォントとなる.
+\emph{このオプションは標準で有効になっている.}
 %</ja>
-\begin{description}
+\item[deluxe]
 %<*en>
-\item[Range~8${}^{\text{J}}$] Symbols in the intersection of the upper half of ISO~8859-1
-        (Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese). This character range
-        consists of the following characters:
+Use \textit{mincho} with two weights (medium~and~bold),
+\textit{gothic} with three weights (medium, bold~and~heavy), and \textit{rounded gothic}%
+\footnote{Provided by \cs{mgfamily} and \cs{textmg},
+because \textit{rounded gothic} is called \textit{maru gothic} (丸ゴシック) in Japanese.}.
+The heavy weight of \textit{gothic} can be used by ``changing the family'' \cs{gtebfamily},
+or \verb+\textgteb{...}+.
+This is because the \Pkg{fontspec} package can handle only medium (\cs{mdseries}) and
+bold (\cs{bfseries}).
 %</en>
 %<*ja>
-\item[範囲8${}^{\text{J}}$] ISO~8859-1の上位領域(ラテン1補助)と
-                             JIS~X~0208の共通部分にある記号.この文字範囲は
-                             以下の文字で構成される:
-%</ja>
-\begin{multicols}{2}
+明朝体2ウェイト・ゴシック体3ウェイトと,
+丸ゴシック体 (\cs{mgfamily}, \verb+\textmg{...}+) を使用可能とする.
+ゴシック体は中字・太字・極太の3ウェイトがあるが,
+極太ゴシック体を使う場合,
 \begin{itemize}
-\def\ch#1#2{\item \char"#1\ (\texttt{U+00#1}, #2)}%"
+ \item \cs{gtebfamily}, \verb+\textgteb{...}+
+ \item \cs{ebseries} (周囲がゴシック体のとき,\texttt{nfssonly} オプション指定時のみ)
+\end{itemize}
+のいずれかを用いる.標準で \cs{ebseries} が準備されていないのは,バージョンが古い
+\Pkg{fontspec}では中字(\cs{mdseries})と太字(\cs{bfseries})しか扱えなかった名残である.
+%</ja>
+\item[expert]
 %<*en>
-\ch{A7}{Section Sign}
-\ch{A8}{Diaeresis}
-\ch{B0}{Degree sign}
-\ch{B1}{Plus-minus sign}
-\ch{B4}{Spacing acute}
-\ch{B6}{Paragraph sign}
-\ch{D7}{Multiplication sign}
-\ch{F7}{Division Sign}
+Use horizontal/vertical kana alternates, and define a command \cs{rubyfamily} to use kana
+characters designed for ruby.
 %</en>
 %<*ja>
-\ch{A7}{節記号}
-\ch{A8}{トレマ}
-\ch{B0}{度}
-\ch{B1}{正又は負符号}
-\ch{B4}{アキュート・アクセント}
-\ch{B6}{段落記号}
-\ch{D7}{乗算記号}
-\ch{F7}{除算記号}
+横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{%
+  \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では
+  font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え).
+}.
 %</ja>
-\end{itemize}
-\end{multicols}
-
+\item[bold]
+%<en>Substitute bold series of \textit{gothic} for  bold series of \textit{mincho}.
+%<ja>「明朝の太字」をゴシック体の太字によって代替する.
+\item[90jis]
+%<en>Use 90JIS glyph variants if possible.
+%<ja>出来る限り90JISの字形を使う.
+\item[jis2004]
+%<en>Use JIS2004 glyph variants if possible.
+%<ja>出来る限りJIS2004の字形を使う.
+\item[jis]
 %<*en>
-\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-6.
-This range consist of the following Unicode ranges, \emph{except characters in the range~8 above}:
+Use the JFM \texttt{jfm-jis.lua}, instead of \texttt{jfm-ujis.lua}, which is the default JFM of
+\LuaTeX-ja.
 %</en>
 %<*ja>
-\item[範囲1${}^{\text{A}}$] ラテン文字.一部はAdobe-Japan1-6にも含まれている.
-                             この範囲は以下のUnicodeのブロックから構成されている.
-                             \textbf{ただし,範囲8は除く.}
+用いるJFMを(JISフォントメトリック類似の)\texttt{jfm-jis.lua}にする.このオプションがない時は
+\LuaTeX-ja標準の\texttt{jfm-ujis.lua}が用いられる.
 %</ja>
-\begin{multicols}{2}
-\begin{itemize}
+\end{cslist}
 %<*en>
-\item \texttt{U+0080}--\texttt{U+00FF}: Latin-1 Supplement
-\item \texttt{U+0100}--\texttt{U+017F}: Latin Extended-A
-\item \texttt{U+0180}--\texttt{U+024F}: Latin Extended-B
-\item \texttt{U+0250}--\texttt{U+02AF}: IPA Extensions
-\item \texttt{U+02B0}--\texttt{U+02FF}: Spacing Modifier Letters
-\item \texttt{U+0300}--\texttt{U+036F}: Combining Diacritical Marks
-\item \texttt{U+1E00}--\texttt{U+1EFF}: Latin Extended Additional
+Note that \texttt{90jis} and \texttt{jis2004} only affect with \textit{mincho},
+\textit{gothic} (and possibly \textit{rounded gothic}) defined by this package.
+We didn't taken account of  when both \texttt{90jis} and \texttt{jis2004} are specified.
 %</en>
 %<*ja>
-\item \texttt{U+0080}--\texttt{U+00FF}: ラテン1補助
-\item \texttt{U+0100}--\texttt{U+017F}: ラテン文字拡張A
-\item \texttt{U+0180}--\texttt{U+024F}: ラテン文字拡張B
-\item \texttt{U+0250}--\texttt{U+02AF}: IPA拡張(国際音声記号)
-\item \texttt{U+02B0}--\texttt{U+02FF}: 前進を伴う修飾文字
-\item \texttt{U+0300}--\texttt{U+036F}: ダイアクリティカルマーク(合成可能)
-\item \texttt{U+1E00}--\texttt{U+1EFF}: ラテン文字拡張追加
+\texttt{90jis}と\texttt{jis2004}については本パッケージで定義された
+明朝体・ゴシック体(・丸ゴシック体)にのみ有効である.両オプションが
+同時に指定された場合の動作については全く考慮していない.
 %</ja>
-\par\
-\end{itemize}
-\end{multicols}
+
+%<en>\paragraph{Presets for multi weight}
+%<ja>\paragraph{多ウェイト用プリセットの一覧}
 %<*en>
-\item[Range~2${}^{\text{J}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese
-          fonts) has some of these characters.
+Besides \texttt{morisawa-pro}~and~\texttt{morisawa-pr6n} presets,
+fonts are specified by font name, not by file name.
+In following tables, starred fonts (e.g.~KozGo\dots-Regular) are used for medium series of \textit{gothic},
+\emph{if and only if \texttt{deluxe} option is specified}.
 %</en>
 %<*ja>
-\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがって多くの
-                             和文フォント)はこれらの文字を持つ.
+\texttt{morisawa-pro}, \texttt{morisawa-pr6n}以外はフォントの指定は
+(ファイル名でなく)フォント名で行われる.
+以下の表において,*\,つきのフォント(e,g,~KozGo\dots-Regular)は,\emph{\texttt{deluxe}オプション指定時に}
+ゴシック体中字として用いられるものを示している.
 %</ja>
-\begin{multicols}{2}
-\begin{itemize}
+\begin{cslist}[style=standard]
+ \item[kozuka-pro] Kozuka Pro (Adobe-Japan1-4) fonts.
+%<en>    \\*[-\dimexpr\medskipamount+\baselineskip\relax]
+ \item[kozuka-pr6] Kozuka Pr6 (Adobe-Japan1-6)  fonts.
+%<en>    \\*[-\dimexpr\medskipamount+\baselineskip\relax]
+ \item[kozuka-pr6n] Kozuka Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts.
+
 %<*en>
-\item \texttt{U+0370}--\texttt{U+03FF}: Greek and Coptic
-\item \texttt{U+0400}--\texttt{U+04FF}: Cyrillic
-\item \texttt{U+1F00}--\texttt{U+1FFF}: Greek Extended
+Kozuka Pro/Pr6N fonts are bundled with Adobe's software, such as Adobe~InDesign.
+There is not rounded gothic family in Kozuka fonts.
 %</en>
 %<*ja>
-\item \texttt{U+0370}--\texttt{U+03FF}: ギリシア文字及びコプト文字
-\item \texttt{U+0400}--\texttt{U+04FF}: キリル文字
-\item \texttt{U+1F00}--\texttt{U+1FFF}: キリル文字補助
+小塚Pro書体・Pr6N書体はAdobe InDesign等のAdobe製品にバンドルされている.
+「小塚丸ゴシック」は存在しないので,便宜的に小塚ゴシックHによって代用している.
 %</ja>
-\\\
-\end{itemize}
-\end{multicols}
+\begin{center}\small
+\begin{tabular}{cllll}
+\toprule
+\bf family&\bf series&\tt kozuka-pro&\tt kozuka-pr6&\tt kozuka-pr6n\\
+\midrule
+ &medium&KozMinPro-Regular&KozMinProVI-Regular&KozMinPr6N-Regular\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&KozMinPro-Bold&KozMinProVI-Bold&KozMinPr6N-Bold\\
+\midrule
+ &&KozGoPro-Regular*&KozGoProVI-Regular*&KozGoPr6N-Regular*\\
+ &\smash{\raisebox{1.5ex}{medium}}
+ &KozGoPro-Medium&KozGoProVI-Medium&KozGoPr6N-Medium\\
+\cmidrule(l){2-5}
+%<en>\smash{\raisebox{2ex}{\textit{gothic}}}%
+%<ja>\smash{\raisebox{2ex}{\gt ゴシック}}%
+ &bold&KozGoPro-Bold&KozGoProVI-Bold&KozGoPr6N-Bold\\
+ &heavy&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&KozGoPro-Heavy&KozGoProVI-Heavy&KozGoPr6N-Heavy\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+ \item[hiragino-pro]  Hiragino Pro (Adobe-Japan1-5) fonts.
+%<en>    \\*[-\dimexpr\medskipamount+\baselineskip\relax]
+ \item[hiragino-pron] Hiragino ProN (Adobe-Japan1-5, JIS04-savvy) fonts.
+
 %<*en>
-\item[Range~3${}^{\text{J}}$] Punctuations and Miscellaneous symbols. The block list is
-          indicated in Table~\ref{table-rng3}.
+Hiragino fonts are bundled with Mac OS~X 10.5 or later.
+Some editions of a Japanese word-processor ``一太郎2012'' includes Hiragino ProN fonts.
+Note that the heavy weight of \textit{gothic} family only supports
+Adobe-Japan1-3 character collection (Std/StdN).
 %</en>
 %<*ja>
-\item[範囲3${}^{\text{J}}$] 句読点と記号類.ブロックのリストは表 \ref{table-rng3}
-                             に示してある.
+ヒラギノフォントは,Mac OS~X以外にも,一太郎2012の上位エディションにもバンドルされている.
+極太ゴシックとして用いるヒラギノ角ゴW8は,Adobe-Japan1-3の範囲しかカバーしていない
+Std/StdNフォントであり,その他はAdobe-Japan1-5対応である.
 %</ja>
-\begin{table}[!tb]
-%<*en>
-\caption{Unicode blocks in predefined character range~3.}
-%</en>
-%<*ja>
-\caption{文字範囲3に指定されているUnicodeブロック.}
-%</ja>
-\label{table-rng3}
-\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
 \begin{center}\small
-\begin{tabular}{llll}
-%<*en>
-"2000--"206F&General Punctuation&
-"2070--"209F&Superscripts and Subscripts\\
-"20A0--"20CF&Currency Symbols&
-"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\
-"2100--"214F&Letterlike Symbols&
-"2150--"218F&Number Forms\\
-"2190--"21FF&Arrows&
-"2200--"22FF&Mathematical Operators\\
-"2300--"23FF&Miscellaneous Technical&
-"2400--"243F&Control Pictures\\
-"2500--"257F&Box Drawing&
-"2580--"259F&Block Elements\\
-"25A0--"25FF&Geometric Shapes&
-"2600--"26FF&Miscellaneous Symbols\\
-"2700--"27BF&Dingbats&
-"2900--"297F&Supplemental Arrows-B\\
-"2980--"29FF&Misc.\ Mathematical Symbols-B&
-"2B00--"2BFF&Miscellaneous Symbols and Arrows\\
-"E000--"F8FF&Private Use Area&
-%</en>
-%<*ja>
-"2000--"206F&一般句読点&
-"2070--"209F&上付き・下付き\\
-"20A0--"20CF&通貨記号&
-"20D0--"20FF&記号用ダイアクリティカルマーク(合成可能)\\
-"2100--"214F&文字様記号&
-"2150--"218F&数字に準じるもの\\
-"2190--"21FF&矢印&
-"2200--"22FF&数学記号(演算子)\\
-"2300--"23FF&その他の技術用記号&
-"2400--"243F&制御機能用記号\\
-"2500--"257F&罫線素片&
-"2580--"259F&ブロック要素\\
-"25A0--"25FF&幾何学模様&
-"2600--"26FF&その他の記号\\
-"2700--"27BF&装飾記号&
-"2900--"297F&補助矢印B\\
-"2980--"29FF&その他の数学記号B&
-"2B00--"2BFF&その他の記号及び矢印\\
-"E000--"F8FF&私用領域(外字領域)&
-%</ja>
+\begin{tabular}{clll}
+\toprule
+\bf family&\bf series&\tt hiragino-pro&\tt hiragino-pron\\
+\midrule
+ &medium&Hiragino~Mincho~Pro~W3&Hiragino~Mincho~ProN~W3\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&Hiragino~Mincho~Pro~W6&Hiragino~Mincho~ProN~W6\\
+\midrule
+ &&Hiragino~Kaku~Gothic~Pro~W3*&Hiragino~Kaku~Gothic~ProN~W3*\\
+ &\smash{\raisebox{1.5ex}{medium}}
+ &Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\
+\cmidrule(l){2-4}
+%<en>\smash{\raisebox{2ex}{\textit{gothic}}}%
+%<ja>\smash{\raisebox{2ex}{\gt ゴシック}}%
+ &bold&Hiragino~Kaku~Gothic~Pro~W6&Hiragino~Kaku~Gothic~ProN~W6\\
+ &heavy&Hiragino~Kaku~Gothic~Std~W8&Hiragino~Kaku~Gothic~StdN~W8\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&Hiragino~Maru~Gothic~Pro~W4&Hiragino~Maru~Gothic~ProN~W4\\
+\bottomrule
 \end{tabular}
 \end{center}
-\end{table}
-%<*en>
-\item[Range~4${}^{\text{A}}$] Characters usually not in Japanese fonts. This range consists
-          of almost all Unicode blocks which are not in other
-          predefined ranges. Hence, instead of showing the block list,
-          we put the definition of this range itself:
-%</en>
-%<*ja>
-\item[範囲4${}^{\text{A}}$] 通常和文フォントには含まれていない文字.
-                             この範囲は他の範囲にないほとんど全てのUnicodeブロック
-                             で構成されている.したがって,ブロックのリストを示す
-                             代わりに,範囲の定義そのものを示す:
-%</ja>
-\begin{lstlisting}
-\ltjdefcharrange{4}{%
-   "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
-  "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A82F, "A840-"ABFF, "FB50-"FE0F,
-  "FE20-"FE2F, "FE70-"FEFF, "FB00-"FB4F, "10000-"1FFFF} % non-Japanese
-\end{lstlisting}
+
+%<ja>\medskip
+
+ \item[morisawa-pro]  Morisawa Pro (Adobe-Japan1-4) fonts.
+%<en>    \\*[-\dimexpr\medskipamount+\baselineskip\relax]
+ \item[morisawa-pr6n]  Morisawa Pr6N (Adobe-Japan1-6, JIS04-savvy) fonts.
+
+\begin{center}\small
+\begin{tabular}{cl>{\tt}l>{\tt}l}
+\toprule
+\bf family&\bf series&morisawa-pro&morisawa-pr6n\\
+\midrule
+ &medium&A-OTF-RyuminPro-Light.otf&A-OTF-RyuminPr6N-Light.otf\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&A-OTF-FutoMinA101Pro-Bold.otf&A-OTF-FutoMinA101Pr6N-Bold.otf\\
+\midrule
+ &medium
+ &A-OTF-GothicBBBPro-Medium.otf&A-OTF-GothicBBBPr6N-Medium.otf\\
+%<en>\textit{gothic}%
+%<ja>\gt ゴシック
+ &bold&A-OTF-FutoGoB101Pro-Bold.otf&A-OTF-FutoGoB101Pr6N-Bold.otf\\
+ &heavy&A-OTF-MidashiGoPro-MB31.otf&A-OTF-MidashiGoPr6N-MB31.otf\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&A-OTF-Jun101Pro-Light.otf&A-OTF-ShinMGoPr6N-Light.otf\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+ \item[yu-win]  Yu fonts bundled with Windows~8.1.
+%<en>    \\*[-\dimexpr\medskipamount+\baselineskip\relax]
+ \item[yu-osx]  Yu fonts bundled with OSX~Mavericks.
+
+\begin{center}\small
+\begin{tabular}{clll}
+\toprule
+\bf family&\bf series&\tt yu-win&\tt yu-osx\\
+\midrule
+ &medium&YuMincho-Regular&YuMincho~Medium\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&YuMincho-Demibold&YuMincho~Demibold\\
+\midrule
+ &&YuGothic-Regular*&YuGothic~Medium*\\
+ &\smash{\raisebox{1.5ex}{medium}}
+ &YuGothic-Bold&YuGothic~Bold\\
+\cmidrule(l){2-4}
+%<en>\textit{gothic}%
+%<ja>\gt ゴシック
+ &bold&YuGothic-Bold&YuGothic~Bold\\
+ &heavy&YuGothic-Bold&YuGothic~Bold\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&YuGothic-Bold&YuGothic~Bold\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+ \item[moga-mobo]  MogaMincho, MogaGothic, and MoboGothic.
+%<en>These fonts can be downloaded from\\\hfill \url{http://yozvox.web.fc2.com/}.
+%<ja>これらのフォントは \url{http://yozvox.web.fc2.com/} からダウンロードできる.
+
+\begin{center}\small
+\begin{tabular}{clll}
+\toprule
+\bf family&\bf series&\bf default, \texttt{90jis}~option&\bf \texttt{jis2004} option\\
+\midrule
+ &medium&Moga90Mincho&MogaMincho\\
+%<en>\smash{\raisebox{1.5ex}{\textit{mincho}}}%
+%<ja>\smash{\raisebox{1.5ex}{\gt 明朝}}%
+ &bold&Moga90Mincho Bold&MogaMincho Bold\\
+\midrule
+ &&Moga90Gothic&MogaGothic\\
+ &\smash{\raisebox{1.5ex}{medium}}
+ &Moga90Gothic&MogaGothic\\
+\cmidrule(l){2-4}
+%<en>\textit{gothic}%
+%<ja>\gt ゴシック
+ &bold&Moga90Gothic Bold&MogaGothic Bold\\
+ &heavy&Moga90Gothic Bold&MogaGothic Bold\\
+\midrule
+%<en>\textit{rounded gothic}
+%<ja>\gt 丸ゴシック
+&&Mobo90Gothic&MoboGothic\\
+\bottomrule
+\end{tabular}
+\end{center}
+
+
+\end{cslist}
+%<en>\paragraph{Presets for single weight}
+%<ja>\paragraph{単ウェイト用プリセット一覧}
 %<*en>
-\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
+Next, we describe settings for using only single weight.
 %</en>
 %<*ja>
-\item[範囲5${}^{\text{A}}$] 代用符号と補助私用領域.
+次に,単ウェイト用の設定を述べる.この4設定では
+明朝体太字・丸ゴシック体はゴシック体と同じフォントが用いられる.
 %</ja>
+\par\nobreak\medskip
+{\centering\small
+\begin{tabular}{lllll}
+\toprule
+&\tt noembed&\tt ipa&\tt ipaex&\tt ms\\
+\midrule
 %<*en>
-\item[Range~6${}^{\text{J}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
+\it mincho&Ryumin-Light (non-embedded)
+&IPA Mincho&IPAex Mincho&MS Mincho\\
+\it gothic&GothicBBB-Medium (non-embedded)
+&IPA Gothic&IPAex Gothic&MS Gothic\\
 %</en>
 %<*ja>
-\item[範囲6${}^{\text{J}}$] 日本語で用いられる文字.ブロックのリストは
-                             表 \ref{table-rng6} に示す.
+\gtfamily 明朝体&Ryumin-Light(非埋込)
+&IPA明朝&IPAex明朝&MS明朝\\
+\gtfamily ゴシック体&GothicBBB-Medium(非埋込)
+&IPAゴシック&IPAexゴシック&MSゴシック\\
 %</ja>
-\begin{table}[!tb]
+\bottomrule
+\end{tabular}\par\medskip}
+
+%<en>\paragraph{Using HG fonts}
+%<ja>\paragraph{HGフォントの利用}
 %<*en>
-\caption{Unicode blocks in predefined character range~6.}
+We can use HG~fonts bundled with Microsoft~Office for realizing multiple weights.
 %</en>
 %<*ja>
-\caption{文字範囲6に指定されているUnicodeブロック.}
+すぐ前に書いた単ウェイト用設定を,Microsoft Office等に付属するHGフォントを使って
+多ウェイト化した設定もある.
 %</ja>
-\label{table-rng6}
-\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
-\begin{center}\small
+\par\nobreak\medskip
+{\centering\small
 \begin{tabular}{llll}
+\toprule
+&\tt ipa-hg&\tt ipaex-hg&\tt ms-hg\\
+\midrule
 %<*en>
-"2460--"24FF&Enclosed Alphanumerics&
-"2E80--"2EFF&CJK Radicals Supplement\\
-"3000--"303F&CJK Symbols and Punctuation&
-"3040--"309F&Hiragana\\
-"30A0--"30FF&Katakana&
-"3190--"319F&Kanbun\\
-"31F0--"31FF&Katakana Phonetic Extensions&
-"3200--"32FF&Enclosed CJK Letters and Months\\
-"3300--"33FF&CJK Compatibility&
-"3400--"4DBF&CJK Unified Ideographs Extension A\\
-"4E00--"9FFF&CJK Unified Ideographs&
-"F900--"FAFF&CJK Compatibility Ideographs\\
-"FE10--"FE1F&Vertical Forms&
-"FE30--"FE4F&CJK Compatibility Forms\\
-"FE50--"FE6F&Small Form Variants&
-"{20}000--"{2F}FFF&(Supplementary Ideographic Plane)
-%</en>
-%<*ja>
-"2460--"24FF&囲み英数字&
-"2E80--"2EFF&CJK部首補助\\
-"3000--"303F&CJKの記号及び句読点&
-"3040--"309F&平仮名\\
-"30A0--"30FF&片仮名&
-"3190--"319F&漢文用記号(返り点)\\
-"31F0--"31FF&片仮名拡張&
-"3200--"32FF&囲みCJK文字・月\\
-"3300--"33FF&CJK互換用文字&
-"3400--"4DBF&CJK統合漢字拡張A\\
-"4E00--"9FFF&CJK統合漢字&
-"F900--"FAFF&CJK互換漢字\\
-"FE10--"FE1F&縦書き形&
-"FE30--"FE4F&CJK互換形\\
-"FE50--"FE6F&小字形&
-"{20}000--"{2F}FFF&(追加漢字面)
+\bf mincho medium
+&IPA Mincho&IPAex Mincho&MS Mincho\\\midrule
+\bf mincho bold&
+\multicolumn{3}{c}{HG Mincho E}\\\midrule
+\bf Gothic medium\\
+~~without \texttt{deluxe}
+&IPA Gothic&IPAex Gothic&MS Gothic\\
+~~with {\tt jis2004}
+&IPA Gothic&IPAex Gothic&MS Gothic\\
+\cmidrule(lr){1-4}
+~~otherwise&
+\multicolumn{3}{c}{HG Gothic M}\\\midrule
+\bf gothic bold&
+\multicolumn{3}{c}{HG Gothic E}\\\midrule
+\bf gothic heavy&
+\multicolumn{3}{c}{HG Soei Kaku Gothic UB}\\\midrule
+\bf rounded gothic&
+\multicolumn{3}{c}{HG Maru Gothic PRO}\\
+%</en>
+%<*ja>
+\gtfamily 明朝体中字
+&IPA明朝&IPAex明朝&MS明朝\\\midrule
+\gtfamily 明朝体太字&
+\multicolumn{3}{c}{HG明朝E}\\\midrule
+\gtfamily ゴシック体中字\\
+ 単ウェイト時
+&IPAゴシック&IPAexゴシック&MSゴシック\\
+ {\tt jis2004}指定時
+&IPAゴシック&IPAexゴシック&MSゴシック\\
+\cmidrule(lr){1-4}
+ それ以外の時&
+\multicolumn{3}{c}{HGゴシックM}\\\midrule
+\gtfamily ゴシック体太字&
+\multicolumn{3}{c}{HGゴシックE}\\\midrule
+\gtfamily ゴシック体極太&
+\multicolumn{3}{c}{HG創英角ゴシックUB}\\\midrule
+\gtfamily 丸ゴシック体&
+\multicolumn{3}{c}{HG丸ゴシック体PRO}\\
 %</ja>
-\end{tabular}
-\end{center}
-\end{table}
+\bottomrule
+\end{tabular}\par\medskip}
+
 %<*en>
-\item[Range~7${}^{\text{J}}$] Characters used in CJK languages, but not included in  Adobe-Japan1-6.
-The block list is indicated in Table~\ref{table-rng7}.
+Note that HG~Mincho~E, HG~Gothic~E, HG Soei Kaku Gothic UB, and HG Maru Gothic PRO
+are internally specified by:
+\begin{description}
+\item[default] by font name (\texttt{HGMinchoE}, etc.).
+\item[{\tt 90jis}] by file name (\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf}).
+\item[{\tt jis2004}] by file name (\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf}).
+\end{description}
 %</en>
 %<*ja>
-\item[範囲7${}^{\text{J}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に
-                            含まれていないもの.
-                            ブロックのリストは表 \ref{table-rng7} に示す.
+なお,HG明朝E・HGゴシックE・HG創英角ゴシックUB・HG丸ゴシック体PROの4つについては,内部で
+\begin{description}
+\item[標準] フォント名(\texttt{HGMinchoE} など)
+\item[{\tt 90jis}指定時] ファイル名 (%
+\texttt{hgrme.ttc}, \texttt{hgrge.ttc}, \texttt{hgrsgu.ttc}, \texttt{hgrsmp.ttf})
+\item[{\tt jis2004}指定時] ファイル名 (%
+\texttt{hgrme04.ttc}, \texttt{hgrge04.ttc}, \texttt{hgrsgu04.ttc}, \texttt{hgrsmp04.ttf})
+\end{description}
+として指定を行っているので注意すること.
 %</ja>
-\begin{table}[!tb]
+
+
 %<*en>
-\caption{Unicode blocks in predefined character range~7.}
+\subsection{\cs{CID}, \cs{UTF}, and macros in \Pkg{japanese-otf} package}
+Under \pLaTeX, \Pkg{japanese-otf} package (developed by Shuzaburo Saito) is
+used for typesetting characters which is in Adobe-Japan1-6 CID but not
+in JIS~X~0208. Since this package is widely used, \LuaTeX-ja
+supports some of functions in the \Pkg{japanese-otf} package,
+as an external package \Pkg{luatexja-otf}.
 %</en>
 %<*ja>
-\caption{文字範囲7に指定されているUnicodeブロック.}
+\subsection{\cs{CID}, \cs{UTF}と\Pkg{otf}パッケージのマクロ}
+\pLaTeX では,JIS~X~0208にないAdobe-Japan1-6の文字を出力するために,
+齋藤修三郎氏による\Pkg{otf}パッケージが用いられていた.このパッケージは
+広く用いられているため,\LuaTeX-jaにおいても\Pkg{otf}パッケージの機能の
+一部を(\Pkg{luatexja-otf}という別のパッケージとして)実装した.
 %</ja>
-\label{table-rng7}
-\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
-\begin{center}\small
-\begin{tabular}{llll}
-%<*en>
-"1100--"11FF&Hangul Jamo&
-"2F00--"2FDF&Kangxi Radicals\\
-"2FF0--"2FFF&Ideographic Description Characters&
-"3100--"312F&Bopomofo\\
-"3130--"318F&Hangul Compatibility Jamo&
-"31A0--"31BF&Bopomofo Extended\\
-"31C0--"31EF&CJK Strokes&
-"A000--"A48F&Yi Syllables\\
-"A490--"A4CF&Yi Radicals&
-"A830--"A83F&Common Indic Number Forms\\
-"AC00--"D7AF&Hangul Syllables&
-"D7B0--"D7FF&Hangul Jamo Extended-B
-%</en>
+
+\begin{LTXexample}
+\jfontspec{KozMinPr6N-Regular.otf}
+森\UTF{9DD7}外と内田百\UTF{9592}とが\UTF{9AD9}島屋に行く。
+
+\CID{7652}飾区の\CID{13706}野家,
+\CID{1481}城市,葛西駅,
+高崎と\CID{8705}\UTF{FA11}
+
+\aj半角{はんかくカタカナ}
+\end{LTXexample}
+
 %<*ja>
-"1100--"11FF&ハングル字母&
-"2F00--"2FDF&康熙部首\\
-"2FF0--"2FFF&漢字構成記述文字&
-"3100--"312F&注音字母 (注音符号)\\
-"3130--"318F&ハングル互換字母&
-"31A0--"31BF&注音字母拡張\\
-"31C0--"31EF&CJKの筆画&
-"A000--"A48F&イ文字\\
-"A490--"A4CF&イ文字部首&
-"A830--"A83F&共通インド数字に準じるもの\\
-"AC00--"D7AF&ハングル音節文字&
-"D7B0--"D7FF&ハングル字母拡張B
+\Pkg{otf}パッケージでは,それぞれ次のようなオプションが存在した:
+\begin{cslist}
+\item[deluxe] 明朝体・ゴシック体各3ウェイトと,丸ゴシック体を扱えるようになる.
+\item[expert] 仮名が横組・縦組専用のものに切り替わり,ルビ用仮名も
+\ \cs{rubyfamily}\ によって扱えるようになる.
+\item[bold] ゴシック体を標準で太いウェイトのものに設定する.
+\end{cslist}
+しかしこれらのオプションは\Pkg{luatexja-otf}パッケージには存在しない.
+\Pkg{otf}パッケージが文書中で使用する和文用TFMを自前の物に置き換えていたのに対し,
+\Pkg{luatexja-otf}パッケージでは,そのようなことは行わないからである.
+
+これら3オプションについては,
+\Pkg{luatexja-preset} パッケージにプリセットを使う時に一緒に指定するか,
+あるいは対応する内容を\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節 (NFSS2) や
+\ref{ssec-fontspec}節 (\Pkg{fontspec}) の方法で手動で指定する必要がある.
 %</ja>
-\end{tabular}
-\end{center}
-\end{table}
-\end{description}
 
+%<en>\subsection{Changing default Japanese fonts}
+%<ja>\subsection{標準和文フォントの変更}
+\label{ssec-cfg}
+%<*en>
+If \texttt{luatexja.cfg} can be seen from \LuaTeX, \LuaTeX-ja automatically reads it.
+The main use of \texttt{luatexja.cfg} is for changing default Japanese fonts,
+when IPAex fonts cannot be installed in \TeX~system.
+One should not overuse this \texttt{luatexja.cfg}; fonts which will be used in
+a document should be specified in its source.
 
-%<en>\subsection{\Param{kanjiskip} and \Param{xkanjiskip}}
-%<ja>\subsection{\Param{kanjiskip}と\Param{xkanjiskip}}
-\label{subs-kskip}
+For example,
+\begin{lstlisting}
+\def\ltj@stdmcfont{IPAMincho}
+\def\ltj@stdgtfont{IPAGothic}
+\end{lstlisting}
+makes that IPA~Mincho and IPA~Gothic will be used as default Japanese fonts, instead of
+IPAex~Mincho and IPAex~Gothic.
 
-%<*en>
-\textbf{JAglue} is divided into the following three categories:
+For another example, the following two lines makes that
+non-embedded fonts Ryumin-Light~and~GothicBBB-Medium as default Japanese fonts
+(as the earlier version of \LuaTeX-ja):
+\begin{lstlisting}
+\def\ltj@stdmcfont{psft:Ryumin-Light}
+\def\ltj@stdgtfont{psft:GothicBBB-Medium}
+\end{lstlisting}
 %</en>
 %<*ja>
-\textbf{JAglue}は以下の3つのカテゴリに分類される:
+\LuaTeX から見える位置に \texttt{luatexja.cfg} があれば,\LuaTeX-jaはそれを読み込む.
+このファイルを用いるとplain~\TeX, \LaTeXe における標準和文フォントを
+IPAex明朝・IPAexゴシックから変更することができる.
+しかし,基本的には\emph{文章中で用いるフォントは(例えば \Pkg{luatexja-preset} などで)
+文書ソース内で指定するべき}であり,この \texttt{luatexja.cfg} は,
+「IPAexフォントがインストールできない」など,IPAexフォントが使用できない場合にのみ
+応急処置的に用いるべきである.
+
+例えば
+\begin{lstlisting}
+\def\ltj@stdmcfont{IPAMincho}
+\def\ltj@stdgtfont{IPAGothic}
+\end{lstlisting}
+と記述しておけば,標準和文フォントがIPA明朝・IPAゴシックへと変
+更される.
+
+
+なお,20140906.0以前のバージョンのように,
+Ryumin-Light, GothicBBB-Mediumという名前の非埋込フォントを用いる場合は
+\begin{lstlisting}
+\def\ltj@stdmcfont{psft:Ryumin-Light}
+\def\ltj@stdgtfont{psft:GothicBBB-Medium}
+\end{lstlisting}
+と記述すればよい.
 %</ja>
-\begin{itemize}
+
+
+%<en>\section{Changing Internal Parameters}
+%<ja>\section{パラメータの変更}
+
 %<*en>
-\item Glues/kerns specified in JFM. If \verb+\inhibitglue+ is issued
-      around a Japanese character, this glue will not be inserted at the
-      place.
+There are many internal parameters in \LuaTeX-ja. And due to the behavior of \LuaTeX,
+most of them are not stored as internal register of \TeX, but as an
+original storage system in \LuaTeX-ja. Hence, to assign or acquire those
+parameters, you have to use commands \cs{ltjsetparameter} and
+\cs{ltjgetparameter}.
 %</en>
 %<*ja>
-\item JFMで指定されたグルー/カーン.もし \verb+\inhibitglue+ が和文文字の周りで
-      発行されていれば,このグルーは挿入されない.
+\LuaTeX-jaには多くのパラメータが存在する.そして\LuaTeX の仕様のために,
+その多くは\TeX のレジスタにではなく,\LuaTeX-ja独自の方法で保持されている.
+これらのパラメータを設定・取得するためには \cs{ltjsetparameter} と \cs{ltjgetparameter} を
+用いる.
 %</ja>
+
+%<en>\subsection{Range of \textbf{JAchar}s}
+%<ja>\subsection{\textbf{JAchar}の範囲}
+\label{ssec-setrange}
+
 %<*en>
-\item The default glue which inserted between two \textbf{JAchar}s (\Param{%
-      kanjiskip}).
+\LuaTeX-ja divides the Unicode codespace \texttt{U+0080}--\texttt{U+10FFFF}
+into \emph{character ranges},
+numbered 1 to 217. The grouping can be (globally) customized by \cs{ltjdefcharrange}.
+The next line adds whole characters in Supplementary Ideographic Plane
+and the character ``漢'' to the character range~100.
 %</en>
 %<*ja>
-\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{kanjiskip}).
+\LuaTeX-jaは,Unicodeの \texttt{U+0080}--\texttt{U+10FFFF} の空間を
+1番から217番までの\emph{文字範囲}に分割している.
+区分けは \cs{ltjdefcharrange} を用いることで(グローバルに)変更することができ,
+例えば,次は追加漢字面(SIP)にある全ての文字と「漢」を「100番の文字範囲」に追加する.
 %</ja>
+\begin{lstlisting}
+\ltjdefcharrange{100}{"20000-"2FFFF,`漢}
+\end{lstlisting}
+
 %<*en>
-\item The default glue which inserted between a \textbf{JAchar} and an
-      \textbf{ALchar} (\Param{xkanjiskip}).
+A character can belong to only one character range.
+For example, whole SIP belong to the range~4 in the default setting of \LuaTeX-ja,
+and if you execute the above line, then SIP will belong to the range~100 and be
+removed from the range~4.
 %</en>
 %<*ja>
-\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{xkanjiskip}).
+各文字はただ一つの文字範囲に所属することができる.
+例えば,SIP内の文字は全て\LuaTeX-jaのデフォルトでは4番の文字範囲に
+属しているが,上記の指定を行えばSIP内の文字は100番に属すようになり,4番からは除かれる.
 %</ja>
-\end{itemize}
+
 %<*en>
-The value (a skip) of \Param{kanjiskip} or \Param{xkanjiskip} can be
-changed as the following.
+The distinction between \textbf{ALchar} and \textbf{JAchar} is performed by character ranges.
+This can be edited by setting the \textsf{jacharrange} parameter.
+For example, the code below is just the default setting of \LuaTeX-ja, and
+it sets
+\begin{itemize}
+ \item a character which belongs character ranges 1,~4, 5, and~8 is \textbf{ALchar},
+ \item a character which belongs character ranges 2,~3, 6, and~7 is \textbf{JAchar}.
+\end{itemize}
 %</en>
 %<*ja>
-\Param{kanjiskip}や\Param{xkanjiskip}の値は以下のようにして変更可能である.
+\textbf{ALchar}と\textbf{JAchar}の区別は文字範囲ごとに行われる.
+これは\textsf{jacharrange}パラメータによって編集できる.
+例えば,以下は\LuaTeX-jaの初期設定であり,次の内容を設定している:
+\begin{itemize}
+ \item 1番,4番,5番,8番の文字範囲に属する文字は\textbf{ALchar}.
+ \item 2番,3番,6番,7番の文字範囲に属する文字は\textbf{JAchar}.
+\end{itemize}
 %</ja>
 \begin{lstlisting}
-\ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt},
-                 xkanjiskip={0.25\zw plus 1pt minus 1pt}}
+\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}}
 \end{lstlisting}
-
 %<*en>
-It may occur that JFM contains the data of `ideal width of \Param{kanjiskip}'
-and/or `ideal width of \Param{xkanjiskip}'.
-To use these data from JFM, set the value of \Param{kanjiskip} or
-\Param{xkanjiskip} to \verb+\maxdimen+.
+The argument to \textsf{jacharrange} parameter is a list of non-zero integer.
+Negative integer $-n$ in the list means that ``each character in the range~$n$ is an
+\textbf{ALchar}'',
+and positive integer $+n$ means that ``\dots\ is a \textbf{JAchar}''.
 %</en>
 %<*ja>
-JFMは「望ましい\Param{kanjiskip}の値」や「望ましい\Param{xkanjiskip}の値」を
-持っていることがある.
-これらのデータを使うためには,\Param{kanjiskip}や\Param{xkanjiskip}の
-値を \verb+\maxdimen+ の値に設定すればよい.
+\textsf{jacharrange}パラメータの引数は非零の整数のリストである.
+リスト中の負の整数$-n$は「文字範囲$n$に属する文字は\textbf{ALchar}として
+扱う」ことを意味し,正の整数$+n$は「\textbf{JAchar}として扱う」ことを意味する.
 %</ja>
 
-%<en>\subsection{Insertion Setting of \Param{xkanjiskip}}
-%<ja>\subsection{\Param{xkanjiskip} の設定の挿入}
-
 %<*en>
-It is not desirable that \Param{xkanjiskip} is inserted into every
-boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example,
-\Param{xkanjiskip} should not be inserted after opening parenthesis
-(\textit{e.g.}, compare `(あ' and `(\hskip\ltjgetparameter{xkanjiskip}あ').
-\LuaTeX-ja can control whether \Param{xkanjiskip} can be inserted
-before/after a character, by changing \Param{jaxspmode} for \textbf{JAchar}s and
-\Param{alxspmode} parameters \textbf{ALchar}s respectively.
+Note that characters \texttt{U+0000}--\texttt{U+007F} are always treated as an
+\textbf{ALchar} (this cannot be customized).
 %</en>
 %<*ja>
-\Param{xkanjiskip}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に
-挿入されるのは望ましいことではない.例えば,\Param{xkanjiskip}は開き括弧の
-後には挿入されるべきではない(`(あ'と`(\hskip\ltjgetparameter{xkanjiskip}あ'を
-比べてみよ).
-\LuaTeX-jaでは\Param{xkanjiskip}をある文字の前/後に挿入するかどうかを,
-\textbf{JAchar}に対しては\Param{jaxspmode}を,\textbf{ALchar}に対しては
-\Param{alxspmode}をそれぞれ変えることで制御することができる.
+なお,\texttt{U+0000}--\texttt{U+007F} は常に\textbf{ALchar}として扱われる(利用者が変更す
+ることは出来ない).
 %</ja>
-\begin{LTXexample}
-\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}}
-pあq い!う
-\end{LTXexample}
 
 %<*en>
-The second argument \texttt{preonly} means `the insertion of
-\Param{xkanjiskip} is allowed before this character, but not after'.
-the other possible values are \texttt{postonly}, \texttt{allow} and \texttt{
-inhibit}.
+\paragraph{Default character ranges}
+\LuaTeX-ja predefines eight character ranges for convenience. They are
+determined from the following data:
 %</en>
 %<*ja>
-2つ目の引数の \texttt{preonly}は「\Param{xkanjiskip}の挿入はこの文字の
-前でのみ許され,後では許さない」ことを意味する.他に指定可能な値は
-\texttt{postonly}, \texttt{allow}, \texttt{inhibit}である.
+\paragraph{文字範囲の初期値}
+\LuaTeX-jaでは8つの文字範囲を予め定義しており,
+これらは以下のデータに基づいて決定している.
 %</ja>
+\begin{itemize}
+%<en>\item Blocks in Unicode~6.0.
+%<ja>\item Unicode~6.0のブロック.
+%<en>\item The \texttt{Adobe-Japan1-UCS2} mapping between a CID Adobe-Japan1-6 and Unicode.
+%<ja>\item Adobe-Japan1-6のCIDとUnicodeの間の対応表\texttt{Adobe-Japan1-UCS2}.
+%<en>\item The \Pkg{PXbase} bundle for \upTeX\ by Takayuki Yato.
+%<ja>\item 八登崇之氏による\upTeX 用の\Pkg{PXbase}バンドル.
+\end{itemize}
 
 %<*en>
-\Param{jaxspmode} and \Param{alxspmode} use a same table to store the parameters
-on the current version. Therefore, line 1 in the code above can be rewritten
-as follows:
+Now we describe these eight ranges. The superscript ``J'' or ``A'' after the
+number shows whether each character in the range is treated as
+\textbf{JAchar}s or not by default. These settings are similar to the
+\texttt{prefercjk} settings defined in \texttt{PXbase} bundle.
+Any characters equal to or above \texttt{U+0080} which does not belong to
+these eight ranges belongs to the character range~217.
 %</en>
 %<*ja>
-なお,現行の
-仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており,
-上のコードの1行目を次のように変えても同じことになる:
+以下ではこれら8つの文字範囲について記述する.添字のアルファベット「J」「A」
+は,その文字範囲内の文字が\textbf{JAchar}か\textbf{ALchar}かを表している.これらの初期設定は
+\texttt{PXbase}バンドルで定義されている\texttt{prefercjk}と類似のものであるが,
+8ビットフォント使用時のトラブルを防ぐために \texttt{U+0080}--\texttt{U+00FF} の文字は全部
+\textbf{ALchar}としている.
+なお,\texttt{U+0080} 以降でこれら8つの文字範囲に属さない文字は,217番の文字範囲に属することになっている.
 %</ja>
-\begin{verbatim}
-\ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}}
-\end{verbatim}
+\begin{description}
 %<*en>
-One can use also numbers to specify these two parameters (see Subsection \ref{ssec-param}).
-%</en>
-%<*ja>
-また,これら2パラメータには数値で値を指定することもできる(\ref{ssec-param} 節を参照).
-%</ja>
 
-%<*en>
-If you want to enable/disable all insertions of \Param{kanjiskip} and
-\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing}
-parameters to \texttt{true}/\texttt{false}, respectively.
+\item[Range~8${}^{\text{A}}$] The intersection of the upper half of ISO~8859-1
+        (Latin-1 Supplement) and JIS~X~0208 (a basic character set for Japanese). This character range
+        consists of the following characters:
 %</en>
 %<*ja>
-もし全ての\Param{kanjiskip}と\Param{xkanjiskip}の挿入を有効化/無効化
-したければ,それぞれ\Param{autospacing}と\Param{autoxspacing}を
-\texttt{true}/\texttt{false}に設定すればよい.
+\item[範囲8${}^{\text{A}}$] ISO~8859-1の上位領域(ラテン1補助)と
+                             JIS~X~0208の共通部分.この文字範囲は
+                             以下の文字で構成される:
 %</ja>
-
-%<en>\subsection{Shifting Baseline}
-%<ja>\subsection{ベースラインの移動}
+\begin{multicols}{2}
+\begin{itemize}
+\def\ch#1#2{\item \char"#1\ (\texttt{U+00#1}, #2)}%"
+\ch{A7}{Section Sign}
+\ch{A8}{Diaeresis}
+\ch{B0}{Degree sign}
+\ch{B1}{Plus-minus sign}
+\ch{B4}{Spacing acute}
+\ch{B6}{Paragraph sign}
+\ch{D7}{Multiplication sign}
+\ch{F7}{Division Sign}
+\end{itemize}
+\end{multicols}
 
 %<*en>
-To make a match between a Japanese font and an alphabetic font, sometimes
-shifting of the baseline of one of the pair is needed. In \pTeX, this is achieved
-by setting \verb+\ybaselineshift+ to a non-zero length (the
-baseline of alphabetic fonts is shifted below). However, for documents
-whose main language is not Japanese, it is good to shift the baseline of
-Japanese fonts, but not that of alphabetic fonts.
-Because of this, \LuaTeX-ja can independently set the shifting amount
-of the baseline of alphabetic fonts (\Param{yalbaselineshift}
-parameter) and that of Japanese fonts (\Param{yjabaselineshift}
-parameter).
+\item[Range~1${}^{\text{A}}$] Latin characters that some of them are included in Adobe-Japan1-6.
+This range consists of the following Unicode ranges, \emph{except characters in the range~8 above}:
 %</en>
 %<*ja>
-和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が
-必要になる.\pTeX ではこれは \verb+\ybaselineshift+ を非零の長さに設定することで
-なされていた(欧文フォントのベースラインが下がる).しかし,日本語が主ではない
-文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい.
-このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量
-(\Param{yalbaselineshift}パラメータ)と和文フォントのベースラインのシフト量
-(\Param{yjabaselineshift}パラメータ)を独立に設定できるようになっている.
+\item[範囲1${}^{\text{A}}$] ラテン文字のうち,Adobe-Japan1-6との共通部分があるもの.
+                             この範囲は以下のUnicodeのブロックのうち
+                             \emph{範囲8を除いた}部分で構成されている:
 %</ja>
-
-\begin{LTXexample}
-\vrule width 150pt height 0.4pt depth 0pt\hskip-120pt
-\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう
-\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう
-\end{LTXexample}
+\begin{multicols}{2}
+\begin{itemize}
+\item \texttt{U+0080}--\texttt{U+00FF}: Latin-1 Supplement
+\item \texttt{U+0100}--\texttt{U+017F}: Latin Extended-A
+\item \texttt{U+0180}--\texttt{U+024F}: Latin Extended-B
+\item \texttt{U+0250}--\texttt{U+02AF}: IPA Extensions
+\item \texttt{U+02B0}--\texttt{U+02FF}: Spacing Modifier Letters
+%<en>\par\ 
+\item \texttt{U+0300}--\texttt{U+036F}: \\*\null\hfill Combining Diacritical Marks
+\item \texttt{U+1E00}--\texttt{U+1EFF}: \\*\null\hfill Latin Extended Additional
+%<ja>\par\
+\end{itemize}
+\end{multicols}
 %<*en>
-Here the horizontal line in above is the baseline of a line.
+\item[Range~2${}^{\text{\kern.1emJ}}$] Greek and Cyrillic letters. JIS~X~0208 (hence most of Japanese
+          fonts) has some of these characters.
 %</en>
 %<*ja>
-上の例において引かれている水平線がベースラインである.
+\item[範囲2${}^{\text{\kern.1emJ}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんどの
+                             和文フォント)には,これらの文字の一部が含まれている.
 %</ja>
-
+\begin{multicols}{2}
+\begin{itemize}
+\item \texttt{U+0370}--\texttt{U+03FF}: Greek and Coptic
+\item \texttt{U+0400}--\texttt{U+04FF}: Cyrillic
+\item \texttt{U+1F00}--\texttt{U+1FFF}: Greek Extended
+\\\
+\end{itemize}
+\end{multicols}
 %<*en>
-There is an interesting side-effect: characters in different size can be
-vertically aligned center in a line, by setting two parameters appropriately.
-The following is an example (beware the value is not well tuned):
+\item[Range~3${}^{\text{\kern.1emJ}}$] Punctuations and Miscellaneous symbols. The block list is
+          indicated in Table~\ref{table-rng3}.
 %</en>
 %<*ja>
-この機能には面白い使い方がある:2つのパラメータを適切に設定することで,サイズの
-異なる文字を中心線に揃えることができるのだ.
-以下は一つの例である(値はあまり調整されていないことに注意):
+\item[範囲3${}^{\text{\kern.1emJ}}$] 句読点と記号類.ブロックのリストは表\ref{table-rng3}%
+                             に示してある.
 %</ja>
-\begin{LTXexample}
-xyz漢字
-{\scriptsize
-  \ltjsetparameter{yjabaselineshift=-1pt,
-    yalbaselineshift=-1pt}
-  XYZひらがな
-}abcかな
-\end{LTXexample}
-
-
-%<en>\subsection{Cropmark}
-%<ja>\subsection{トンボ}
-
+\begin{table}[!tb]
+%<en>\caption{Unicode blocks in predefined character range~3.}\medskip
+%<ja>\caption{文字範囲3に指定されているUnicodeブロック.}
+\label{table-rng3}
+\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
+\centering\small
+\begin{tabular}{llll}
+"2000--"206F&General Punctuation&
+"2070--"209F&Superscripts and Subscripts\\
+"20A0--"20CF&Currency Symbols&
+"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\
+"2100--"214F&Letterlike Symbols&
+"2150--"218F&Number Forms\\
+"2190--"21FF&Arrows&
+"2200--"22FF&Mathematical Operators\\
+"2300--"23FF&Miscellaneous Technical&
+"2400--"243F&Control Pictures\\
+"2500--"257F&Box Drawing&
+"2580--"259F&Block Elements\\
+"25A0--"25FF&Geometric Shapes&
+"2600--"26FF&Miscellaneous Symbols\\
+"2700--"27BF&Dingbats&
+"2900--"297F&Supplemental Arrows-B\\
+"2980--"29FF&Misc.\ Mathematical Symbols-B&
+"2B00--"2BFF&Miscellaneous Symbols and Arrows
+\end{tabular}
+\end{table}
 %<*en>
-Cropmark is a mark for indicating 4~corners and horizontal/vertical
-center of the paper. In Japanese, we call cropmark as tombo(w).
-\pLaTeX\ and this \LuaTeX-ja support `tombow' by their kernel.
-The following steps are needed to typeset cropmark:
+\item[Range~4${}^{\text{A}}$] Characters usually not in Japanese fonts. This range consists
+          of almost all Unicode blocks which are not in other
+          predefined ranges. Hence, instead of showing the block list,
+          we put the definition of this range itself:
 %</en>
 %<*ja>
-トンボは用紙の四つ角と水平/垂直方向の中心を表す印である.
-\pLaTeX と \LuaTeX-jaではトンボの出力をサポートしている.
-トンボを出力するためには以下の手順が必要である:
+\item[範囲4${}^{\text{A}}$] 通常和文フォントには含まれていない文字.
+                             この範囲は他の範囲にないほとんど全てのUnicodeブロック
+                             で構成されている.したがって,ブロックのリストを示す
+                             代わりに,範囲の定義そのものを示す:
 %</ja>
-
-\begin{enumerate}
+\begin{lstlisting}
+\ltjdefcharrange{4}{%
+   "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
+  "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A82F, "A840-"ABFF, "FB00-"FE0F,
+  "FE20-"FE2F, "FE70-"FEFF, "10000-"1FFFF, "E000-"F8FF} % non-Japanese
+\end{lstlisting}
+%<en>\item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
+%<ja>\item[範囲5${}^{\text{A}}$] 代用符号と補助私用領域.
+%<en>\item[Range~6${}^{\text{\kern.1emJ}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
+%<ja>\item[範囲6${}^{\text{\kern.1emJ}}$] 日本語で用いられる文字.ブロックのリストは表\ref{table-rng6}に示す.
+\begin{table}[!tb]
+%<en>\caption{Unicode blocks in predefined character range~6.}\medskip
+%<ja>\caption{文字範囲6に指定されているUnicodeブロック.}
+\label{table-rng6}
+\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
+\centering\small
+\begin{tabular}{llll}
+"2460--"24FF&Enclosed Alphanumerics&
+"2E80--"2EFF&CJK Radicals Supplement\\
+"3000--"303F&CJK Symbols and Punctuation&
+"3040--"309F&Hiragana\\
+"30A0--"30FF&Katakana&
+"3190--"319F&Kanbun\\
+"31F0--"31FF&Katakana Phonetic Extensions&
+"3200--"32FF&Enclosed CJK Letters and Months\\
+"3300--"33FF&CJK Compatibility&
+"3400--"4DBF&CJK Unified Ideographs Extension A\\
+"4E00--"9FFF&CJK Unified Ideographs&
+"F900--"FAFF&CJK Compatibility Ideographs\\
+"FE10--"FE1F&Vertical Forms&
+"FE30--"FE4F&CJK Compatibility Forms\\
+"FE50--"FE6F&Small Form Variants&
+"{20}000--"{2F}FFF&(Supplementary Ideographic Plane)\\
+"{E0}100--"{E0}1EF&Variation Selectors Supplement
+\end{tabular}
+\end{table}
 %<*en>
-\item First, define the banner which will be printed at the upper left
-      of the paper. This is done by assigning a token list to
-      \verb+\@bannertoken+.
-
-For example, the following sets banner as `\texttt{filename (YYYY-MM-DD hh:mm)}':
+\item[Range~7${}^{\text{\kern.1emJ}}$] Characters used in CJK languages, but not included in  Adobe-Japan1-6.
+The block list is indicated in Table~\ref{table-rng7}.
 %</en>
 %<*ja>
-\item まず,用紙の左上に印刷されるバナーを定義する.これは \verb+\@bannertoken+
-      にトークンリストを与えることでなされる.
-
-例えば,以下はバナーとして`\texttt{filename (YYYY-MM-DD hh:mm)}'を設定する:
+\item[範囲7${}^{\text{\kern.1emJ}}$] CJK言語で用いられる文字のうち,Adobe-Japan1-6に
+                            含まれていないもの.
+                            ブロックのリストは表\ref{table-rng7}に示す.
 %</ja>
-
-\begin{verbatim}
-\makeatletter
-
-\hour\time \divide\hour by 60 \@tempcnta\hour \multiply\@tempcnta 60\relax
-\minute\time \advance\minute-\@tempcnta
-\@bannertoken{%
-   \jobname\space(\number\year-\two@digits\month-\two@digits\day
-   \space\two@digits\hour:\two@digits\minute)}%
-\end{verbatim}
-
-\item ...
-\end{enumerate}
-
-
-%<en>\part{Reference}
-%<ja>\part{リファレンス}
-\label{part-ref}
-%<en>\section{Font Metric and Japanese Font}
-%<ja>\section{フォントメトリックと和文フォント}
-%<en>\subsection{\texttt{\char92jfont} primitive}
-%<ja>\subsection{\texttt{\char92jfont}プリミティブ}
-\label{ssec-jfont}
+\begin{table}[!tb]
+%<en>\caption{Unicode blocks in predefined character range~7.}\medskip
+%<ja>\caption{文字範囲7に指定されているUnicodeブロック.}
+\label{table-rng7}
+\catcode`\"=13\def"#1#2#3#4{\texttt{U+#1#2#3#4}}%"
+\centering\small
+\begin{tabular}{llll}
+"1100--"11FF&Hangul Jamo&
+"2F00--"2FDF&Kangxi Radicals\\
+"2FF0--"2FFF&Ideographic Description Characters&
+"3100--"312F&Bopomofo\\
+"3130--"318F&Hangul Compatibility Jamo&
+"31A0--"31BF&Bopomofo Extended\\
+"31C0--"31EF&CJK Strokes&
+"A000--"A48F&Yi Syllables\\
+"A490--"A4CF&Yi Radicals&
+"A830--"A83F&Common Indic Number Forms\\
+"AC00--"D7AF&Hangul Syllables&
+"D7B0--"D7FF&Hangul Jamo Extended-B
+\end{tabular}
+\end{table}
+\end{description}
 
 %<*en>
-To load a font as a Japanese font, you must use the
-\verb+\jfont+ primitive instead of~\verb+\font+, while
-\verb+\jfont+ admits the same syntax used in~\verb+\font+.
-\LuaTeX-ja automatically loads \Pkg{luaotfload} package,
-so TrueType/OpenType fonts with features can be used for Japanese fonts:
+\paragraph{Notes on \texttt{U+0080}--\texttt{U+00FF}}
+You should treat characters in \\texttt{U+0080}--\texttt{U+00FF} as \textbf{ALchar}, 
+when you use traditional 8-bit fonts, such as the \Pkg{textcomp} package or the
+\Pkg{marvosym} package.
+
+For example, the codepoint \cs{textparagraph} which is provided by the \Pkg{textcomp}
+package is 182. This codepoint corresponds \P\ (\text{U+00B6}) in Unicode.
+Similarly, \cs{Frowny} which is provided by the \Pkg{marvosym} package has
+the same codepoint as \S\ (\text{U+00A7}).
+Hence, as previous versions of \LuaTeX-ja, if these characters are treated as
+\text{JAchar}s, then \cs{textparagraph} produces ``ltjjachar`¶'' (in a Japanese font), 
+and  \cs{Frowny} produces ``\ltjjachar`§'' (in a Japanese font).
+
+To avoid such situations, the default setting of \LuaTeX-ja is changed in this release
+so that all characters \texttt{U+0080}--\texttt{U+00FF} are treated as \textbf{ALchar}.
+
+If you want to output a character as \textbf{ALchar} and \textbf{JAchar} regardless the range
+setting, you can use \cs{ltjalchar} and \cs{ltjjachar} respectively, as the following example.
+\begin{LTXexample}[width=0.3\textwidth]
+\gtfamily\large % default, ALchar, JAchar
+¶, \ltjalchar`¶, \ltjjachar`¶\\   % default: ALchar
+α, \ltjalchar`α, \ltjjachar`α  % default: JAchar
+\end{LTXexample}
 %</en>
 %<*ja>
-フォントを和文フォントとして読み込むためには,\verb+\jfont+ プリミティブを
-\verb+\font+ プリミティブの代わりに用いる.
-\verb+\jfont+ プリミティブの文法は \verb+\font+ と同じである.
-\LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので,
-TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる
-ことができる:
-%</ja>
-\begin{LTXexample}
-\jfont\tradgt={file:ipaexg.ttf:script=latn;%
-  +trad;-kern;jfm=ujis} at 14pt
-\tradgt{}当/体/医/区
+\paragraph{\texttt{U+0080}--\texttt{U+00FF}についての注意}
+\LuaTeX-jaで,\Pkg{textcomp}パッケージや\Pkg{marvosym}パッケージ等,Unicodeフォントでなく
+伝統的な8ビットフォントを用いる場合には注意が必要である.
+
+例えば,\Pkg{textcomp}パッケージの提供する \cs{textparagraph} は,
+符号位置が182,つまり \texttt{0xB6} であり,Unicodeではこの符号位置では\P\ (\text{U+00B6}) に対応する.
+また,\Pkg{marvosym}パッケージの提供する \cs{Frowny} も,符号位置は167,つまりUnicodeにおける
+\S\ (\text{U+00A7}) と同じ符号位置にある.
+即ち,以前のバージョンのように,「前節の文字範囲8内の文字は\textbf{JAchar}」という設定で
+あったとすると,上記の \cs{textparagraph} は和文フォントで「\ltjjachar`¶」を出力し,
+また \cs{Frowny} は和文フォントで「\ltjjachar`§」を出力することになる.
+
+このような事態を避けるために,本バージョンからは \texttt{U+0080}--\texttt{U+00FF} の範囲の
+文字は全て\textbf{ALchar}となるように初期設定を変更している.
+特に影響を受けるのが,JIS~X~0208の一部分である文字範囲8内の文字であり,
+\emph{\Pkg{fontspec}パッケージを読み込んだりして欧文記号としてこれらの文字の出力環境を整え
+ないと,ソース中に直接記述しても出力されない}ことになる.
+
+なお,文字範囲の設定に関わらず1つの文字を\textbf{ALchar}, \textbf{JAchar}で出力したい場合には,
+以下の例のようにそれぞれ \cs{ltjalchar},~\cs{ltjjachar} に該当文字の文字コードを渡せばよい.
+\begin{LTXexample}[width=0.3\textwidth]
+\gtfamily\large % default, ALchar, JAchar
+¶, \ltjalchar`¶, \ltjjachar`¶\\   % default: ALchar
+α, \ltjalchar`α, \ltjjachar`α  % default: JAchar
 \end{LTXexample}
+%</ja>
 
+%<en>\subsection{\Param{kanjiskip} and \Param{xkanjiskip}}
+%<ja>\subsection{\Param{kanjiskip}と\Param{xkanjiskip}}
+\label{subs-kskip}
+
+%<en>\textbf{JAglue} is divided into the following three categories:
+%<ja>\textbf{JAglue}は以下の3つのカテゴリに分類される:
+\begin{itemize}
 %<*en>
-Note that the defined control sequence
-(\verb+\tradgt+ in the example above) using \verb+\jfont+ is not a
-\textit{font\_def} token, hence the input like \verb+\fontname\tradgt+
-causes a error.  We denote control sequences which are defined in
-\verb+\jfont+ by <jfont\_cs>.
+\item Glues/kerns specified in JFM. If \cs{inhibitglue} is issued
+      around a \textbf{JAchar}, this glue will not be inserted at the
+      place.
 %</en>
 %<*ja>
-なお,\verb+\jfont+ で定義されたコントロールシーケンス(上の例だと \verb+\tradgt+)
-は\textit{font\_def}トークンではないので,\verb+\fontname\tradgt+ のような
-入力はエラーとなることに注意する.以下では \verb+\jfont+ で定義された
-コントロールシーケンスを<jfont\_cs>で表す.
+\item JFMで指定されたグルー/カーン.もし \cs{inhibitglue} が\textbf{JAchar}の周りで
+      発行されていれば,このグルーは挿入されない.
 %</ja>
-
-\paragraph{JFM}
 %<*en>
-As noted in Introduction, a JFM has measurements of characters and
-glues/kerns that are automatically inserted for Japanese
-typesetting. The structure of JFM will be described in the next
-subsection. At the calling of \verb+\jfont+ primitive, you must specify
-which JFM will be used for this font by the following keys:
+\item The default glue which inserted between two \textbf{JAchar}s (\Param{%
+      kanjiskip}).
 %</en>
 %<*ja>
-「はじめに」の節で述べたように,JFMは文字と和文組版で自動的に挿入される
-グルー/カーンの寸法情報を持っている.JFMの構造は次の小節で述べる.
-\verb+\jfont+ プリミティブの呼び出しの際には,どのJFMを用いるのかを以下のキーで
-指定する必要がある:
+\item デフォルトで2つの\textbf{JAchar}の間に挿入されるグルー(\Param{kanjiskip}).
 %</ja>
-
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item[jfm=<name>]
 %<*en>
-Specify the name of JFM. If specified JFM has not been loaded, \LuaTeX-ja search and load
-a file named \texttt{jfm-<name>.lua}.
-
-The following JFMs are shipped with \LuaTeX-ja:
+\item The default glue which inserted between a \textbf{JAchar} and an
+      \textbf{ALchar} (\Param{xkanjiskip}).
 %</en>
 %<*ja>
-JFMの名前を指定する.もし以前に指定されたJFMが読み込まれていなければ,
-\texttt{jfm-<name>.lua}を読み込む.
-
-以下のJFMが\LuaTeX-jaには同梱されている:
+\item デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルー(\Param{xkanjiskip}).
 %</ja>
-\begin{description}
+\end{itemize}
 %<*en>
-\item[\tt jfm-ujis.lua] A standard JFM in \LuaTeX-ja. This JFM is
-  based on \verb+upnmlminr-h.tfm+, a metric for UTF/OTF package that
-  is used in \upTeX. When you use the \Pkg{luatexja-otf} package, you should use this JFM.
+The value (a skip) of \Param{kanjiskip} or
+\Param{xkanjiskip} can be changed as the following.
+Note that only their values \emph{at the end of a paragraph or a hbox are
+adopted in the whole paragraph or the whole hbox.
+}
 %</en>
 %<*ja>
-\item[\tt jfm-ujis.lua] \LuaTeX-jaの標準JFMである.このJFMは\upTeX で
-  用いられるUTF/OTFパッケージ用のメトリックである \verb+upnmlminr-h.tfm+ を
-  元にしている.\Pkg{luatexja-otf}パッケージを使うときはこのJFMを指定するべきである.
+\Param{kanjiskip}や\Param{xkanjiskip}の値
+は以下のようにして変更可能である.
 %</ja>
+\begin{lstlisting}
+\ltjsetparameter{kanjiskip={0pt plus 0.4pt minus 0.4pt},
+                 xkanjiskip={0.25\zw plus 1pt minus 1pt}}
+\end{lstlisting}
 %<*en>
-\item[\tt jfm-jis.lua] A counterpart for \verb+jis.tfm+, `JIS font
-  metric' which is widely used in \pTeX. A major difference of
-  \texttt{jfm-ujis.lua} and this \texttt{jfm-jis.lua} is that
-  most characters under \texttt{jfm-ujis.lua} are square-shaped,
-  while that under \texttt{jfm-jis.lua} are horizontal
-  rectangles.
+Here \cs{zw} is a internal dimension
+which stores fullwidth of the current Japanese font.
+This \cs{zw} can be used as the unit \texttt{zw} in \pTeX.
+
+The value of these parameter can be get by \cs{ltjgetparameter}.
+Note that the result by \cs{ltjgetparameter} is \emph{not} the internal quantities,
+but \emph{a string} (hence \cs{the} cannot be prefixed).
 %</en>
 %<*ja>
-\item[\tt jfm-jis.lua] \pTeX で広く用いられている「JISフォントメトリック」
-  \verb+jis.tfm+ に相当するJFMである.\texttt{jfm-ujis.lua}とこの
-  \texttt{jfm-jis.lua}の主な違いは,\texttt{jfm-ujis.lua}ではほとんどの文字が
-  正方形状であるのに対し,\texttt{jfm-jis.lua}では横長の長方形状である.
+ここで,\cs{zw} は現在の和文フォントの全角幅を表す長さであり,
+\pTeX における長さ単位 \texttt{zw} と同じように使用できる.
+
+これらのパラメータの値は以下のように取得できる.
+戻り値は内部値ではなく\emph{文字列}である(\cs{the} は前置できない)ことに注意してほしい:
 %</ja>
+\begin{LTXexample}
+kanjiskip: \ltjgetparameter{kanjiskip},\\
+xkanjiskip: \ltjgetparameter{xkanjiskip}
+\end{LTXexample}
+
 %<*en>
-\item[\tt jfm-min.lua] A counterpart for \verb+min10.tfm+, which is one
-  of the default Japanese font metric shipped with \pTeX. There
-  are notable difference between this JFM and other 2~JFMs, as
-  shown in Table~\ref{tab-difjfm}.
+It may occur that JFM contains the data of ``ideal width of
+\Param{kanjiskip}''
+and/or ``ideal width of \Param{xkanjiskip}''.
+To use these data from JFM, set the value of \Param{kanjiskip} or
+\Param{xkanjiskip} to \cs{maxdimen}
+(these ``ideal width'' cannot be retrived by \cs{ltjgetparameter}).
 %</en>
 %<*ja>
-\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文フォントメトリック
-  である \verb+min10.tfm+ に相当するJFMである.このJFMと他の2つのJFMの間には
-  表 \ref{tab-difjfm} に示すような特筆すべき違いがある.
+JFMは「望ましい\Param{kanjiskip}の値」や
+「望ましい\Param{xkanjiskip}の値」を持っていることがある.
+これらのデータを使うためには,\Param{kanjiskip}や%
+\Param{xkanjiskip}の値を \cs{maxdimen} の値に設定すればよいが,
+\cs{ltjgetparameter} によって取得することはできないので注意が必要である.
 %</ja>
-\end{description}
 
-\item[jfmvar=<string>] Sometimes there is a need that ...
-\end{list}
-
-\begin{table}[t]
-%<en>\caption{Differences between JFMs shipped with \LuaTeX-ja}
-%<ja>\caption{\LuaTeX-ja に同梱されている JFM の違い}
-\label{tab-difjfm}
-\ltjsetparameter{jacharrange={+3}}
-\begin{center}
-\def\r#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 14.43324pt \g
-\setbox0=\vtop{\hsize=7\zw\noindent ◆◆◆◆◆◆◆
-ある日モモちゃんがお使いで迷子になって泣きました.}\copy0
-\vrule height 0pt depth \dp0}}
-\def\s#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 14.43324pt \g
-\setbox0=\vtop{\hsize=7\zw\noindent ちょっと!何}\copy0}}
-\def\t#1{{\jfont\g=psft:Ryumin-Light:jfm=#1 at 19.24432pt \g
-\setbox0=\hbox{漢}%
-\vrule width 0.4pt height\ht0 depth\dp0\kern-.2pt\copy0
-\kern-\wd0\vrule width\wd0height .2pt depth .2pt
-\kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
-\kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
-\kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}}
-\begin{tabular}{rccc}
-\toprule
-&\tt jfm-ujis.lua&\tt jfm-jis.lua&\tt jfm-min.lua\\
-\midrule
-%<en>Example~1\footnotemark
-%<ja>例1\footnotemark
-&\r{ujis}&\r{jis}&\r{min}\\
-%<en>Example~2
-%<ja>例2
-&\s{ujis}&\s{jis}&\s{min}\\
-Bounding Box&\t{ujis}&\t{jis}&\t{min}\\
-\bottomrule
-\end{tabular}
-\end{center}
-\ltjsetparameter{jacharrange={-3}}
-\end{table}
-\footnotetext{from: 乙部厳己, min10フォントについて.
-\texttt{http://argent.shinshu-u.ac.jp/\~{\ }otobe/tex/files/min10.pdf}.}
+%<en>\subsection{Insertion setting of \Param{xkanjiskip}}
+%<ja>\subsection{\Param{xkanjiskip} の挿入設定}
 
-%<en>\paragraph{Note: kern feature}
-%<ja>\paragraph{注意:kern feature}
-\label{para-kern}
 %<*en>
-Some fonts have information for inter-glyph spacing. However, this
-information is not well-compatible with \LuaTeX-ja.  More concretely,
-this kerning space from this information are inserted \emph{before} the
-insertion process of \textbf{JAglue}, and this causes incorrect spacing
-between two characters when both a glue/kern from the data in the font
-and it from JFM are present.
+It is not desirable that \Param{xkanjiskip} is inserted into every
+boundary between \textbf{JAchar}s and \textbf{ALchar}s. For example,
+\Param{xkanjiskip} should not be inserted after opening parenthesis
+(\textit{e.g.}, compare ``(あ'' and ``(\hskip\ltjgetparameter{xkanjiskip}あ'').
+\LuaTeX-ja can control whether \Param{xkanjiskip} can be inserted
+before/after a character, by changing \Param{jaxspmode} for \textbf{JAchar}s and
+\Param{alxspmode} parameters \textbf{ALchar}s respectively.
 %</en>
 %<*ja>
-いくつかのフォントはグリフ間のスペースについての情報を持っている.しかし,
-この情報は\LuaTeX-ja とはあまり相性がよくない.具体的には,この情報に基づいて挿入
-されるカーニングスペースは\textbf{JAglue}の挿入過程の\textbf{前に}挿入され,
-JFMに基づくグルー/カーンも挿入される場合には2文字間の意図しないスペースの原因と
-なる.
+\Param{xkanjiskip}がすべての\textbf{JAchar}と\textbf{ALchar}の境界に
+挿入されるのは望ましいことではない.例えば,\Param{xkanjiskip}は開き括弧の
+後には挿入されるべきではない(「(あ」と「(\hskip\ltjgetparameter{xkanjiskip}あ」を
+比べてみよ).
+\LuaTeX-jaでは\Param{xkanjiskip}をある文字の前/後に挿入するかどうかを,
+\textbf{JAchar}に対しては\Param{jaxspmode}を,\textbf{ALchar}に対しては
+\Param{alxspmode}をそれぞれ変えることで制御することができる.
 %</ja>
+\begin{LTXexample}
+\ltjsetparameter{jaxspmode={`あ,preonly}, alxspmode={`\!,postonly}}
+pあq い!う
+\end{LTXexample}
 
-\begin{itemize}
 %<*en>
-\item You should specify \texttt{-kern} in
-  \verb+jfont+ primitive, when you want to use other font features,
-  such as \texttt{script=...}\,.
+The second argument \texttt{preonly} means that the insertion of
+\Param{xkanjiskip} is allowed before this character, but not after.
+the other possible values are \texttt{postonly}, \texttt{allow}, and \texttt{inhibit}.
 %</en>
 %<*ja>
-\item  \texttt{script=...}といったfeatureを使いたい場合には,\verb+\jfont+
-  プリミティブに\texttt{-kern}を指定するべきである.
+2つ目の引数の \texttt{preonly}は「\Param{xkanjiskip}の挿入はこの文字の
+前でのみ許され,後では許さない」ことを意味する.他に指定可能な値は
+\texttt{postonly}, \texttt{allow}, \texttt{inhibit}である.
 %</ja>
+
 %<*en>
-\item If you want to use Japanese fonts in proportional width, and use
-      information from this font, use \texttt{jfm-prop.lua} for its JFM, and ...
-%</en>
+\Param{jaxspmode} and \Param{alxspmode} use a same table to store the parameters
+on the current version. Therefore, line~1 in the code above can be rewritten
+as follows:
+%</en>
 %<*ja>
-\item もしプロポーショナル幅の和文フォントをそのフォントの情報に基づいて使いたい
-  ならば,\texttt{jfm-prop.lua}をJFMとして指定し,……
+なお,現行の
+仕様では,\Param{jaxspmode}, \Param{alxspmode}はテーブルを共有しており,
+上のコードの1行目を次のように変えても同じことになる:
 %</ja>
-
-TODO: kanjiskip?
-\end{itemize}
-
-
-%<en>\subsection{Prefix \texttt{psft}}
-%<ja>\subsection{\texttt{psft} プレフィックス}
-\label{ssec-psft}
+\begin{lstlisting}
+\ltjsetparameter{alxspmode={`あ,preonly}, jaxspmode={`\!,postonly}}
+\end{lstlisting}
 %<*en>
-Besides \texttt{file:}\ and \texttt{name:}\ prefixes, one can use \texttt{psft:}\
-prefix in \verb+\jfont+ (and~\verb+\font+) primitive,
-to specify a `name-only' Japanese font which
-will not be embedded to PDF. Typical use of this prefix is to specify
-the `standard' Japanese fonts, namely, `Ryumin-Light' and
-`GothicBBB-Medium'. For kerning or other information, that of Kozuka
-Mincho Pr6N Regular (this is a font by Adobe Inc., and included in
-Japanese Font Packs for Adobe Reader) will be used.
+One can use also numbers to specify these two parameters (see Subsection~\ref{ssec-param}).
 %</en>
 %<*ja>
-\texttt{file:}と\texttt{name:}のプレフィックスに加えて,
-\verb+\jfont+ プリミティブ(と \verb+\font+ プリミティブ)では
-\texttt{psft:}プレフィックスを用いることができる.
-このプレフィックスを用いることで,PDFには埋め込まれない「名前だけの」
-和文フォントを指定することができる.典型的な使い方は「標準的な」和文フォント,
-つまり`Ryumin-Light'と`GothicBBB-Medium'を指定することである.
-この場合,カーニング他の情報は小塚明朝 Pr6N Regular
-(Adobe社によるフォントで,Adobe Readerの日本語フォントパックに含まれている)
-が用いられる.
+また,これら2パラメータには数値で値を指定することもできる(\ref{ssec-param}節を参照).
 %</ja>
 
-\paragraph{\texttt{cid} key}
-\label{para-cid}
-
- \texttt{cid} key, ...
-
-
-%<en>\subsection{Structure of JFM file}
-%<ja>\subsection{JFMファイルの構造}
-
 %<*en>
-A JFM file is a Lua script which has only one function call:
+If you want to enable/disable all insertions of \Param{kanjiskip} and
+\Param{xkanjiskip}, set \Param{autospacing} and \Param{autoxspacing}
+parameters to \texttt{true}/\texttt{false}, respectively.
 %</en>
 %<*ja>
-JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである:
+もし全ての\Param{kanjiskip}と\Param{xkanjiskip}の挿入を有効化/無効化
+したければ,それぞれ\Param{autospacing}と\Param{autoxspacing}を
+\texttt{true}/\texttt{false}に設定すればよい.
 %</ja>
-\begin{verbatim}
-luatexja.jfont.define_jfm { ... }
-\end{verbatim}
+
+%<en>\subsection{Shifting the baseline}
+%<ja>\subsection{ベースラインの移動}
 %<*en>
-Real data are stored in the table which indicated above by
-\verb+{ ... }+.  So, the rest of this subsection are devoted to describe the
-structure of this table.  Note that all lengths in a JFM file are
-floating-point numbers in design-size unit.
+To make a match between a Japanese font and an alphabetic font, sometimes
+shifting of the baseline of one of the pair is needed. In \pTeX, this is achieved
+by setting \cs{ybaselineshift} (or \cs{tbaselineshift}) to a non-zero length (the
+baseline of \textbf{ALchar} is shifted below). However, for documents
+whose main language is not Japanese, it is good to shift the baseline of
+Japanese fonts, but not that of alphabetic fonts.
+Because of this, \LuaTeX-ja can independently set the shifting amount
+of the baseline of alphabetic fonts and that of Japanese fonts.
+\begin{center}
+ \small
+\begin{tabular}{>{\bfseries}lcc}
+\toprule
+&\bfseries Horizontal writing (\emph{yoko} direction) etc.
+&\bfseries Vertical writing(\emph{tate} direction)\\
+\midrule
+Alphabetic fonts&\Param{yalbaselineshift}
+     parameter&\Param{talbaselineshift} parameter\\
+Japanese fonts&\Param{yjabaselineshift}
+     parameter&\Param{tjabaselineshift} parameter\\
+\bottomrule
+\end{tabular}
+\end{center}
 %</en>
 %<*ja>
-実際のデータは上で \verb+{ ... }+ で示されたテーブルの中に格納されている.
-以下ではこのテーブルの構造について記す.
-なお,JFMファイル中の長さは全てdesign-sizeを単位とする浮動小数点数であることに
-注意する.
+和文フォントと欧文フォントを合わせるためには,時々どちらかのベースラインの移動が
+必要になる.\pTeX ではこれは \cs{ybaselineshift}(または\cs{tbaselineshift})を設定することで
+なされていた(\textbf{ALchar}のベースラインがその分だけ下がる).しかし,日本語が主ではない
+文書に対しては,欧文フォントではなく和文フォントのベースラインを移動した方がよい.
+このため,\LuaTeX-jaでは欧文フォントのベースラインのシフト量
+と和文フォントのベースラインのシフト量を独立に設定できるようになっている.
+\begin{center}
+ \small
+\begin{tabular}{>{\bfseries}lcc}
+\toprule
+&\bfseries 横組など&\bfseries 縦組\\
+\midrule
+欧文フォントのシフト量&\Param{yalbaselineshift}
+     parameter&\Param{talbaselineshift} parameter\\
+和文フォントのシフト量&\Param{yjabaselineshift}
+     parameter&\Param{tjabaselineshift} parameter\\
+\bottomrule
+\end{tabular}
+\end{center}
 %</ja>
 
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-
-\item[dir=<direction>]
-%<en>(required)
-%<ja>(必須)
-
-%<en>The direction of JFM. At the present, only \texttt{'yoko'} is supported.
-%<ja>JFMの書字方向.現時点では\texttt{'yoko'}のみがサポートされる.
-
-\item[zw=<length>]
-%<en>(required)
-%<ja>(必須)
-
-%<en>The amount of the length of the `full-width'.
-%<ja>「全角幅」の長さ.
-
-\item[zh=<length>]
-%<en>(required)
-%<ja>(必須)
-
-%<en>The amount of the length of the `full-height' (height + depth).
-%<ja>「全角高さ」(height + depth)の長さ.
-
-\item[kanjiskip=\{<natural>, <stretch>, <shrink>\}]
-%<en>(optional)
-%<ja>(任意)
-
 %<*en>
-This field specifies the `ideal' amount of \Param{kanjiskip}. As noted
-            in Subsection~\ref{subs-kskip}, if the parameter
-            \Param{kanjiskip} is \verb+\maxdimen+, the value specified
-            in this field is actually used (if this field is not specified in
-            JFM, it is regarded as 0\,pt). Note that <stretch> and <shrink>
-            fields are in design-size unit too.
+Here the horizontal line in the below example is the baseline of a line.
 %</en>
 %<*ja>
-「理想的な」\Param{kanjiskip}の量を指定する.\ref{subs-kskip} 節で述べたように,
-もし\Param{kanjiskip}が \verb+\maxdimen+ の値ならば,このフィールドで指定された
-値が実際には用いられる(もしこのフィールドがJFMで指定されていなければ,
-0\,ptであるものとして扱われる).<stretch>と<shrink>のフィールドもdesign-size
-が単位であることに注意せよ.
+下の例において引かれている水平線がベースラインである.
 %</ja>
-
-\item[xkanjiskip=\{<natural>, <stretch>, <shrink>\}]
-%<en>(optional)
-%<ja>(任意)
+\begin{LTXexample}
+\vrule width 150pt height 0.2pt depth 0.2pt \hskip-120pt
+\ltjsetparameter{yjabaselineshift=0pt, yalbaselineshift=0pt}abcあいう
+\ltjsetparameter{yjabaselineshift=5pt, yalbaselineshift=2pt}abcあいう
+\end{LTXexample}
 
 %<*en>
-Like the \Param{kanjiskip} field, this field specifies the `ideal'
-            amount of \Param{xkanjiskip}.
+There is an interesting side-effect: characters in different size can be
+vertically aligned center in a line, by setting two parameters appropriately.
+The following is an example (beware the value is not well tuned):
 %</en>
 %<*ja>
-\Param{kanjiskip}フィールドと同様に,\Param{xkanjiskip}の「理想的な」量を
-指定する.
+この機能には面白い使い方がある:2つのパラメータを適切に設定することで,サイズの
+異なる文字を中心線に揃えることができる.
+以下は一つの例である(値はあまり調整されていないことに注意):
 %</ja>
-\end{list}
+\begin{LTXexample}[width=0.4\textwidth]
+\vrule width 150pt height4.417pt depth-4.217pt%
+\kern-150pt
+\large xyz漢字
+{\scriptsize
+  \ltjsetparameter{yjabaselineshift=-1.757pt,
+    yalbaselineshift=-1.757pt}
+  漢字xyzあいう
+}あいうabc
+\end{LTXexample}
 
 %<*en>
-Besides from above fields, a JFM file have several sub-tables those
-indices are natural numbers.  The table indexed by~$i\in\omega$ stores
-information of `character class'~$i$. At least, the character class~0 is
-always present, so each JFM file must have a sub-table whose index is
-\texttt{[0]}.  Each sub-table (its numerical index is denoted by $i$) has
-the following fields:
+Note that setting positive \Param{yalbaselineshift}~or~\Param{talbaselineshift}
+parameters does not increase the depth of one-letter \emph{syllable} $p$ of \textbf{Alchar}, if
+its left-protrusion~(\cs{lpcode}) and right-protrusion~(\cs{rpcode}) are both non-zero.
+This is because
+\begin{itemize}
+\item These two parameters are implemented by setting \texttt{yoffset} field of a
+glyph node, and this does not increase the depth of the glyph.
+\item To cope with the above situation, \LuaTeX-ja automatically supplies
+a rule in every syllable.
+\item However, we cannot use this ``supplying a rule'' method if a syllable comprises just
+      one letter whose \cs{lpcode}~and~\cs{rpcode} are both non-zero.
+\end{itemize}
+
+This problem does not apply for \Param{yjabaselineshift}~nor~\Param{tjabaselineshift},
+becuse a \emph{JAchar} is encapsulated by a horizontal box if needed.
 %</en>
 %<*ja>
-上記のフィールドに加えて,JFMファイルはそのインデックスが自然数であるいくつかの
-サブテーブルを持つ.インデックスが$i\in\omega$であるテーブルは「文字クラス」$i$の
-情報を格納する.少なくとも,文字クラス0は常に存在するので,JFMファイルはインデックス
-が\texttt{[0]}のサブテーブルを持たなければならない.それぞれのサブテーブル
-(そのインデックスを$i$で表わす)は以下のフィールドを持つ:
+なお,以下の場合には1文字の\textbf{ALchar}からなる「音節」の深さは増加しないことに注意.
+\begin{itemize}
+ \item \Param{yalbaselineshift},~\Param{talbaselineshift}パラメータが正になっている.
+ \item 「音節」を構成する唯一の文字$p$の
+左余白への突出量(\cs{lpcode}),右余白への突出量(\cs{rpcode})がどちらも非零である.
+\end{itemize}
+\emph{JAchar}は必要に応じて1文字ずつボックスにカプセル化されるため,
+\Param{yjabaselineshift},~\Param{tjabaselineshift}パラメータについてはこのような問題は起こらない.
 %</ja>
 
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item[chars=\{<character>, ...\}]
-%<en>(required except character class~0)
-%<ja>(文字クラス0を除いて必須)
+%<*ja>
+\paragraph{数式における挙動:\pTeX との違い}
+\textbf{ALchar}のベースラインを補正する \Param{yalbaselineshift} パラメータは
+ほぼ\pTeX における \cs{ybaselineshift} に対応しているものであるが,
+数式中の挙動は異なっているので注意が必要である.
+例えば,表\ref{tab:math_bsa}のように,数式中に明示的に現れた \cs{hbox} は,
+\begin{itemize}
+ \item \pTeX では,ボックス全体が \cs{ybaselineshift} だとシフトされるので,
+ 表\ref{tab:math_bsa}中の``い''のように,ボックス中の和文文字は
+ \ \cs{ybaselineshift} だけシフトされ,一方,``for all''のように,
+ ボックス内の欧文文字は2重にシフトされることになる.
+ \item 一方,\LuaTeX-jaではそのようなことはおこらず,
+ 数式中に明示的に現れた \cs{hbox} はシフトしない.そのため,
+ 表\ref{tab:math_bsa}中の``い''も``for all''も,それぞれ本文中に
+ 書かれたときと同じ上下位置に組まれる.
+\end{itemize}
+\begin{table}
+\small\centering
+\caption{数式関係のベースライン補正($\Param{yalbaselineshift}=10\,\textrm{pt}$)}
+\label{tab:math_bsa}
+\newdimen\origbaselineskip
+\origbaselineskip=\baselineskip
+\begin{tabular}{lp{30\zw}}
+\toprule
+\emph{入力}&\vspace*{\dimexpr-\origbaselineskip-\smallskipamount}
+\begin{lstlisting}
+数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$
+\end{lstlisting}\\
+\noalign{\vskip-\origbaselineskip}
+\midrule
+\emph{\pTeX}&
+{\ltjsetparameter{yalbaselineshift=10pt}%
+数式abc: $あa\lower10pt\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x)\ \lower10pt\hbox{for all}\ x\in A$
+\par}\\
+\midrule
+\emph{\LuaTeX-ja}&
+{\ltjsetparameter{yalbaselineshift=10pt}%
+数式abc: $あa\hbox{い}$, $\int_0^x t\,dt=x^2/2$,
+$\Phi\vdash F(x)\ \hbox{for all}\ x\in A$
+\par}\\
+\noalign{\vskip-\origbaselineskip}
+\bottomrule
+\end{tabular}
+\end{table}
+%</ja>
 
 %<*en>
-This field is a list of characters which are in this character
-            type~$i$. This field is not required if $i=0$, since all
-            \textbf{JAchar} which are not in any character class other
-            than 0 are in the character class 0
-             (hence, the character class~0 contains most of
-            \textbf{JAchar}s). In the list, a character can be
-            specified by its code number, or by the character itself
-            (as a string of length~1). Moreover, there are `imaginary
-            characters' which specified in the list. We will describe these later.
+\subsection{\emph{kinsoku} parameters and OpenType features}
+Among parameters which related to Japanese word-wrapping process (\emph{kinsoku shori}),
+\begin{quote}
+ \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
+ \Param{postbreakpenalty}~and~\Param{kcatcode}
+\end{quote}
+are stored by each character codes.
+
+OpenType font features are ignored in these parameters.
+For example, a fullwidth katakana ``ア'' on line~10 in the below input is replaced to
+its halfwidth variant ``ア'', by \verb+hwid+ feature.
+However, the penalty inserted after it is 10 which is the \Param{postbreakpenalty} of
+``ア'', not 20.
 %</en>
 %<*ja>
-このフィールドは文字クラス$i$に属する文字のリストである.このフィールドは$i=0$の
-場合には必須ではない.なぜならば,文字クラス0には,0以外の文字クラスに属するものを
-除いた全ての\textbf{JAchar}が属するからである(よって,文字クラス0はほとんどの
-\textbf{JAchar}を含む).このリストでは,文字はその文字コードを用いて,もしくは
-文字それ自体(長さ1の文字列)によって指定される.さらに,このリストで指定される
-「仮想的な文字」も存在する.これらについては後に記す.
+\subsection{禁則処理関連パラメータとOpenTypeのfont feature}
+禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち
+\begin{quote}
+ \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
+ \Param{postbreakpenalty}, \Param{kcatcode}
+\end{quote}
+は,文字コードごとに設定する量である.
+
+\Pkg{fontspec}パッケージを使う(\ref{ssec-fontspec}節)場合など,
+各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は,
+\emph{OpenType featureの適用前の文字コードによって適用される.}
+例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」
+に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である.
 %</ja>
 
-\item[width=<length>, height=<length>, depth=<length>, italic=<length>]
-%<en>(required)
-%<ja>(必須)
+\begin{LTXexample}[width=0.2\textwidth]
+\ltjsetparameter{postbreakpenalty={`ア, 10}}
+\ltjsetparameter{postbreakpenalty={`ア, 20}}
 
+\newcommand\showpostpena[1]{%
+  \leavevmode\setbox0=\hbox{#1\hbox{}}%
+  \unhbox0\setbox0=\lastbox\the\lastpenalty}
+
+\showpostpena{ア},
+\showpostpena{ア},
+{\addjfontfeatures{CharacterWidth=Half}\showpostpena{ア}}
+\end{LTXexample}
+
+\clearpage
+%<en>\part{Reference}
+%<ja>\part{リファレンス}
+\label{part-ref}
+\suppressfloats[t]
+%<*ja>
+\section{\LuaTeX-jaにおける \cs{catcode}}
+\label{sec-catcode}
+\subsection{予備知識:\pTeX と\upTeX における \cs{kcatcode}}
+\pTeX,\upTeX においては,和文文字が制御綴内で利用できるかどうか
+は \cs{kcatcode} の値によって決定されるのであった.
+詳細は表\ref{table-kcat}を参照されたい.
+%</ja>
+%<*en>
+\section{\cs{catcode} in \LuaTeX-ja}
+\label{sec-catcode}
+\subsection{Preliminaries: \cs{kcatcode} in \pTeX\ and \upTeX}
+In \pTeX~and~\upTeX, the value of \cs{kcatcode} determines
+whether a Japanese character can be used in a control word.
+For the detail, see Table~\ref{table-kcat}.
+%</en>
+
+\begin{table}[t]
+\small
+\caption{\cs{kcatcode} in \upTeX}
+\label{table-kcat}
+%<en>\medskip
+
+\noindent\hfill
+\begin{tabular}{ccccc}
+\toprule
+\bfseries \cs{kcatcode}&
 %<*en>
-Specify width of characters in character class~$i$, height, depth and
-the amount of italic correction. All characters in character class~$i$ are regarded that its width, height and depth are
-as values of these fields.
-But there is one exception: if \texttt{'prop'} is specified in \texttt{width} field, width of a character becomes that of its `real' glyph
+\bfseries meaning&
+\bfseries control word&
+\bfseries widow penalty\hbox{}$^*$&
+\bfseries linebreak\\
 %</en>
 %<*ja>
-文字クラス$i$に属する文字の幅,高さ,深さ,イタリック補正の量を指定する.
-文字クラス$i$に属する全ての文字は,その幅,高さ,深さがこのフィールドで指定した
-値であるものとして扱われる.
-しかし,例外が一つある:もし\texttt{'prop'}が\texttt{width}フィールドに
-指定された場合,文字の幅はその「実際の」グリフの幅となる.
+\bfseries 意図&
+\bfseries 制御綴中に使用&
+\bfseries 文字ウィドウ処理\hbox{}$^*$&
+\bfseries 直後での改行\\
 %</ja>
+\midrule
+15&non-cjk&\multicolumn{3}{c}{(treated as usual \LaTeX)}\\
+16&kanji&Y&Y&ignored\\
+17&kana&Y&Y&ignored\\
+18&other&N&N&ignored\\
+19&hangul&Y&Y&space\\
+\bottomrule
+\end{tabular}\hfill\null
 
-\item[left=<length>, down=<length>, align=<align>]\
+\medskip
+
+%<*ja>
+文字ウィドウ処理\hbox{}$^*$: 「漢字が一文字だけ次の行に行くのを防ぐ」\
+\cs{jcharwidowpenalty} が,
+その文字の直前に挿入されうるか否か,を示す.
+%</ja>
+\end{table}
 
 %<*en>
-These fields are for adjusting the position of the `real' glyph. Legal
-            values of \texttt{align} field are \texttt{'left'},
-            \texttt{'middle'} and \texttt{'right'}. If one of these
-            3~fields are omitted, \texttt{left} and \texttt{down} are
-            treated as~0, and \texttt{align} field is treated as
-            \texttt{'left'}.
-The effects of these 3~fields are indicated in Figure~\ref{fig-pos}.
+\cs{kcatcode} can be set by a row of JIS~X~0208 in \pTeX,
+and generally by a Unicode block\footnote{%
+  \upTeX\ divides \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms)
+  into three subblocks, and \cs{kcatcode} can be set by a subblock.
+}
+in \upTeX. So characters which can be used in a control word
+slightly differ between \pTeX~and~\upTeX.
 %</en>
 %<*ja>
-これらのフィールドは「実際の」グリフの位置を調整するためにある.
-\texttt{align}フィールドに指定できる値は\texttt{'left'}, \texttt{'middle'},
-\texttt{'right'}のいずれかである.もしこれら3つのフィールドのうちの1つが省かれた
-場合,\texttt{left}と\texttt{down}は0,\texttt{align}フィールドは
-\texttt{'left'}であるものとして扱われる.
-これら3つのフィールドの意味については図 \ref{fig-pos} で説明する.
+\pTeX では \cs{kcatcode} はJIS~X~0208の区単位,
+\upTeX では概ねUnicodeブロック単位\footnote{%
+  \texttt{U+FF00}--\texttt{U+FFEF} (Halfwidth and Fullwidth Forms)は
+  「全角英数字」「半角カナ」「その他」と3つに分割されており,
+  それぞれ別々に \cs{kcatcode} が指定できるようになっている.
+}で設定可能になっている.そのため,\pTeX と\upTeX の初期状態では
+制御綴内で使用可能な文字が微妙に異なっている.
 %</ja>
 
 %<*en>
-In most cases, \texttt{left} and \texttt{down} fields are~0, while
-it is not uncommon that the \texttt{align} field is \texttt{'middle'} or \texttt{'right'}.
-For example, setting the \texttt{align} field to \texttt{'right'} is practically needed
-when the current character class is the class for opening delimiters'.
+\subsection{Case of \LuaTeX-ja}
+The role of \cs{kcatcode} in \pTeX~and~\upTeX\ can be
+divided into the following four kinds,
+and \LuaTeX-ja can control these four kinds separately:
+\begin{itemize}
+ \item
+\emph{Distinction between \textbf{JAchar} or \textbf{ALchar}}
+is controlled by the character range, see Subsection~\ref{ssec-setrange}.
+ \item
+\emph{Whether the character can be used in a control word}
+is controlled by setting \cs{catcode} to 11~(enabled) or 12~(disabled), as usual.
+ \item
+\emph{Whether \Param{jcharwidowpenalty} can be inserted before the character}
+is controlled by the lowermost bit of the \Param{kcatcode} parameter.
+ \item
+\emph{Linebreak after a \textbf{JAchar}} does not produce a space.
+\end{itemize}
 %</en>
 %<*ja>
-多くの場合,\texttt{left}と\texttt{down}は0である一方,
-\texttt{align}フィールドが\texttt{'middle'}や\texttt{'right'}であることは
-珍しいことではない.
-例えば,\texttt{align}フィールドを\texttt{'right'}に指定することは,
-文字クラスが開き括弧類であるときに実際必要である.
+\subsection{\LuaTeX-jaの場合}
+\LuaTeX-jaでは,従来の\pTeX・\upTeX における \cs{kcatcode} の役割を
+分割している:
+\begin{description}
+ \item[欧文/和文の区別 (\upTeX)]
+\cs{ltjdefcharrange} と\textsf{jacharrange}パラメータ(\ref{ssec-setrange}節)
+ \item[制御綴中に使用可か]
+\LuaTeX 自身の \cs{catcode} でよい
+ \item[\Param{jcharwidowpenalty}が挿入可か]
+\Param{kcatcode}パラメータの最下位ビット
+ \item[直後の改行]
+日本語しか想定していないので,\textbf{JAchar}直後の改行で半角スペースが挿入されることはない.
+\end{description}
 %</ja>
-\begin{figure}[!tb]
-\begin{minipage}{0.4\textwidth}%
-\begin{center}\unitlength=10pt\small
-\begin{picture}(15,12)(-1,-4)
-\color{black!10!white}% real glyph :step1
-\put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength}
 
-\color{red!20!white}% real glyph :step1
-\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
+%<*en>
+Default setting of \cs{catcode} of Unicode characters are located in
+\begin{description}
+ \item[plain \LuaTeX] \texttt{luatex-unicode-letters.tex}, which is based on \texttt{unicode-letters.tex}
+(for \XeTeX).
+ \item[\LuaLaTeX] now included in \LaTeX\ kernel  as~\texttt{unicode-letters.def}.
+\end{description}
+However, the default setting of \cs{catcode} differs
+between \XeTeX\ and \LuaTeX, by the following reasons:
+\begin{itemize}
+ \item (plain format) \texttt{luatex-unicode-letters.tex} is based on old \texttt{unicode-letters.tex}.
+ \item The latter half of \texttt{unicode-letters.tex}~and~\texttt{unicode-letters.def}
+sets\cs{catcode} of Kanji and kana characters to 11, via setting \cs{XeTeXcharclass}.
 
-\color{red}% real glyph
-\thicklines
-\put(-1,-1.5){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}}
-\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}}
-\put(-1,5.5){\line(1,0){6}}
-\put(-1,-4){\line(1,0){6}}
+However, this latter half does not exist (plain case), or not executed (\LaTeX~case) in \LuaTeX, hence
+\cs{catcode} of Kanji and kana characters remains 12 in \LuaTeX.
+\end{itemize}
+In other words, Kanji nor kana characters cannot be used in
+a control word, in the default setting of \LuaTeX.
 
-\color{green!20!white}% real glyph :step1
-\put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
+This would be inconvenient for \pTeX~users to shifting to \LuaTeX-ja,
+since several control words containing Kanji, such as \verb+\西暦+,
+are used in \pTeX.
+Hence, \LuaTeX-ja have a counterpart of \texttt{unicode-letters.tex}
+for \LuaTeX, \emph{to match the \cs{catcode} setting with that of \XeTeX.}
+%</en>
+%<*ja>
+ネイティブにUnicode全部の文字を扱える\XeTeX や\LuaTeX では,
+文字が制御綴内で使用できるかは通常の欧文文字と同じく \cs{catcode}
+で指定することとなる.plain \XeTeX における \cs{catcode} の初期設定は\
+\texttt{unicode-letters.tex} 中に記述されており,plain \LuaTeX ではそれを
+元にした \texttt{luatex-unicode-letters.tex} を用いている.
+\LaTeX では \cs{catcode} の設定はカーネルに \texttt{unicode-letters.def} として統合され.
+このファイルを\XeLaTeX, \LuaLaTeX の両方が用いている.
 
-\color{black}% real glyph :step1
-\thicklines
-\put(0,0){\vector(0,1){8}\line(0,-1){3}\vector(1,0){12}}
-\put(12,0){\line(0,1){8}\vector(0,-1){3}}
-\put(0,8){\line(1,0){12}}
-\put(0,-3){\line(1,0){12}}
-\put(0.2,4){\makebox(0,0)[l]{\texttt{height}}}
-\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}}
-\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}}
 
-\color{green!50!black}% real glyph :step1
-\thicklines
-\put(3,0){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}}
-\put(9,0){\line(0,1){7}\line(0,-1){2.5}}
-\put(3,7){\line(1,0){6}}
-\put(3,-2.5){\line(1,0){6}}
-\newsavebox{\eqdist}
-\savebox{\eqdist}(0,0)[b]{%
-  \thinlines
-  \put(-0.08,0.2){\line(0,-1){0.4}}%
-  \put(0.08,0.2){\line(0,-1){0.4}}}
-\put(1.5,0){\usebox{\eqdist}}
-\put(10.5,0){\usebox{\eqdist}}
+だが,\XeTeX における \cs{catcode} の初期設定と
+\LuaTeX におけるそれは一致していない:
+\begin{itemize}
+ \item \texttt{luatex-unicode-letters.tex} の元になった\
+\texttt{unicode-letters.tex} が古い
+ \item \texttt{unicode-letters.tex} 後半部や \texttt{unicode-letters.def} 後半部では
+\cs{XeTeXcharclass} の設定を行なっており,
+それによって漢字や仮名の \cs{catcode} が11に設定されている.
+
+しかし,\texttt{luatex-unicode-letters.tex} ではこの「後半部」が
+まるごと省略されており,また\LuaLaTeX でも \texttt{unicode-letters.def} 後半部は実行されな
+       い.従って漢字や仮名の \cs{catcode} は12のままになっている.
+\end{itemize}
+言い換えると,\LuaTeX の初期状態では漢字や仮名を制御綴内に
+使用することはできない.
+
+これでは \pTeX で使用できた \verb+\西暦+ などが使えないこととなり,
+\LuaTeX-jaへの移行で手間が生じる.そのため,\LuaTeX-jaでは
+\texttt{unicode-letters.tex} の後半部にあたる内容を自前でパッチし,
+結果として\textbf{\XeTeX における初期設定と同じになるようにしている.}
+%</ja>
+
+\begin{table}
+ \centering\small
+%<en>\caption{Difference of the set of non-kanji JIS~X~0208 characters which can be used in a control word}
+%<ja>\caption{制御綴中に使用出来るJIS~X~0208非漢字の違い}
+%<en>\medskip
+\label{table-kcat-diff}
+\def\D#1#2#3#4{%
+  {\fboxsep0pt\fcolorbox{cyan}{white}%
+  {\large\char"#1#2#3#4}}\ (\texttt{U+#1#2#3#4})} %"
+\leavevmode\hbox to 0pt{\hss\begin{tabular}{cccccc}
+\toprule
+%<en>&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\
+%<ja>&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\
+\midrule
+%\D 3000&1&1&N&N&Y\\
+\D 30FB&1&6&N&Y&N\\
+\D 309B&1&11&N&Y&N\\
+\D 309C&1&12&N&Y&N\\
+\D FF40&1&14&N&N&Y\\
+\D FF3E&1&16&N&N&Y\\
+\D FFE3&1&17&N&N&Y\\
+\D FF3F&1&18&N&N&Y\\
+%\D 30FD&1&19&N&Y&Y\\
+%\D 30FE&1&20&N&Y&Y\\
+%\D 309D&1&21&N&Y&Y\\
+%\D 309E&1&22&N&Y&Y\\
+\D 3003&1&23&N&N&Y\\
+\D 4EDD&1&24&N&Y&Y\\
+\D 3005&1&25&N&N&Y\\
+\D 3006&1&26&N&N&Y\\
+\D 3007&1&27&N&N&Y\\
+\D 30FC&1&28&N&Y&Y\\
+\D FF0F&1&31&N&N&Y\\
+\D FF3C&1&32&N&N&Y\\
+\bottomrule
+\end{tabular}\qquad
+\begin{tabular}{cccccc}
+\toprule
+%<en>&\bf row&\bf col.&\bf \pTeX&\bf \upTeX&\bf\LuaTeX-ja\\
+%<ja>&\bf 区&\bf 点&\bf \pTeX&\bf \upTeX&\fontseries{b}\selectfont\LuaTeX-ja\\
+\midrule
+\D FF5C&1&35&N&N&Y\\
+\D FF0B&1&60&N&N&Y\\
+\D FF1D&1&65&N&N&Y\\
+\D FF1C&1&67&N&N&Y\\
+\D FF1E&1&68&N&N&Y\\
+\D FF03&1&84&N&N&Y\\
+\D FF06&1&85&N&N&Y\\
+\D FF0A&1&86&N&N&Y\\
+\D FF20&1&87&N&N&Y\\
+\D 3012&2&9&N&N&Y\\
+\D 3013&2&14&N&N&Y\\
+\D FFE2&2&44&N&N&Y\\
+\D 212B&2&82&N&N&Y\\
+%<en>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Greek letters (row 6)}&Y&N&Y\\
+%<en>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}Cyrillic letters (row 7)}&N&N&Y\\
+%<ja>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}ギリシャ文字(6区)}&Y&N&Y\\
+%<ja>\multicolumn{3}{c}{$\vphantom{\D 3000}$\hbox{}キリル文字(7区)}&N&N&Y\\
+\bottomrule
+\end{tabular}\hss}\par
+\end{table}
 
-\color{blue}% shifted
-\thicklines
-\put(3,-1.5){\vector(-1,0){4}}
-\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}}
-\put(3,0){\vector(0,-1){1.5}}
-\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}}
-\end{picture}
-\end{center}
-\end{minipage}%
-\begin{minipage}{0.6\textwidth}%
 %<*en>
-Consider a node containing Japanese character whose value of the \texttt{align}
-field is \texttt{'middle'}.
+\subsection{Non-kanji characters in a control word}
+Because the engine differ, so non-kanji JIS~X~0208 characters
+which can be used in a control word differ in \pTeX, in \upTeX,~and~in \LuaTeX-ja.
+Table~\ref{table-kcat-diff} shows the difference.
+Except for four characters ``・'',~``゛'', ``゜'',~``゠'',
+\LuaTeX-ja admits more characters in a control word than \upTeX.
+
+Difference becomes larger, if we consider
+non-kanji JIS~X~0213 characters.
+For the detail, see \url{https://github.com/h-kitagawa/kct}.
 %</en>
 %<*ja>
-\texttt{align}フィールドの値が\texttt{'middle'}である和文文字を含むノードを
-考えよう.
+\subsection{制御綴中に使用出来るJIS非漢字の違い}
+
+エンジンが異なるので,\pTeX, \upTeX, \LuaTeX-ja
+において制御綴中に使用可能なJIS~X~0208の文字は異なる.
+異なっているところだけを載せると,表\ref{table-kcat-diff}のようになる.
+「・」「゛」「゜」「゠」を除けば,\LuaTeX-jaでは\upTeX より多くの文字が
+制御綴に使用可能になっている.
+
+JIS~X~0213の範囲に広げると,差異はさらに大きくなる.
+詳細については例えば \url{https://github.com/h-kitagawa/kct} 中の\
+\texttt{kct-out.pdf} などを参照すること.
 %</ja>
-\begin{itemize}
-\item
+
+
 %<*en>
-The black rectangle is a frame of the node.
-Its width, height and depth are specified by JFM.
+\section{Directions}
+\LuaTeX\ supports four $\Omega$-style directions: \texttt{TLT},~\texttt{TRT}, \texttt{RTT}
+and \texttt{LTL}.
+However, neither directions are not well-suited for typesetting Japanese vertically, hence we
+implemented vertical writing by rotating \texttt{TLT}-box by 90~degrees.
 %</en>
 %<*ja>
-黒色の長方形はノードの枠である.
-その幅,高さ,深さはJFMによって指定される.
+\section{縦組}
+\label{sec-direction}
+\LuaTeX 本体でも,$\Omega$・$\aleph$由来の機能として,複数の組方向をサポートしている.
+しかし,\LuaTeX がサポートするのは \texttt{TLT},~\texttt{TRT}, \texttt{RTT},~\texttt{LTL}\
+のみであり,日本語の縦組に使うのは望ましくない\footnote{%
+和文文字だけならば \texttt{RTT} を使えばなんとかなると思うが,
+欧文文字が入ってきた場合はうまくいかず,\texttt{RTR} という組方向が必要になる.
+}.そのため,\LuaTeX-jaでは横組(\texttt{TLT})で組んだボックスを回転させる方式で
+縦組を実装した.
 %</ja>
-\item
-%<*en>
-Since the \texttt{align} field is \texttt{'middle'},
-the `real' glyph is centered horizontally (the green rectangle).
-%</en>
+
+%<ja>\subsection{サポートする組方向}
+\begin{table}[t]
+%<ja>\caption{\LuaTeX-ja のサポートする組方向}
+%<en>\caption{Directions supported by \LuaTeX-ja}
+%<en>\medskip
+\label{tab-dir}
+\centering\small
+\def\obox#1{%
+  \setbox0=\hbox{\yoko\hbox{#1%
+  \large\ltjsetparameter{talbaselineshift=0pt}%
+  \vrule height 25pt width 0.4pt depth 15pt\kern-.2pt%
+  \raise25pt\hbox to 0pt{\hss\composite{*r^@{>>}}\hss}%
+  \raise-15pt\hbox to 0pt{\hss\composite{*l^@{>|}}\hss}\kern.2pt%
+  \vrule height.2pt depth.2pt width 60pt\hbox to 0pt{\hss\composite{*d^@{>}}\hss}\kern-60pt
+  \hbox to 60pt{\,銀は、Ag\hss}}}%
+  \raise\dimexpr 0.5\ltjgetdp0-0.5\ltjgetht0\box0%
+}
 %<*ja>
-\texttt{align}フィールドは\texttt{middle}なので,「実際の」グリフは
-水平方向の中心に配置される(緑色の長方形).
+\begin{tabular}{>{\bfseries}lcccc}
+\toprule
+&横組&縦組 &「dtou方向」&「utod方向」\\
+\midrule
+命令&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\
+字送り方向&水平右向き(→)&垂直下向き(↓)&垂直上向き(↑)&垂直下向き(↓)\\
+行送り方向&垂直下向き(↓)&水平左向き(←)&水平右向き(→)&水平左向き(←)\\
+使用する和文フォント&横組用(\cs{jfont})&縦組用(\cs{tfont})&
+\multicolumn{2}{c}{%
+  横組用(\cs{jfont})の$90^\circ$回転}\\[\smallskipamount]
+組版例\null $^*$ &\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\
+\noalign{\medskip}
+\bottomrule
+\end{tabular}
+
+\medskip\raggedright
+\def\R#1{%
+  \raise0.38\zw\hbox{%
+    \vrule height.2pt  depth.2pt width2\zw%
+    \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}%
+  }%
+}
+$^*$\ 幅(width),高さ(height),深さ(depth)の増加方向を,
+それぞれ「\R{>}」,「\R{>>}」,「\R{>|}」で表している.
+\raggedright
 %</ja>
-\item
+
 %<*en>
-Furthermore, the glyph is shifted according to values of fields
-      \texttt{left} and \texttt{down}. The ultimate position of the real
-      glyph is indicated by the red rectangle.
-%</en>
-%<*ja>
-さらに,グリフは\texttt{left}と\texttt{down}の値に従ってシフトされる.
-最終的な実際のグリフの位置は赤色の長方形で示された位置になる.
-%</ja>
-\end{itemize}
-\end{minipage}
-\caption{
-%<en>The position of the `real' glyph.
-%<ja>「実際の」グリフの位置.
+\begin{tabular}{>{\bfseries}lcccc}
+\toprule
+&horizontal (\emph{yoko}~direction)&vertical (\emph{tate}~direction)&%
+  \emph{dtou} direction&\emph{utod} direction\\
+\midrule
+Commands&\cs{yoko}&\cs{tate}&\cs{dtou}&\cs{utod}\\
+Beginning of the page&Top&Right&Left&Right\\
+Beginning of the line&Left&Top&Bottom&Top\\
+Used Japanese font&horizontal (\cs{jfont})&vertical (\cs{tfont})&
+\multicolumn{2}{c}{%
+  horizontal ($90^\circ$ rotated)}\\[\smallskipamount]
+Example&\obox{\yoko}&\obox{\tate}&\obox{\dtou}&\obox{\utod}\\
+\noalign{\medskip}
+(Notation used in $\Omega$)&TLT&RTR, RTT&LBL&RTR\\
+\bottomrule
+\end{tabular}
+
+\medskip\raggedright
+\def\R#1{%
+  \raise0.38\zw\hbox{%
+    \vrule height.2pt  depth.2pt width2\zw%
+    \hbox to 0pt{\hss\composite{*d^@{#1}}\hss}%
+  }%
 }
-\label{fig-pos}
-\end{figure}
+\raggedright
+%</en>
+\end{table}
 
+%<*en>
+\LuaTeX-ja supports four directions, as shown in Table~\ref{tab-dir}.
+The second column (\emph{yoko} direction) is just horizontal writing,
+and the third column (\emph{tate} direction) is vertical writing.
+The fourth column (\emph{dtou} direction) is actually a hidden feature of \pTeX.
+We implemented this for debugging purpose.
+The fifth column (\emph{utod} direction) corresponds the ``\texttt{tate (math) direction}'' of \pTeX.
 
-\item[kern={\{[$j$]=<kern>, ...\}}]
+Directions can be changed by \cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod},
+only when the current list is null. Also, the direction of a math formula is changed to
+\emph{utod}, when the direction outside the math formula is \emph{tate} (vertical writing).
+%</en>
 
-\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>\}, ...\}}]
-\end{list}
+%<*ja>
+\LuaTeX-jaがサポートする組方向は表\ref{tab-dir}に示す4つである.
+4列目の \cs{dtou} は聞き慣れない命令だと思うが,
+実は\pTeX に同名の命令が(ドキュメントには書かれていないが)存在する.
+Down-TO-Upの意味なのだろう.\cs{dtou} を使用する機会はないだろうが,
+\LuaTeX-jaではデバッグ用に実装している.
+5列目の \cs{utod} は,\pTeX で言う「縦数式ディレクション」に相当するものである.
+
+組方向は,\cs{yoko},~\cs{tate}, \cs{dtou},~\cs{utod} をそれぞれ使用することで,
+現在作成中のリストやボックスが空の時にのみ変更可能である.
+また,縦組中の数式内のボックスは\pTeX と同じように組方向が \cs{utod} となる.
+%</ja>
 
 %<*en>
-As described before, you can specify several `imaginary characters' in
-\texttt{chars} field. The most of these characters are regarded as the
-characters of class 0 in \pTeX.
-As a result, \LuaTeX-ja can control typesetting finer than \pTeX.
-The following is the list of `imaginary characters':
+\subsection{Boxes in different direction}
+
+As in \pTeX, one can use boxes of different direction in one document.
+The below is an example.
+\begin{LTXexample}
+ここは横組%     yoko
+\hbox{\tate %   tate
+  \hbox{縦組}%  tate
+  の中に
+  \hbox{\yoko 横組の内容}% yoko
+  を挿入する
+}
+また横組に戻る% yoko
+\end{LTXexample}
+
+Table~\ref{tab-diffdir} shows how a box is arranged when
+the direction  inside the box and that outside the box differ.
 %</en>
 %<*ja>
-上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も
-指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字
-クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か
-い組版調整ができるようになっている.以下でその一覧を述べる:
+\subsection{異方向のボックス}
+
+縦組の中に「42」などの2桁以上の算用数字を横組で組むなど,
+異なる組方向を混在させることがしばしば行われる.
+組方向の混在も\pTeX と同じようにできる:
+\begin{LTXexample}
+ここは横組%     yoko
+\hbox{\tate %   tate
+  \hbox{縦組}%  tate
+  の中に
+  \hbox{\yoko 横組の内容}% yoko
+  を挿入する
+}
+また横組に戻る% yoko
+\end{LTXexample}
+
+異なる組方向のボックスを配置した場合にどう組まれるかの仕様も,\pTeX を
+踏襲している.表\ref{tab-diffdir}に示す.
 %</ja>
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item['lineend']
-%<en>An ending of a line.
-%<ja>行の終端を表す.
 
-\item['diffmet']
-%<en>Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
-%<ja>JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる.
+\begin{table}[t]
+%<ja>\caption{異方向のボックスの配置}
+%<en>\caption{Boxes in different direction}
+%<en>\medskip
+\label{tab-diffdir}
+ \centering\small\unitlength3mm
+ \def\TATEeg{%
+   \hbox{\smash{\begin{picture}(0,0)(-2,0)
+     \thicklines
+     \polyline(-2,0)(-2,-7)(5,-7)(5,0)
+     \put(0,0){\circle*{0.3}}
+     \put(2.5,-4){\makebox(0,0){\hbox{\tate\bfseries \emph{tate}/\emph{utod}}}}
+     \put(0,0){\vector(1,0){5}} \put(2.5,-0.2){\makebox(0,0)[t]{$h_{\mathrm{T}}$}}
+     \put(0,0){\vector(-1,0){2}}\put(-1,-0.2){\makebox(0,0)[t]{$d_{\mathrm{T}}$}}
+     \put(0,0){\vector(0,-1){7}}\put(0.2,-3.5){\makebox(0,0)[l]{$w_{\mathrm{T}}$}}
+   \end{picture}}}%
+ }
+ \def\DTOUeg{%
+   \hbox{\smash{\begin{picture}(0,0)(-5,0)
+     \thicklines
+     \polyline(-5,0)(-5,7)(2,7)(2,0)
+     \put(0,0){\circle*{0.3}}
+     \put(-2.5,4){\makebox(0,0){\hbox{\dtou\bfseries \emph{dtou}}}}
+     \put(0,0){\vector(-1,0){5}} \put(-2.5,0.3){\makebox(0,0)[b]{$h_{\mathrm{D}}$}}
+     \put(0,0){\vector(1,0){2}}\put(1,0.3){\makebox(0,0)[b]{$d_{\mathrm{D}}$}}
+     \put(0,0){\vector(0,1){7}}\put(-0.2,3.5){\makebox(0,0)[r]{$w_{\mathrm{D}}$}}
+   \end{picture}}}%
+ }
+ \def\YOKOeg{%
+   \hbox{\smash{\begin{picture}(0,0)
+     \thicklines
+     \polyline(0,5)(7,5)(7,-2)(0,-2)
+     \put(4,2.5){\makebox(0,0){\hbox{\yoko\bfseries \emph{yoko}}}}
+     \put(0,0){\circle*{0.3}}
+     \put(0,0){\vector(0,1){5}} \put(0.3,2.5){\makebox(0,0)[l]{$h_{\mathrm{Y}}$}}
+     \put(0,0){\vector(0,-1){2}}\put(0.3,-1){\makebox(0,0)[l]{$d_{\mathrm{Y}}$}}
+     \put(0,0){\vector(1,0){7}}\put(3.5,0.2){\makebox(0,0)[b]{$w_{\mathrm{Y}}$}}
+   \end{picture}}}%
+ }
+\begin{tabular}{ccc}
+\toprule
+%<ja>\emph{横組中に配置}&\emph{縦組中に配置}&%
+%<ja>\emph{組方向 \cs{dtou} 中に配置}\\
+%<en>\textbf{typeset in \emph{yoko} direction}
+%<en>&\textbf{typeset in \emph{tate} or \emph{utod} direction}
+%<en>&\textbf{typeset in \emph{dtou} direction}\\
+\midrule
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(0,0){\line(1,0){3.8}}
+   \put(4,7){\TATEeg}
+   \put(11.2,0){\line(1,0){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(3,3.5){\vector(0,1){3.5}\vector(0,-1){3.5}}
+   \put(2.8,3.5){\makebox(0,0)[r]{$H_{\mathrm{Y}}$}}
+   \put(3,-2){\vector(0,1){2}}
+   \put(2.8,-1){\makebox(0,0)[r]{$D_{\mathrm{Y}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(6,8){\vector(-1,0){2}}
+   \put(9,8){\vector(1,0){2}}
+   \put(7.5,8){\makebox(0,0){$W_{\mathrm{Y}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{Y}} &= h_{\mathrm{T}}+d_{\mathrm{T}},\\
+   H_{\mathrm{Y}} &= w_{\mathrm{T}},\\
+   D_{\mathrm{Y}} &=0\,\mathrm{pt}
+   \end{align*}%
+ }&
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(7.5,-0.2){\line(0,-1){2.8}}
+   \put(4,2){\YOKOeg}
+   \put(7.5, 7.2){\line(0,1){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(2,0){\line(1,0){1.8}}
+   \put(3,5){\vector(0,1){2}}
+   \put(3,2){\vector(0,-1){2}}
+   \put(3,3.5){\makebox(0,0){$W_{\mathrm{T}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(8,8){\vector(-1,0){0.5}\vector(1,0){3}}
+   \put(7,8){\vector(-1,0){3}\vector(1,0){0.5}}
+   \put(9.25,8.2){\makebox(0,0)[b]{$H_{\mathrm{T}}$}}
+   \put(5.75,8.2){\makebox(0,0)[b]{$D_{\mathrm{T}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{T}} &= h_{\mathrm{Y}}+d_{\mathrm{Y}},\\
+   H_{\mathrm{T}} &= w_{\mathrm{Y}}/2,\\
+   D_{\mathrm{T}} &= w_{\mathrm{Y}}/2
+   \end{align*}%
+ }&
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(11,-0.2){\line(0,-1){2.8}}
+   \put(4,2){\YOKOeg}
+   \put(11, 7.2){\line(0,1){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(2,0){\line(1,0){1.8}}
+   \put(3,5){\vector(0,1){2}}
+   \put(3,2){\vector(0,-1){2}}
+   \put(3,3.5){\makebox(0,0){$W_{\mathrm{D}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(7.5,8){\vector(-1,0){3.5}\vector(1,0){3.5}}
+   \put(13,8){\vector(-1,0){2}}
+   \put(7.5,8.2){\makebox(0,0)[b]{$H_{\mathrm{D}}$}}
+   \put(12,8.2){\makebox(0,0)[b]{$D_{\mathrm{D}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{D}} &= h_{\mathrm{Y}}+d_{\mathrm{Y}},\\
+   H_{\mathrm{D}} &= w_{\mathrm{Y}},\\
+   D_{\mathrm{D}} &= 0\,\mathrm{pt}
+   \end{align*}%
+ }%
+\\\midrule
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(0,0){\line(1,0){3.8}}
+   \put(4,0){\DTOUeg}
+   \put(11.2,0){\line(1,0){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(3,3.5){\vector(0,1){3.5}\vector(0,-1){3.5}}
+   \put(2.8,3.5){\makebox(0,0)[r]{$H_{\mathrm{Y}}$}}
+   \put(3,-2){\vector(0,1){2}}
+   \put(2.8,-1){\makebox(0,0)[r]{$D_{\mathrm{Y}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(6,8){\vector(-1,0){2}}
+   \put(9,8){\vector(1,0){2}}
+   \put(7.5,8){\makebox(0,0){$W_{\mathrm{Y}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{Y}} &= h_{\mathrm{D}}+d_{\mathrm{D}},\\
+   H_{\mathrm{Y}} &= w_{\mathrm{D}},\\
+   D_{\mathrm{Y}} &= 0\,\mathrm{pt}
+   \end{align*}%
+ }&
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(9,-0.2){\line(0,-1){2.8}}
+   \put(4,0){\DTOUeg}
+   \put(9, 7.2){\line(0,1){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(2,0){\line(1,0){1.8}}
+   \put(3,5){\vector(0,1){2}}
+   \put(3,2){\vector(0,-1){2}}
+   \put(3,3.5){\makebox(0,0){$W_{\mathrm{T}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(6.5,8){\vector(-1,0){2.5}\vector(1,0){2.5}}
+   \put(10,8){\vector(-1,0){1}\vector(1,0){1}}
+   \put(10,8.2){\makebox(0,0)[b]{$H_{\mathrm{T}}$}}
+   \put(6.5,8.2){\makebox(0,0)[b]{$D_{\mathrm{T}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{T}} &= h_{\mathrm{D}}+d_{\mathrm{D}},\\
+   H_{\mathrm{T}} &= d_{\mathrm{D}},\\
+   D_{\mathrm{T}} &= h_{\mathrm{D}}
+   \end{align*}%
+ }&
+ \parbox[c]{15\unitlength}{\begin{picture}(15,15)(0,-4)
+   \put(6,-0.2){\line(0,-1){2.8}}
+   \put(4,7){\TATEeg}
+   \put(6, 7.2){\line(0,1){3.8}}
+%
+   \put(2,7){\line(1,0){1.8}}
+   \put(2,0){\line(1,0){1.8}}
+   \put(3,5){\vector(0,1){2}}
+   \put(3,2){\vector(0,-1){2}}
+   \put(3,3.5){\makebox(0,0){$W_{\mathrm{D}}$}}
+%
+   \put(4,7.2){\line(0,1){1.8}}
+   \put(11,7.2){\line(0,1){1.8}}
+   \put(5,8){\vector(-1,0){1}\vector(1,0){1}}
+   \put(8.5,8){\vector(-1,0){2.5}\vector(1,0){2.5}}
+   \put(5,8.2){\makebox(0,0)[b]{$H_{\mathrm{D}}$}}
+   \put(8.5,8.2){\makebox(0,0)[b]{$D_{\mathrm{D}}$}}
+%
+ \end{picture}\vspace{-\baselineskip}
+   \begin{align*}
+   W_{\mathrm{D}} &= w_{\mathrm{T}},\\
+   H_{\mathrm{D}} &= d_{\mathrm{T}},\\
+   D_{\mathrm{D}} &= h_{\mathrm{T}}
+   \end{align*}%
+ }\\
+\bottomrule
+\end{tabular}
+\end{table}
 
-\item['boxbdd']
-%<en>The beginning/ending of a horizontal box, and the beginning of a noindented paragraph.
-%<ja>水平ボックスの先頭と末尾,及びインデントされていない(\verb+\noindent+ で開始された)段落の先頭を表す.
 
-\item['parbdd']
-%<en>The beginning of an (indented) paragraph.
-%<ja>通常の(\verb+\noindent+ で開始されていない)段落の先頭.
 
-\item['jcharbdd']
-%<en>A boundary between \textbf{JAchar} and anything else (such as \textbf{ALchar}, kern, glue, ...).
-%<ja>和文文字と「その他のもの」(欧文文字,glue,kern等)との境界.
+%<*en>
+\paragraph{\cs{wd} and direction}
+In \pTeX, \cs{wd},~\cs{ht},~\cs{dp} means the dimensions of a box register
+\emph{with respact to the current direction}.
+This means that the value of \cs{wd0} etc.\ might differ when the current direction is
+different, even if \cs{box0} stores the same box.
+However, this no longer applies in \LuaTeX-ja.
 
-\item[$-1$]
-%<en>The left/right boundary of an inline math formula.
-%<ja>行中数式と地の文との境界.
-\end{list}
+\begin{LTXexample}
+% yoko direction
+\setbox0=\hbox to 20pt{foo}
+\the\wd0,~\hbox{\tate\vrule\the\wd0}
+\wd0=100pt
+\the\wd0,~\hbox{\tate \the\wd0}
+\end{LTXexample}
 
-%<en>\paragraph{Porting JFM from \pTeX}
-%<ja>\paragraph{\pTeX 用和文フォントメトリックの移植}
+To access box dimensions \emph{with respect to current direction},
+one have to use the following commands instead of \cs{wd} wtc.
+\begin{cslist}
 
-% ToDo: English version.
+ \item[\cs{ltjgetwd}<num>\textrm{, }\cs{ltjgetht}<num>\textrm{, }%
+  \cs{ltjgetdp}<num>]
+These commands return \emph{an internal dimension} of \cs{box<num>} with respect to
+the current direction. One can use these in \cs{dimexpr} primitive, as the followings.
+\begin{lstlisting}
+\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701
+\end{lstlisting}
+The following is an example.
+\begin{LTXexample}[width=0.3\textwidth]
+\parindent0pt
+\setbox32767=\hbox{\yoko よこぐみ}
+\fboxsep=0mm\fbox{\copy32767}
+\vbox{\hsize=20mm
+\yoko YOKO \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
+\vbox{\hsize=20mm\raggedleft
+\tate TATE \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
+\vbox{\hsize=20mm\raggedleft
+\dtou DTOU \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
+\end{LTXexample}
 
-%<*en>
-...
-%</en>
+ \item[\cs{ltjsetwd}<num>=<dimen>\textrm{, }\cs{ltjsetht}<num>=<dimen>\textrm{, }%
+  \cs{ltjsetdp}<num>=<dimen>]
+These commands set the dimension of \cs{box<num>}. One does not need
+       to group the argument <num>; four calls of \cs{ltjsetwd} below have the same meaning.
+\begin{lstlisting}
+\ltjsetwd42 20pt,  \ltjsetwd42=20pt,  \ltjsetwd=42 20pt,  \ltjsetwd=42=20pt
+\end{lstlisting}
 
+\end{cslist}
+%</en>
 %<*ja>
-以下に,\pTeX 用和文フォントメトリックを\LuaTeX-ja用に移植する場合の注意点を挙げておく.
-\begin{itemize}
-\item 実際に出力される和文フォントのサイズがdesign sizeとなる.
-このため,例えば$1\,\textrm{zw}$がdesign sizeの0.962216倍であるJISフォン
-      トメトリック等を移植する場合は,
-\begin{itemize}
-\item JFM中の全ての数値を$1/0.962216$倍しておく.
-\item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする.
-      \LaTeX でのフォント宣言なら,例えば次のように:
-\begin{verbatim}
-\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{}
-\end{verbatim}
-\end{itemize}
-\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする
-      (JFM中に単に書かなければよい).
-\item \texttt{'boxbdd'}については,それのみで一つの文字クラスを形成し,その
-      文字クラスに関してはグルー/カーンの設定はしない.
+\paragraph{\cs{wd} 達と組方向}
+ボックスレジスタ \cs{box}<num> にセットされているボックスの幅・高さ・深さの取得や
+変更にはそれぞれ \cs{wd},~\cs{ht},~\cs{dp} プリミティブを用いるのであった.
+\pTeX ではこれらのプリミティブは,「現在の組方向におけるボックスの寸法」を指すもので,
+同じボックスに対しても現在の組方向によって返る値は異なるもであった.
 
-これは,\pTeX では,
-      水平ボックスの先頭・末尾とインデントされていない(\verb+\noindent+ で開始さ
-      れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである.
-\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である.
+\LuaTeX-jaにおいては状況が異なり,\cs{wd},~\cs{ht},~\cs{dp} が返す値は
+現在の組方向には依存しない.下の例のように,横組のボックスが格納されていれば
+\cs{wd}等は常に「横組におけるボックスの寸法」を意味する.
 
-ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので,
-      段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに
-      は,段落の最初に手動で \verb+\inhibitglue+ を追加するか,あるいは
-      \verb+\everypar+ のハックを行い,それを自動化させるしかなかった.
+\begin{LTXexample}
+% yoko direction
+\setbox0=\hbox to 20pt{foo}
+\the\wd0,~\hbox{\tate\vrule\the\wd0}
+\wd0=100pt
+\the\wd0,~\hbox{\tate \the\wd0}
+\end{LTXexample}
 
-一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ
-うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに
-\texttt{'parbdd'}を入れれば全角下がりとなる.
+\pTeX のように現在の組方向に応じたボックスの寸法の取得・設定を行うには,
+代わりに次の命令を使用する.
 
-\ltjsetparameter{jacharrange={+3}}
-\begin{LTXexample}
-\jfont\g=psft:Ryumin-Light:jfm=test \g
-\parindent1\zw\noindent{}◆◆◆◆◆
-\par 「◆◆←二分下がり
-\par 【◆◆←全角下がり
-\par 〔◆◆←全角二分下がり
+\begin{cslist}
+
+ \item[\cs{ltjgetwd}<num>\textrm{, }\cs{ltjgetht}<num>\textrm{, }%
+  \cs{ltjgetdp}<num>]
+現在の組方向に応じたボックスの寸法の取得を行う.結果は内部長さであるため,
+\begin{lstlisting}
+\dimexpr 2\ltjgetwd42-3pt\relax, \the\ltjgetwd1701
+\end{lstlisting}
+のように \cs{wd}<num> の代わりとして扱うことができる.
+使用例は以下の通りである.
+\begin{LTXexample}[width=0.3\textwidth]
+\parindent0pt
+\setbox32767=\hbox{\yoko よこぐみ}
+\fboxsep=0mm\fbox{\copy32767}
+\vbox{\hsize=20mm
+\yoko YOKO \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
+\vbox{\hsize=20mm\raggedleft
+\tate TATE \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
+\vbox{\hsize=20mm\raggedleft
+\dtou DTOU \the\ltjgetwd32767, \\
+  \the\ltjgetht32767, \\ \the\ltjgetdp32767.}
 \end{LTXexample}
-\end{itemize}
-\ltjsetparameter{jacharrange={-3}}
-%</ja>
 
-%<en>\subsection{Math Font Family}
-%<ja>\subsection{数式フォントファミリ}
-\label{ssec-math}
+ \item[\cs{ltjsetwd}<num>=<dimen>\textrm{, }\cs{ltjsetht}<num>=<dimen>\textrm{, }%
+  \cs{ltjsetdp}<num>=<dimen>]
+現在の組方向に応じたボックスの寸法の設定を行う.\cs{afterassignment} を2回利用して
+実装しているので,次の4通りは全て同じ意味である.
+\begin{lstlisting}
+\ltjsetwd42 20pt,  \ltjsetwd42=20pt,  \ltjsetwd=42 20pt,  \ltjsetwd=42=20pt
+\end{lstlisting}
 
-%<*en>
-\TeX\ handles fonts in math formulas by 16~font families\footnote{Omega,
-Aleph, \LuaTeX~and $\varepsilon$-\kern-.125em(u)\pTeX\ can handles 256~families, but
-an external package is needed to support this in plain \TeX\ and
-\LaTeX.}, and each family has three fonts:
-\verb+\textfont+, \verb+\scriptfont+ and \verb+\scriptscriptfont+.
-%</en>
-%<*ja>
-\TeX\ は数式フォントを16のファミリ\footnote{Omega, Aleph, \LuaTeX,そして
-  $\varepsilon$-\kern-.125em(u)\pTeX\ では256の数式ファミリを扱うことができるが,
-  これをサポートするためにplain \TeX と\LaTeX では外部パッケージを読み込む必要が
-  ある.}で管理し,それぞれのファミリは3つのフォントを持っている:\verb+\textfont+, \verb+\scriptfont+ そして \verb+\scriptscriptfont+ である.
+設定値は「横組」「縦組及び \cs{utod} 方向」「\cs{dtou} 方向」
+の3種ごとに独立して記録される.参考として,Gitリポジトリ内の
+             \verb+test/test55-boxdim_diffdir.{tex,pdf}+ を挙げておく.
+
+\end{cslist}
 %</ja>
 
 %<*en>
-\LuaTeX-ja's handling of Japanese fonts in math formulas is similar;
-Table~\ref{tab-math} shows counterparts to \TeX's primitives for math
-font families. There is no relation between the value of
-\verb+\fam+ and that of \verb+\jfam+; with appropriate settings,
-you can set both \verb+\fam+ and \verb+\jfam+ to the same value.
+\subsection{Getting current direction}
+The \Param{direction} parameter returns the current direction, and
+the \Param{boxdir} parameter (with the argument <num>)
+returns the direction of a box register \cs{box}<num>.
+The returned value of these parameters are a \emph{string}:
+\begin{center}
+\small
+\begin{tabular}{>{\bfseries}lccccc}
+\toprule
+Direction&\emph{yoko}&\emph{tate}&\emph{dtou}&\emph{utod}&(empty)\\
+\midrule
+Returned value&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\begin{LTXexample}[width=0.3\textwidth]
+\leavevmode\def\DIR{\ltjgetparameter{direction}}
+\hbox{\yoko \DIR}, \hbox{\tate\DIR},
+\hbox{\dtou\DIR}, \hbox{\utod\DIR},
+\hbox{\tate$\hbox{tate math: \DIR}$}
+
+\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2}
+\end{LTXexample}
 %</en>
 %<*ja>
-\LuaTeX-jaの数式中での和文フォントの扱いも同様である.
-表 \ref{tab-math} は数式フォントファミリに対する \TeX のプリミティブと対応する
-ものを示している.\verb+\fam+ と \verb+\jfam+ の値の間には関係はなく,
-適切な設定の下では \verb+\fam+ と \verb+\jfam+ の両方に同じ値を設定することができる.
-%</ja>
+\subsection{組方向の取得}
+「現在の組方向」や「<num>番のボックスの組方向」は,
+\pTeX では \cs{ifydir} や \cs{ifybox}<num> といった条件判断文を使って
+判断することができた.
+しかし,\LuaTeX-jaはあくまでも\TeX マクロとLuaコードで
+記述されており,それでは新たな条件判断命令を作るのは難しい.
 
-\begin{table}[!tb]
-%<en>\caption{Primitives for Japanese math fonts.}
-%<ja>\caption{和文数式フォントに対するプリミティブ.}
-\label{tab-math}
-\begin{center}\def\{{\char`\{}\def\}{\char`\}}
-\begin{tabular}{lll}
+\LuaTeX-jaでは,\Param{direction}パラメータで現在の組方向を,
+\Param{boxdir}パラメータ(と追加の引数<num>)によって
+\cs{box}<num>の組方向をそれぞれ取得できるようにした.
+戻り値は文字列である:
+\begin{center}
+\small
+\begin{tabular}{>{\bfseries}lccccc}
 \toprule
-%<en>&Japanese fonts&alphabetic fonts\\
-%<ja>&和文フォント&欧文フォント\\
+組方向&\emph{横組}&\emph{tate縦組}&\emph{dtou方向}&\emph{utod方向}&(未割り当て)\\
 \midrule
-font family&\verb+\jfam+${}\in [0,256)$&\verb+\fam+\\
-text size&\tt\Param{jatextfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\textfont+<fam>=<font\_cs>\\
-script size&\tt\Param{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptfont+<fam>=<font\_cs>\\
-scriptscript size&\tt\Param{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\verb+\scriptscriptfont+<fam>=<font\_cs>\\
+戻り値&\texttt{4}&\texttt{3}&\texttt{1}&\texttt{11}&\texttt{0}\\
 \bottomrule
 \end{tabular}
 \end{center}
-\end{table}
 
-%<en>\subsection{Callbacks}
-%<ja>\subsection{コールバック}
+\begin{LTXexample}[width=0.3\textwidth]
+\leavevmode\def\DIR{\ltjgetparameter{direction}}
+\hbox{\yoko\DIR}, \hbox{\tate\DIR},
+\hbox{\dtou\DIR}, \hbox{\utod\DIR},
+\hbox{\tate$\hbox{tate math: \DIR}$}
 
-%<*en>
-Like \LuaTeX\ itself, \LuaTeX-ja also has callbacks. These callbacks can
-be accessed via \verb+luatexbase.add_to_callback+ function and so on, as other callbacks.
-%</en>
-%<*ja>
-\LuaTeX 自体のものに加えて,\LuaTeX-jaもコールバックを持っている.
-これらのコールバックには,他のコールバックと同様に \verb+luatexbase.add_to_callback+
-関数などを用いることでアクセスすることができる.
+\setbox2=\hbox{\tate}\ltjgetparameter{boxdir}{2}
+\end{LTXexample}
+
+これらを用いれば,例えば
+\pTeX の \cs{ifydir},~\cs{ifybox200} と同等の条件判断を
+\begin{lstlisting}
+\ifnum\ltjgetparameter{direction}=4
+\ifnum\ltjgetparameter{boxdir}{200}=4
+\end{lstlisting}
+のように行うことができる.
+\cs{iftdir} は少々面倒であるが,8で割った余りが3であるか否かを判断すれば良いから
+\begin{lstlisting}
+\ifnum\numexpr
+  \ltjgetparameter{direction}-(\ltjgetparameter{direction}/8)*8=3
+\end{lstlisting}
+とすればよい.
 %</ja>
-\begin{list}{}%
-{\def\makelabel#1{\bfseries#1}}
-%<en>\item[\texttt{luatexja.load\_jfm} callback]
-%<ja>\item[\texttt{luatexja.load\_jfm}コールバック]
+
 %<*en>
-With this callback you can overwrite JFMs.
-This callback is called when a new JFM is loaded.
+\subsection{Overridden box primitives}
+To cope with multiple directions, the following primitives are
+overridden by \LuaTeX-ja, using~\verb+\protected\def+.
+\begin{cslist}[style=standard]
+ \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>\textrm{, }\cs{unhcopy}<num>\textrm{, }\cs{unvcopy}<num>]
+ \item[\cs{vadjust}\{<material>\}]
+ \item[\cs{insert}<number>\{<material>\}]
+ \item[\cs{lastbox}]
+ \item[\cs{raise}<dimen><box>\textrm{, }\cs{lower}<dimen><box>\textrm{\ etc., }\cs{vcenter}]
+ \item[\cs{vcenter}]
+\end{cslist}
 %</en>
 %<*ja>
-このコールバックを用いることでJFMを上書きすることができる.
-このコールバックは新しいJFMが読み込まれるときに呼び出される.
+\subsection{プリミティブの再定義}
+異なる組方向に対応するために,以下に挙げるプリミティブは
+\LuaTeX-jaによる前処理もしくは後処理が行われるように
+\ \verb+\protected\def+ により再定義してある.
+
+\begin{cslist}
+ \item[\cs{unhbox}<num>\textrm{, }\cs{unvbox}<num>\textrm{, }\cs{unhcopy}<num>\textrm{, }\cs{unvcopy}<num>]
+ ボックスの組方向が現在のリストと異なる場合は事前にエラーメッセージを出力する.
+ \pTeX と異なり,エラーを無視して無理矢理 \cs{unhbox}, \cs{unvbox} を
+ 続行させることもできるが,その場合の組版結果は保証しない.
+ \item[\cs{vadjust}\{<material>\}] 一旦プリミティブ本来の挙動を行う.その後,<material>の組方向が
+ 周囲の垂直リストの組方向と一致しない場合にエラーを出力し,
+ 該当の \cs{vadjust} を無効にする.
+ \item[\cs{insert}<number>\{<material>\}]
+ 一旦プリミティブ本来の挙動を行い,その後<material>内の各ボックス・罫線の直前に組方向を示
+             すdirection whatsitを挿入する.
+ \item[\cs{lastbox}] ボックスの「中身」を現在の組方向に合わせるためのノード
+             (\textit{dir\_box}という)を必要ならば除去し,
+ 正しく「中身」のボックスが返されるように前処理をする.
+ \item[\cs{raise}<dimen><box>\textrm{, }\cs{lower}<dimen><box>\textrm{\ etc., }\cs{vcenter}]
+ 一方,こちらでは必要に応じて\textit{dir\_box}を作成する前処理を追加している.
+\end{cslist}
 %</ja>
 
-\begin{lstlisting}[numbers=left]
-function (<table> jfm_info, <string> jfm_name)
-  return <table> new_jfm_info
-end
-\end{lstlisting}
+%<en>\section{Font Metric and Japanese Font}
+%<ja>\section{フォントメトリックと和文フォント}
+%<en>\subsection{\cs{jfont}}
+%<ja>\subsection{\cs{jfont} 命令}
+\label{ssec-jfont}
 
 %<*en>
-The argument \verb+jfm_info+ contains a table similar to the table in a JFM file, except
-this argument has \texttt{chars} field which contains character codes
-            whose character class is not~0.
+To load a font as a Japanese font (for horizontal direction), you must use the
+\cs{jfont} instead of~\cs{font}, while
+\cs{jfont} admits the same syntax used in~\cs{font}.
+\LuaTeX-ja automatically loads \Pkg{luaotfload} package,
+so TrueType/OpenType fonts with features can be used for Japanese fonts:
 %</en>
 %<*ja>
-引数 \verb+jfm_info+ はJFMファイルのテーブルと似たものが格納されるが,
-クラス0を除いた文字のコードを含んだ\texttt{chars}フィールドを持つ点が異なる.
+フォントを(横組用)和文フォントとして読み込むためには,\cs{jfont} を
+\ \cs{font} プリミティブの代わりに用いる.
+\cs{jfont} の文法は \cs{font} と同じである.
+\LuaTeX-jaは\Pkg{luaotfload}パッケージを自動的に読み込むので,
+TrueType/OpenTypeフォントにfeatureを指定したものを和文フォントとして用いる
+ことができる:
 %</ja>
+\begin{LTXexample}[width=0.3\textwidth]
+\jfont\tradgt={file:KozMinPr6N-Regular.otf:script=latn;%
+  +trad;-kern;jfm=ujis} at 14pt
+\tradgt 当/体/医/区
+\end{LTXexample}
 
 %<*en>
-An example of this callback is the \texttt{ltjarticle} class, with
-            forcefully assigning character class~0 to \texttt{'parbdd'}
-            in the JFM \texttt{jfm-min.lua}. This callback doesn't
-            replace any code of \LuaTeX-ja.
+Note that the defined control sequence
+(\cs{tradgt} in the example above) using \cs{jfont} is not a
+\textit{font\_def} token,  but a macro.
+Hence the input like \verb+\fontname\tradgt+
+causes a error.  We denote control sequences which are defined in
+\cs{jfont} by <jfont\_cs>.
 %</en>
 %<*ja>
-このコールバックの使用例は\texttt{ltjarticle}クラスにあり,
-\texttt{jfm-min.lua}中の\texttt{'parbdd'}を強制的にクラス0に割り当てている.
-このコールバックは\LuaTeX-jaのコードを書き換えない.
+なお,\cs{jfont} で定義された制御綴(上の例だと \cs{tradgt})
+は\textit{font\_def}トークンではなくマクロである.従って,\verb+\fontname\tradgt+ のような
+入力はエラーとなる.以下では \cs{jfont} で定義された
+制御綴を<jfont\_cs>で表す.
 %</ja>
 
-%<en>\item[\texttt{luatexja.define\_font} callback]
-%<ja>\item[\texttt{luatexja.define\_font}コールバック]
+\paragraph{JFM}
 %<*en>
-This callback and the next callback form a pair, and you can assign letters which don't have
-            fixed code points in Unicode to non-zero character classes.
-This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded.
+a JFM has measurements of characters and
+glues/kerns that are automatically inserted for Japanese
+typesetting. The structure of JFM will be described in the next
+subsection. At the calling of \cs{jfont}, you must specify
+which JFM will be used for this font by the following keys:
 %</en>
 %<*ja>
-このコールバックと次のコールバックは組をなしており,Unicode中に固定された文字コード
-番号を持たない文字を非零の文字クラスに割り当てることができる.
-このコールバックは新しい和文フォントが読み込まれたときに呼び出される.
+JFMは文字と和文組版で自動的に挿入される
+グルー/カーンの寸法情報を持っている.JFMの構造は次の節で述べる.
+\cs{jfont} 命令の呼び出しの際には,どのJFMを用いるのかを以下のキーで
+指定する必要がある:
 %</ja>
 
-\begin{lstlisting}[numbers=left]
-function (<table> jfont_info, <number> font_number)
-  return <table> new_jfont_info
-end
-\end{lstlisting}
 
+\begin{table}[t]
+%<en>\caption{Differences between horizontal JFMs shipped with \LuaTeX-ja}
+%<ja>\caption{\LuaTeX-ja に同梱されている横組用JFMの違い}
+%<en>\medskip
+\label{tab-difjfm}
+\ltjsetparameter{jacharrange={+3}}
+\centering\small
+\def\r#1#2{%
+  \hbox{\Large\vrule
+  \parbox[b]{7\zw}{%
+    \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+    ◆◆◆◆◆◆◆
+    ある日モモちゃんがお使いで迷子になって泣きました.
+  }\vrule}}
+\def\s#1#2{%
+  \Large
+  \parbox[b]{7\zw}{%
+    \addjfontfeatures{YokoFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+    ちょっと!何
+  }}
+\def\t#1#2#3{\hbox to 0pt{\hss%
+  \setbox0=\hbox{\addjfontfeatures{YokoFeatures={JFM=#1}}\huge #3}%
+  \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0
+  \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt
+  \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+  \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+  \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}}
+{\Large\tabcolsep0pt
+\begin{tabular}{m{8\zw}m{8\zw}m{8\zw}}
+\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{jis}{black}&
+\leavevmode\hbox to 0pt{\r{jis}{black}\hss}\r{min}{red}&
+\leavevmode\hbox to 0pt{\r{ujis}{blue}\hss}\r{min}{red}\\
+\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{jis}{black}&
+\leavevmode\hbox to 0pt{\s{jis}{black}\hss}\s{min}{red}&
+\leavevmode\hbox to 0pt{\s{ujis}{blue}\hss}\s{min}{red}\\
+\leavevmode\qquad\t{ujis}{blue}{漢}\t{jis}{black}{漢}\qquad
+           \t{ujis}{blue}{っ}\t{jis}{black}{っ}&
+\leavevmode\qquad\t{jis}{black}{漢}\t{min}{red}{漢}\qquad
+           \t{jis}{black}{っ}\t{min}{red}{っ}&
+\leavevmode\qquad\t{ujis}{blue}{漢}\t{min}{red}{漢}\qquad
+           \t{ujis}{blue}{っ}\t{min}{red}{っ}\\
+\end{tabular}\par}
+
+(\textcolor{blue}{Blue: \texttt{jfm-ujis.lua}},
+\textcolor{black}{Black: \texttt{jfm-jis.lua}},
+\textcolor{red}{Red: \texttt{jfm-min.lua}})
+\ltjsetparameter{jacharrange={-3}}
+\end{table}
+
+\begin{cslist}
+\item[jfm=<name>]
 %<*en>
-You may assume that \verb+jfont_info+ has the following fields:
+Specify the name of (horizontal) JFM.
+If specified JFM has not been loaded, \LuaTeX-ja search and load
+a file named \texttt{jfm-<name>.lua}.
+
+The following JFMs are shipped with \LuaTeX-ja:
 %</en>
 %<*ja>
-\verb+jfont_info+ は以下のフィールドを持つ:
+用いる(横組用)JFMの名前を指定する.もし以前に指定されたJFMが読み込まれていなければ,
+\texttt{jfm-<name>.lua}を読み込む.以下の横組用JFMが\LuaTeX-jaには同梱されている:
 %</ja>
 \begin{description}
-\item[\tt jfm]
-%<en>The index number of JFM.
-%<ja>JFMのインデックス番号.
-
-\item[\tt size]
-%<en>Font size in a scaled point (${}=2^{-16}\,\textrm{pt}$).
-%<ja>スケールド・ポイント(${}=2^{-16}\,\textrm{pt}$)を単位としたフォントのサイズ.
-
-\item[\tt var]
-%<en>The value specified in \texttt{jfmvar=...} at a call of \verb+\jfont+.
-%<ja>\verb+\jfont+ の呼び出しの際に\texttt{jfmvar=...}で指定された値.
-\end{description}
-
 %<*en>
-The returned table \verb+new_jfont_info+ also should include these three fields.
-The \verb+font_number+ is a font number.
+\item[\tt jfm-ujis.lua] A standard JFM in \LuaTeX-ja. This JFM is
+  based on \verb+upnmlminr-h.tfm+, a metric for UTF/OTF package that
+  is used in \upTeX. When you use the \Pkg{luatexja-otf} package, you should use this JFM.
 %</en>
 %<*ja>
-戻り値の \verb+new_jfont_info+ テーブルもこれら3つのフィールドを含まなければならない.
-\verb+font_number+ はフォント番号である.
+\item[\tt jfm-ujis.lua] \LuaTeX-jaの標準JFMである.このJFMは\upTeX で
+  用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-h.tfm+ を
+  元にしている.\Pkg{luatexja-otf}パッケージを使うときはこのJFMを指定するべきである.
 %</ja>
-
 %<*en>
-A good example of this and the next callbacks is the \Pkg{luatexja-otf}
-            package, supporting \verb+"AJ1-xxx"+ form for Adobe-Japan1
-            CID characters in a JFM. This callback doesn't replace any
-            code of \LuaTeX-ja.
+\item[\tt jfm-jis.lua] A counterpart for \verb+jis.tfm+, ``JIS font
+  metric'' which is widely used in \pTeX. A major difference between
+  \texttt{jfm-ujis.lua} and this \texttt{jfm-jis.lua} is that
+  most characters under \texttt{jfm-ujis.lua} are square-shaped,
+  while that under \texttt{jfm-jis.lua} are horizontal
+  rectangles.
 %</en>
 %<*ja>
-これと次のコールバックの良い使用例は\Pkg{luatexja-otf}パッケージであり,
-JFM中でAdobe-Japan1 CIDの文字を \verb+"AJ1-xxx"+ の形で指定するために
-用いられている.
-このコールバックは\LuaTeX-jaのコードを書き換えない.
+\item[\tt jfm-jis.lua] \pTeX で広く用いられている「JISフォントメトリック」
+  \verb+jis.tfm+ に相当するJFMである.\texttt{jfm-ujis.lua} とこの
+  \texttt{jfm-jis.lua} の主な違いは,\texttt{jfm-ujis.lua} ではほとんどの文字が
+  正方形状であるのに対し,\texttt{jfm-jis.lua} では横長の長方形状であることと,
+  \texttt{jfm-ujis.lua} では「?」「!」の直後に半角空白が挿入されることである.
 %</ja>
-
-%<en>\item[\texttt{luatexja.find\_char\_class} callback]
-%<ja>\item[\texttt{luatexja.find\_char\_class}コールバック]
 %<*en>
-This callback is called just when \LuaTeX-ja is trying to determine which
-            character class a character \verb+chr_code+ belongs.
-A function used in this callback should be in the following form:
+\item[\tt jfm-min.lua] A counterpart for \verb+min10.tfm+, which is one
+  of the default Japanese font metric shipped with \pTeX.
 %</en>
 %<*ja>
-このコールバックは\LuaTeX-jaが \verb+chr_code+ の文字がどの文字クラスに
-属するかを決定しようとする際に呼び出される.
-このコールバックで呼び出される関数は次の形をしていなければならない:
+\item[\tt jfm-min.lua] \pTeX に同梱されているデフォルトの和文用TFM
+(\verb+min10.tfm+)に相当し,行末で文字が揃うようにするために「っ」など一部の文字幅が変わっ
+          ている.\verb+min10.tfm+ については\cite{min10}が詳しい.
 %</ja>
-\begin{lstlisting}[numbers=left]
-function (<number> char_class, <table> jfont_info, <number> chr_code)
-  if char_class~=0 then return char_class
-  else
-    ....
-    return (<number> new_char_class or 0)
-  end
-end
-\end{lstlisting}
-
+\end{description}
 %<*en>
-The argument \verb+char_class+ is the result of \LuaTeX-ja's default
-            routine or previous function calls in this callback, hence
-            this argument may not be 0. Moreover, the returned
-            \verb+new_char_class+ should be as same as \verb+char_class+ when \verb+char_class+
-            is not~0, otherwise you will overwrite the \LuaTeX-ja's
-            default routine.
+The difference among these three~JFMs is  shown in Table~\ref{tab-difjfm}.
 %</en>
 %<*ja>
-引数 \verb+char_class+ は\LuaTeX-jaのデフォルトルーチンか,このコールバックの
-直前の関数呼び出しの結果を含んでおり,したがってこの値は0ではないかもしれない.
-さらに,戻り値の \verb+new_char_class+ は \verb+char_class+ が非零のときには
-\verb+char_class+ の値と同じであるべきで,そうでないときは\LuaTeX-jaの
-デフォルトルーチンを書き換えることになる.
+これら3つのJFMの違いは表\ref{tab-difjfm}に示した.表中の文例の一部には,
+\cite{min10}の図3,~4のものを用いた.
 %</ja>
 
+\begin{figure}
+\begin{LTXexample}[width=0.3\textwidth]
+\ltjsetparameter{differentjfm=both}
+\jfont\F=file:KozMinPr6N-Regular.otf:jfm=ujis
+\jfont\G=file:KozGoPr6N-Medium.otf:jfm=ujis
+\jfont\H=file:KozGoPr6N-Medium.otf:jfm=ujis;jfmvar=hoge
+\F ){\G 【】}( % halfwidth space
+   ){\H 『』}( % fullwidth space
+
+ほげ,{\G 「ほげ」}(ほげ)\par
+ほげ,{\H 「ほげ」}(ほげ)% pTeX-like
+
+\ltjsetparameter{differentjfm=paverage}
+\end{LTXexample}
+\caption{Example of \texttt{jfmvar} key}
+\label{fig:jfmvar}
+\end{figure}
+
 %<*en>
-This callback doesn't replace any code of \LuaTeX-ja.
+\item[jfmvar=<string>]
+Sometimes there is a need that \ldots.
 %</en>
 %<*ja>
-このコールバックは\LuaTeX-jaのコードを書き換えない.
+\item[jfmvar=<string>]
+標準では,JFMとサイズが同じで,
+  実フォントだけが異なる2つの和文フォントは「区別されない」.例えば
+図\ref{fig:jfmvar}において,最初の「)」と「【」の実フォントは異なるが,
+JFMもサイズも同じなので,普通に「)【」と入力した時と同じように半角空きとなる.
+
+しかし,JFMとサイズが同じであっても,\texttt{jfmvar} キーの異なる
+2つの和文フォント,例えば図\ref{fig:jfmvar}で言う \cs{F} と \cs{H},
+は「区別される」.異なる和文フォントに異なる \texttt{jfmvar} キーを割り当て,
+かつ\Param{differentjfm}パラメータを \texttt{both} に設定すれば,
+\pTeX と似た状況で組版されることになる.
 %</ja>
+\end{cslist}
 
-%<en>\item[\texttt{luatexja.set\_width} callback]
-%<ja>\item[\texttt{luatexja.set\_width}コールバック]
+\begin{figure}
+\begin{LTXexample}[pos=t]
+\newcommand\test{\vrule ダイナミックダイクマ\vrule\\}
+\jfont\KMFW = KozMinPr6N-Regular:jfm=prop;-kern at 17pt
+\jfont\KMFK = KozMinPr6N-Regular:jfm=prop at 17pt % kern is activated
+\jfont\KMPW = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;-kern at 17pt
+\jfont\KMPK = KozMinPr6N-Regular:jfm=prop;script=dflt;+pwid;+kern at 17pt
+\begin{multicols}{2}
+\ltjsetparameter{kanjiskip=0pt}
+{\KMFW\test \KMFK\test \KMPW\test \KMPK\test}
+
+\ltjsetparameter{kanjiskip=3pt}
+{\KMFW\test \KMFK\test \KMPW\test \KMPK\test}
+\end{multicols}
+\end{LTXexample}
+\caption{Kerning information and \Param{kanjiskip}}
+\label{fig:kern-jfm}
+\end{figure}
+
+%<en>\paragraph{Using kerning information in a font}
+%<ja>\paragraph{ペアカーニング情報の使用}
+\label{para-kern}
 %<*en>
-This callback is called when \LuaTeX-ja is trying to encapsule a
-            \textbf{JAchar} \textit{glyph\_node}, to adjust its
-            dimension and position.
+Some fonts have information for inter-glyph spacing.
+This version of \LuaTeX-ja treats kerning spaces like an italic correction;
+any glue and/or kern from the JFM and a kerning space can coexist.
+See Figure~\ref{fig:kern-jfm} for detail.
+
+Note that in \cs{setmainjfont} etc.\ which are provided by \Pkg{luatexja-fontspec}
+package, kerning option is set \emph{off} (\texttt{Kerning=Off}) by default,
+because of the compatibility with previous versions of \LuaTeX-ja.
 %</en>
 %<*ja>
-このコールバックは\LuaTeX-jaが\textbf{JAchar}の寸法と位置を調節するために
-その\textit{glyph\_node}をカプセル化しようとする際に呼び出される.
-%</ja>
-\begin{lstlisting}[numbers=left]
-function (<table> shift_info, <table> jfont_info, <number> char_class)
-  return <table> new_shift_info
-end
+いくつかのフォントはグリフ間のスペースについての情報を持っている.
+このカーニング情報は以前の\LuaTeX-ja とはあまり相性が良くなかったが,
+本バージョンではカーニングによる空白はイタリック補正と同様に扱うことになっている.
+つまり,カーニング由来の空白とJFM由来のグルー・カーンは同時に入りうる.
+図\ref{fig:kern-jfm}を参照.
+\begin{itemize}
+ \item \emph{\cs{jfont} や,
+NFSS2用の命令(\ref{ssec-chgfnt}節,\ref{ssec-nfsspat}節)における指定では
+カーニング情報は標準で使用する}ことになっているようである.
+言い換えれば,カーニング情報を使用しない設定にするには,面倒でも
+\begin{lstlisting}
+\jfont\hoge=KozMinPr6N-Regular:jfm=ujis;-kern at 3.5mm
+\DeclareFontShape{JY3}{fuga}{m}{n} {<-> s*KozMinPr6N-Regular:jfm=ujis;-kern}{}
 \end{lstlisting}
+のように,\texttt{-kern} という指定を自分で追加しなければいけない.
+ \item
+一方,\emph{\Pkg{luatexja-fontspec} の提供する \cs{setmainjfont}\
+などの命令の標準設定ではカーニング情報は使用しない}(\texttt{Kerning=Off})
+ことになっている.これは以前のバージョンの\LuaTeX-jaとの互換性のためである.
+\end{itemize}
+%</ja>
 
-%<*en>
-The argument \verb+shift_info+ and the returned \verb+new_shift_info+ have
-\texttt{down} and \texttt{left} fields, which are the amount of shifting
-            down/left the character in a scaled-point.
+%<*ja>
+\paragraph{\texttt{extend}と\texttt{slant}}
+OpenType font featureと見かけ上同じような形式で指定できるものに,
+\begin{description}
+\item[\texttt{extend=}<extend>] 横方向に<extend>倍拡大する.
+\item[\texttt{slant=}<slant>] <slant>に指定された割合だけ傾ける.
+\end{description}
+の2つがある.
+\texttt{extend}や\texttt{slant}を指定した場合は,それに応じたJFMを指定すべきである%
+\footnote{\LuaTeX-jaでは,これらに対するJFMを特に提供することはしない予定である.}.
+例えば,次の例では無理やり通常のJFMを使っているために,文字間隔やイタリック補正量が
+正しくない:
+%</ja>
+%<*en>
+\paragraph{\texttt{extend} and \texttt{slant}}
+The following setting can be specified as OpenType font features:
+\begin{cslist}[style=standard]
+\item[\texttt{extend=}<extend>] expand the font horizontally by <extend>.
+\item[\texttt{slant=}<slant>] slant the font.
+\end{cslist}
+Note that \LuaTeX-ja doesn't adjust JFMs by these \texttt{extend} and \texttt{slant}
+settings; you have to write new JFMs on purpose.
+For example, the following example uses the standard JFM \texttt{jfm-ujis.lua}, hence
+letter-spacing and the width of italic correction are not correct:
 %</en>
+\begin{LTXexample}[width=0.3\textwidth]
+\jfont\E=KozMinPr6N-Regular:extend=1.5;jfm=ujis;-kern
+\E あいうえお
+
+\jfont\S=KozMinPr6N-Regular:slant=1;jfm=ujis;-kern
+\S あいう\/ABC
+\end{LTXexample}
+
 %<*ja>
-引数 \verb+shift_info+ と戻り値の \verb+new_shift_info+ は
-\texttt{down}と\texttt{left}のフィールドを持ち,これらの値は
-文字の下/左へのシフト量(スケールド・ポイント単位)である.
+\paragraph{\texttt{ltjksp} 指定}
+\label{pg:ltjksp}
+\LuaTeX-ja標準では,
+JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ 
+\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の使用によって,
+「JFM由来のグルーの他に,\Param{kanjiskip}の自然長/伸び量/縮み量の一部が
+同じ場所に挿入される」という状況が起こりうる.
+この機能を無効化し,20150922.0版以前と同じような組版を得るためには
+他のOpenType機能と同じように\ \texttt{-ltjksp}\ 指定を行えば良い.
+\begin{LTXexample}[width=16\zw]
+\leavevmode
+\ltjsetparameter{kanjiskip=0pt plus 3\zw}
+\vrule\hbox to 15\zw{あ「い」う,えお}\vrule
+
+\jfont\G=file:KozMinPr6N-Regular.otf%
+  :jfm=ujis;-ltjksp at 9.2487pt
+\G\leavevmode%
+\vrule\hbox to 15\zw{あ「い」う,えお}\vrule
+\end{LTXexample}
+なお,
+\begin{lstlisting}
+ \jfont\G=file:KozMinPr6N-Regular.otf:jfm=ujis;-ltjksp;+ltjksp at 9.2487pt
+\end{lstlisting}
+のように \texttt{+ltjksp} 指定を行った場合は,\texttt{kanjiskip\_natural} など
+3キーは再び有効化される.\texttt{-ltjksp}, \texttt{+ltjksp} を複数回指定した場合は,
+最後に指定したものが有効となる.
 %</ja>
 
+
+%<en>\subsection{\cs{tfont}}
+%<ja>\subsection{\cs{tfont} 命令}
+
+
+\begin{table}[t]
+%<en>\caption{Differences between vertical JFMs shipped with \LuaTeX-ja}
+%<ja>\caption{\LuaTeX-ja に同梱されている縦組用 JFM の違い}
+%<en>\medskip
+\label{tab-difjfm-tate}
+\catcode`\<=12\catcode`\>=12
+\ltjsetparameter{jacharrange={+3}}
+\small
+
+\def\r#1#2{%
+  \hbox{\tate\Large\vrule
+  \parbox{7\zw}{%
+    \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+    ◆◆◆◆◆◆◆
+    ある日モモちゃんがお使いで迷子になって泣きました.
+  }\vrule}}
+\def\s#1#2{%
+  \hbox{\tate\Large
+  \parbox{7\zw}{%
+    \addjfontfeatures{TateFeatures={Opacity=0.5, Color=#2, JFM=#1}}\noindent
+    ちょっと!何
+  }}}
+\def\t#1#2#3{\hbox to 0pt{\hss%
+  \setbox0=\hbox{\addjfontfeatures{TateFeatures={JFM=#1}}\huge #3}%
+  \textcolor{#2}{\transparent{0.5}\vrule width 0.4pt height\ht0 depth\dp0}\kern-.2pt\copy0
+  \textcolor{#2}{\transparent{0.5}\kern-\wd0\vrule width\wd0height .2pt depth .2pt
+  \kern-\wd0\raise\ht0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+  \kern-\wd0\lower\dp0\hbox{\vrule width\wd0height .2pt depth .2pt}%
+  \kern-.2pt\vrule width 0.4pt height\ht0 depth \dp0}\hss}}
+
+\begin{minipage}{.7\textwidth}
+\centering
+\leavevmode\hbox to 0pt{\r{ujisv}{blue}\hss}\r{tmin}{red}\quad
+\leavevmode\hbox to 0pt{\s{ujisv}{blue}\hss}\s{tmin}{red}\quad
+\raise4\zw\hbox{\tate\Large\t{ujisv}{black}{漢}\t{tmin}{red}{漢}\qquad
+           \t{ujisv}{black}{っ}\t{tmin}{red}{っ}}
+\end{minipage}%
+\begin{minipage}{.3\textwidth}
+\textcolor{blue}{Blue: \texttt{jfm-ujisv.lua}}\\
+\textcolor{red}{Red: \texttt{jfm-tmin.lua}}
+\end{minipage}
+\ltjsetparameter{jacharrange={-3}}
+\end{table}
+
 %<*en>
-A good example is \Pkg{test/valign.lua}.
-After loading this file, the vertical position of glyphs is automatically
-adjusted; the ratio $(\hbox{height}:\hbox{depth})$ of glyphs is adjusted
-to be that of letters in the character class~0. For example, suppose that
-\begin{itemize}
-\item The setting of the JFM: $(\hbox{height})=88x$, $(\hbox{depth})=12x$
-  (the standard values of Japanese OpenType fonts);
-\item The value of the real font: $(\hbox{height})=28y$, $(\hbox{depth})=5y$
-  (the standard values of Japanese TrueType fonts).
-\end{itemize}
-Then, the position of glyphs is shifted up by
-\[
- \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y.
-\]
+...
 %</en>
 %<*ja>
-良い例が\Pkg{test/valign.lua}である.このファイルが読み込まれた状態では
-            JFM内で規定された文字クラス0の文字における$(\hbox{高
-            さ}):(\hbox{深さ})$の比になるように,実際のフォントの出力上
-            下位置が自動調整される.例えば,
+\cs{tfont} はフォントを縦組用の和文フォントとして読み込む命令であり
+\cs{tfont} の文法は \cs{jfont} と同じである.
+\cs{tfont} で定義された縦組用和文フォントは,
+以下の点が \cs{jfont} による横組用和文フォントとは異なる:
 \begin{itemize}
-\item JFM側の設定:$(\hbox{高さ})=88x$, $(\hbox{深さ})=12x$%
-(和文OpenTypeフォントの標準値)
-\item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値)
+ \item 自動的に \texttt{vert}, \texttt{vrt2} の両OpenType featureが有効化される.
+但し,以下の例の3行目に示すように,明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の
+有効・無効を指定した場合は別である.
+\begin{lstlisting}
+\tfont\S=file:KozMinPr6N-Regular.otf:jfm=ujisv
+    % vert and vrt2 are automatically activated
+\tfont\T=file:KozMinPr6N-Regular.otf:jfm=ujisv;-vert % vert and vrt2 are not activated
+\end{lstlisting}
+ \item \ref{ssec-math}節で述べる,数式中の和文フォントには縦組用和文フォントは指定できない.
+ \item \texttt{jfm=<name>}\ の部分には縦組用JFMを指定する.
+以下の縦組用JFMが\LuaTeX-jaには同梱されており,違いを表\ref{tab-difjfm-tate}に示した.
+\begin{description}
+\item[\tt jfm-ujisv.lua] \LuaTeX-jaの標準縦組用JFMである.このJFMは\upTeX で
+  用いられるUTF/OTFパッケージ用の和文用TFMである \verb+upnmlminr-v.tfm+ を
+  元にしている.
+\item[\tt jfm-tmin.lua] \pTeX に同梱されているデフォルトの和文用縦組TFM
+  である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に
+  「っ」など一部の文字幅が狭められている.
+\end{description}
 \end{itemize}
-となっていたとする.すると,実際の文字の出力位置は,
-\[
- \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y.
-\]
-だけ上にずらされることになる.
-%</ja>
-\end{list}
-
 
+なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン
+ト・縦組用和文フォントの定義が可能であったが,\LuaTeX-jaではそうでないので注意.
+%</ja>
 
-%<en>\section{Parameters}
-%<ja>\section{パラメータ}
-%<en>\subsection{\texttt{\char92 ltjsetparameter} primitive}
-%<ja>\subsection{\texttt{\char92 ltjsetparameter}プリミティブ}
+%<en>\subsection{Prefix \texttt{psft}}
+%<ja>\subsection{\texttt{psft}プリフィックス}
+\label{ssec-psft}
+%<*en>
+Besides ``\texttt{file:}''\ and ``\texttt{name:}''\ prefixes which
+are introduced in the \Pkg{luaotfload} package,
+\LuaTeX-ja adds ``\texttt{psft:}''\ prefix in \cs{jfont} (and~\cs{font}),
+to specify a ``name-only'' Japanese font which
+will not be embedded to PDF.
+Note that these non-embedded fonts under current \LuaTeX\ has Identity-H encoding,
+and this violates the standard ISO32000-1:2008~(\cite{pdfstd}).
+
+\emph{OpenType font features, such as ``{\tt +jp90}'',
+have no meaning in name-only fonts using ``{\tt psft:}''\ prefix,
+because we can't expect what fonts are actually used by the PDF reader.}
+Note that \texttt{extend}~and~\texttt{slant} settings (see~above) are supported
+with \texttt{psft} prefix, because they are only simple linear transformations.
+%</en>
+%<*ja>
+\Pkg{luaotfload}で使用可能になった
+\texttt{file:}\ と \texttt{name:}\ のプリフィックスに加えて,
+\cs{jfont}(と \cs{font} プリミティブ)では
+\texttt{psft:}プリフィックスを用いることができる.
+このプリフィックスを用いることで,PDFには埋め込まれない「名前だけの」
+和文フォントを指定することができる.
+なお,現行の\LuaTeX で非埋め込みフォントを作成するとPDF内でのエンコーディングが
+Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準拠になってしまう
+ので注意してほしい.
+
+\emph{\texttt{psft} プリフィックスの下では
+\texttt{+jp90} などのOpenType font featureの効力はない.
+非埋込フォントをPDFに使用すると,実際にどのようなフォントが
+表示に用いられるか予測できないからである.}\
+\texttt{extend} と \texttt{slant} 指定は単なる変形のため
+\texttt{psft} プリフィックスでも使用可能である.
+%</ja>
+
+%<en>\paragraph{\texttt{cid} key}
+%<ja>\paragraph{\texttt{cid}キー}
+\label{para-cid}
 
 %<*en>
-As noted before, \verb+\ltjsetparameter+ and \verb+\ltjgetparameter+ are
-primitives for accessing most parameters of \LuaTeX-ja. One of the main
-reason that \LuaTeX-ja didn't adopted the syntax similar to that of \pTeX\
-(\textit{e.g.},~\verb+\prebreakpenalty`)=10000+)
-is the position of \verb+hpack_filter+ callback in the source
-of \LuaTeX, see Section~\ref{sec-para}.
+The default font defined by using \texttt{psft:} prefix is for Japanese typesetting;
+it is Adobe-Japan1-6 CID-keyed font.
+One can specify \texttt{cid} key to use other CID-keyed non-embedded fonts
+for Chinese or Korean typesetting.
 %</en>
 %<*ja>
-先に述べたように,\verb+\ltjsetparameter+ と \verb+\ltjgetparameter+ は
-\LuaTeX-jaのほとんどのパラメータにアクセスするためのプリミティブである.
-\LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を
-採用しない理由の一つは,\LuaTeX のソースにおける \verb+\hpack_filter+
-コールバックの位置にある.\ref{sec-para} 節を参照.
-%</ja>
+標準で\texttt{psft:}プリフィックスで定義されるフォントは日本語用のもので
+あり,Adobe-Japan1-6のCIDに対応したものとなる.しかし,\LuaTeX-jaは中国語
+の組版にも威力を発揮することが分かり,日本語フォントでない非埋込フォント
+の対応も必要となった.そのために追加されたのが\texttt{cid}キーである.
 
+\texttt{cid}キーに値を指定すると,そのCIDを持った非埋込フォントを定義することができる:
+%</ja>
+\begin{lstlisting}[numbers=left]
+\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-6;jfm=jis}     % Japanese
+\jfont\testD={psft:Ryumin-Light:jfm=jis}                        % default value is Adobe-Japan1-6
+\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-6;jfm=jis} % Traditional Chinese
+\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis}              % Simplified Chinese
+\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis}           % Korean
+\end{lstlisting}
 %<*en>
-\verb+\ltjsetparameter+ and \verb+\ltjglobalsetparameter+ are primitives
-for assigning parameters. These take one argument which is a
-\texttt{<key>=<value>} list. Allowed keys are described in the next
-subsection.
-The difference between
-\verb+\ltjsetparameter+ and \verb+\ltjglobalsetparameter+ is only the
-scope of assignment;
-\verb+\ltjsetparameter+ does a local assignment and
-\verb+\ltjglobalsetparameter+ does a global one.
-They also obey the value of \verb+\globaldefs+,
-like other assignment.
+Note that the code above specifies \texttt{jfm-jis.lua}, which is for Japanese fonts,
+as JFM for Chinese and Korean fonts.
 %</en>
 %<*ja>
-\verb+\ltjsetparameter+ と \verb+\ltjglobalsetparameter+ はパラメータを
-指定するためのプリミティブである.これらは\texttt{<key>=<value>}のリストを
-引数としてとる.許されるキーは次の節に記述する.
-\verb+\ltjsetparameter+ と \verb+\ltjglobalsetparameter+ の違いはスコープの
-違いのみである.
-\verb+\ltjsetparameter+ はローカルな指定,\verb+\ltjglobalsetparameter+ は
-グローバルな指定を行う.
-これらは他のパラメータ指定と同様に \verb+\globaldefs+ の値に従う.
+上のコードでは中国語・韓国語用フォントに対してもJFMに
+日本語用の\texttt{jfm-jis.lua}を指定しているので注意されたい.
 %</ja>
 
 %<*en>
-\verb+\ltjgetparameter+ is the primitive for acquiring parameters. It
-always takes a parameter name as first argument, and also takes the
-additional argument---a character code, for example---in some cases.
+At present, \LuaTeX-ja supports only 4 values written in the sample code above.
+Specifying other values, e.g.,
 %</en>
 %<*ja>
-\verb+\ltjgetparameter+ はパラメータの値を取得するためのプリミティブであり,
-常にパラメータの名前を第一引数にとる.
-そして,いくつかの場合には加えてさらに引数(例えば文字コード)をとる.
+今のところ,\LuaTeX-jaは上のサンプルコード中に書いた4つの値しかサポートしていない.
 %</ja>
-\begin{LTXexample}
-\ltjgetparameter{differentjfm},
-\ltjgetparameter{autospacing},
-\ltjgetparameter{prebreakpenalty}{`)}.
-\end{LTXexample}
+\begin{lstlisting}
+\jfont\test={psft:Ryumin-Light:cid=Adobe-Japan2;jfm=jis}
+\end{lstlisting}
 %<*en>
-\emph{The return value of\/ {\normalfont\tt\char92ltjgetparameter} is
-always a string}. This is outputted by \texttt{tex.write()}, so any
-character other than space~`\texttt{\char32}'~(U+0020) has the category code
-12~(other), while the space has 10~(space).
+produces the following error:
 %</en>
 %<*ja>
-\textbf{{\normalfont\tt\char92ltjgetparameter}の戻り値は常に文字列である.}
-これは\texttt{tex.write()}によって出力しているためで,スペース`\texttt{\char32}'~(U+0020)を除いた文字のカテゴリーコードは全て12~(other)となる.
-一方,スペースのカテゴリーコードは10~(space)である.
+のようにそれら以外の値を指定すると,エラーが発生する:
 %</ja>
+\begin{lstlisting}[numbers=left]
+! Package luatexja Error: bad cid key `Adobe-Japan2'.
+
+See the luatexja package documentation for explanation.
+Type  H <return>  for immediate help.
+<to be read again>
+                   \par
+l.78
+
+? h
+I couldn't find any non-embedded font information for the CID
+`Adobe-Japan2'. For now, I'll use `Adobe-Japan1-6'.
+Please contact the LuaTeX-ja project team.
+?
+\end{lstlisting}
 
-%<en>\subsection{List of Parameters}
-%<ja>\subsection{パラメータ一覧}
-\label{ssec-param}
-
+%<en>\subsection{Structure of a JFM file}
+%<ja>\subsection{JFMファイルの構造}
+\label{ssec-jfm-str}
+%<en>A JFM file is a Lua script which has only one function call:
+%<ja>JFMファイルはただ一つの関数呼び出しを含むLuaスクリプトである:
+\begin{lstlisting}
+luatexja.jfont.define_jfm { ... }
+\end{lstlisting}
 %<*en>
-The following is the list of parameters which can be specified by the
-\verb+\ltjsetparameter+ command. [\verb+\cs+] indicates the counterpart
-in \pTeX, and symbols beside each parameter has the following meaning:
+Real data are stored in the table which indicated above by
+\verb+{ ... }+.  So, the rest of this subsection are devoted to describe the
+structure of this table.  Note that all lengths in a JFM file are
+floating-point numbers in design-size unit.
 %</en>
 %<*ja>
-以下は \verb+\ltjsetparameter+ に指定することができるパラメータの一覧である.
-[\verb+\cs+]は\pTeX における対応物を示す.
-また,それぞれのパラメータの右上にある記号には次の意味がある:
+実際のデータは上で \verb+{ ... }+ で示されたテーブルの中に格納されている.
+以下ではこのテーブルの構造について記す.
+なお,JFMファイル中の長さは全てdesign-sizeを単位とする浮動小数点数であることに
+注意する.
 %</ja>
-\begin{itemize}
+
+\begin{cslist}[style=standard]
+
+\item[dir=<direction>]
+%<en>(required)
+%<ja>(必須)
+
 %<*en>
-\item No mark: values at the end of the paragraph or the hbox are
-      adopted in the whole paragraph/hbox.
+The direction of JFM. \texttt{'yoko'}~(horizontal)
+or \texttt{'tate'}~(vertical) are supported.
 %</en>
 %<*ja>
-\item 記号なし:段落や水平ボックスの終端での値がその段落/水平ボックス全体で用いられる.
+JFMの書字方向.\texttt{'yoko'}(横組)と \texttt{'tate'}(縦組)がサポートされる.
 %</ja>
-%<*en>
-\item `\ast' : local parameters, which can change everywhere inside a paragraph/hbox.
-%</en>
+
+\item[zw=<length>]
+%<en>(required)
+%<ja>(必須)
+
+%<en>The amount of the length of the ``full-width''.
 %<*ja>
-\item `\ast':ローカルなパラメータであり,段落/水平ボックス内のどこででも値を変えることができる.
+「全角幅」の長さ.この量が \cs{zw} の長さとなる.\pTeX では
+「全角幅」\texttt{1zw} は「文字クラス0の文字」の幅と決められていたが,
+\LuaTeX-jaではここで指定する.
 %</ja>
-%<*en>
-\item `\dagger': assignments are always global.
-%</en>
+
+\item[zh=<length>]
+%<en>(required)
+%<ja>(必須)
+
+%<en>The amount of the ``full-height'' (height + depth).
 %<*ja>
-\item `\dagger':指定は常にグローバルになる.
+「全角高さ」(height + depth)の長さ.通常は全角幅と同じ長さになるだろう.
+\pTeX では 「全角高さ」\texttt{1zh} は「文字クラス0の文字」の高さと深さの和と決められていたが,
+\LuaTeX-jaではここで指定する.
 %</ja>
-\end{itemize}
 
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item[\Param{jcharwidowpenalty}\,=<penalty>] [\verb+\jcharwidowpenalty+]
+\item[kanjiskip=\{<natural>, <stretch>, <shrink>\}]
+%<en>(optional)
+%<ja>(任意)
+
 %<*en>
-Penalty value for suppressing orphans. This penalty is inserted just
-            after the last \textbf{JAchar} which is not regarded as a
-            (Japanese) punctuation mark.
+This field specifies the ``ideal'' amount of \Param{kanjiskip}. As noted
+            in Subsection~\ref{subs-kskip}, if the parameter
+            \Param{kanjiskip} is \cs{maxdimen}, the value specified
+            in this field is actually used (if this field is not specified in
+            JFM, it is regarded as 0\,pt). Note that <stretch> and <shrink>
+            fields are in design-size unit too.
 %</en>
 %<*ja>
-パラグラフの最後の字が孤立して改行されるのを防ぐためのペナルティの値.
-このペナルティは(日本語の)句読点として扱われない最後の\textbf{JAchar}の直後に
-挿入される.
+理想的な\Param{kanjiskip}の量を指定する.\ref{subs-kskip}節で述べたように,
+もし\Param{kanjiskip}が \cs{maxdimen} の値ならば,このフィールドで指定された
+値が実際には用いられる(指定なしは0\,ptとして扱われる).<stretch>と<shrink>のフィールドもdesign-size
+が単位であることに注意せよ.
 %</ja>
 
-\item[\Param{kcatcode}\,=\{<chr\_code>,<natural number>\}]\
+\item[xkanjiskip=\{<natural>, <stretch>, <shrink>\}]
+%<en>(optional)
+%<ja>(任意)
+
 %<*en>
-An additional attributes which each character whose character code is <chr\_code> has.
-At the present version, the lowermost bit of <natural number> indicates
-            whether the character is considered as a punctuation mark
-            (see the description of \Param{jcharwidowpenalty} above).
+Like the \texttt{kanjiskip} field, this field specifies the ``ideal''
+            amount of \Param{xkanjiskip}.
 %</en>
 %<*ja>
-文字コードが<chr\_code>の文字が持つ付加的な属性値(attribute).
-現在のバージョンでは,<natural number>の最下位ビットが,その文字が句読点と
-みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照).
+\texttt{kanjiskip}フィールドと同様に,\Param{xkanjiskip}の理想的な量を
+指定する.
 %</ja>
+\end{cslist}
 
-\item[\Param{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]\
+%<*en>
+\paragraph{Character classes}
+Besides from above fields, a JFM file have several sub-tables those
+indices are natural numbers.  The table indexed by~$i\in\omega$ stores
+information of \emph{character class}~$i$. At least, the character class~0 is
+always present, so each JFM file must have a sub-table whose index is
+\texttt{[0]}.  Each sub-table (its numerical index is denoted by $i$) has
+the following fields:
+%</en>
 %<*ja>
-文字コード<chr\_code>の\textbf{JAchar}が行頭にくることを抑止するために,
-            この文字の前に挿入/追加されるペナルティの量を指定する.
-
-例えば閉じ括弧「〗」は絶対に行頭にきてはならないので,標準で読み込まれる
-            \texttt{luatexja-kinsoku.tex}において
-\begin{verbatim}
-\ltjsetparameter{prebreakpenalty={`〙,10000}}
-\end{verbatim}
-と,最大値の10000が指定されている.他にも,小書きのカナなど,絶対禁止とい
-            うわけではないができれば行頭にはきて欲しくない場合に,0と
-            10000の間の値を指定するのも有用であろう.
-\begin{verbatim}
-\ltjsetparameter{prebreakpenalty={`ゕ,150}}
-\end{verbatim}
+\paragraph{文字クラス}
+上記のフィールドに加えて,JFMファイルはそのインデックスが自然数であるいくつかの
+サブテーブルを持つ.インデックスが$i\in\omega$であるテーブルは\emph{文字クラス}$i$の
+情報を格納する.少なくとも,文字クラス0は常に存在するので,JFMファイルはインデックス
+が\texttt{[0]}のサブテーブルを持たなければならない.それぞれのサブテーブル
+(そのインデックスを$i$で表わす)は以下のフィールドを持つ:
 %</ja>
 
-\item[\Param{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\postbreakpenalty+]
-%<*ja>
-文字コード<chr\_code>の\textbf{JAchar}が行末にくることを抑止するために,
-            この文字の後に挿入/追加されるペナルティの量を指定する.
+\begin{cslist}[style=standard]
+\item[chars=\{<character>, ...\}]
+%<en>(required except character class~0)
+%<ja>(文字クラス0を除いて必須)
 
-\pTeX では,\verb+\prebreakpenalty+, \verb+\postbreakpenalty+において,
+%<*en>
+This field is a list of characters which are in this character
+            type~$i$. This field is optional if $i=0$, since all
+            \textbf{JAchar} which do not belong  any character classes other
+            than 0 are in the character class 0
+             (hence, the character class~0 contains most of
+            \textbf{JAchar}s). In the list, character(s) can be specified in the following form:
 \begin{itemize}
-\item 一つの文字に対して,pre, postどちらか一つしか指定することができなかっ
-      た(後から指定した方で上書きされる).
-\item pre, post合わせて256文字分の情報を格納することしかできなかった.
+\item a Unicode code point
+\item the character itself (as a Lua string, like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+})
+\item a string like \hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+} (the character followed by an asterisk)
+\item several ``imaginary'' characters (We will describe these later.)
+\end{itemize}
+%</en>
+%<*ja>
+このフィールドは文字クラス$i$に属する文字のリストである.このフィールドは$i=0$の
+場合には任意である(文字クラス0には,0以外の文字クラスに属するものを
+除いた全ての\textbf{JAchar}が属するから).このリスト中で文字を指定するには,以下の方法がある:
+\begin{itemize}
+\item Unicode におけるコード番号
+\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ'+}」のような,文字それ自体
+\item 「\hbox{\ltjsetparameter{autoxspacing=false}\verb+'あ*'+}」のような,文字それ自体の後にアスタリスクをつけたもの
+\item いくつかの「仮想的な文字」(後に説明する)
 \end{itemize}
-という制限があったが,\LuaTeX-jaではこれらの制限は解消されている.
 %</ja>
 
-\item[\Param{jatextfont}\,=\{<jfam>,<jfont\_cs>\}]
-%<en>[\verb+\textfont+ in \TeX]
-%<ja>[\TeX の \verb+\textfont+]
-\item[\Param{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}]
-%<en>[\verb+\scriptfont+ in \TeX]
-%<ja>[\TeX の \verb+\scriptfont+]
-\item[\Param{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}]
-%<en>[\verb+\scriptscriptfont+ in \TeX]
-%<ja>[\TeX の \verb+\scriptscriptfont+]
-\item[\Param{yjabaselineshift}\,=<dimen>$^\ast$]\
-\item[\Param{yalbaselineshift}\,=<dimen>$^\ast$] [\verb+\ybaselineshift+]
-
-\item[\Param{jaxspmode}\,=\{<chr\_code>,<mode>\}]
+\item[width=<length>, height=<length>, depth=<length>, italic=<length>]
+%<en>(required)
+%<ja>(必須)
 
 %<*en>
-Setting whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
-The followings are allowed for <mode>:
-%</en>
-%<*ja>
-文字コードが<chr\_code>の\textbf{JAchar}の前/後ろに\Param{xkanjiskip}の
-挿入を許すかどうかの設定.
-以下の<mode>が許される:
-%</ja>
-\begin{description}
-%<en>\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character.
-%<ja>\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される.
-%<en>\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after.
-%<ja>\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない.
-%<en>\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before.
-%<ja>\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない.
-%<en>\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both before the character and after the character. This is the default value.
-%<ja>\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である.
-\end{description}
-%<*en>
-This parameter is similar to the \verb+\inhibitxspcode+ primitive of \pTeX, but not compatible with \verb+\inhibitxspcode+.
+\begin{table}[t]
+ \centering
+\begin{tabular}{llr}
+\toprule
+Direction of JFM&\textbf{\texttt{'yoko'} (horizontal)}&\multicolumn{1}{l}{\textbf{\texttt{'tate'} (vertical)}}\\
+\midrule
+\texttt{width} field&the width of the ``real'' glyph&1.0~(full-width)\\
+\texttt{height} field&the height of the ``real'' glyph&0.5~(half-width)\\
+\texttt{depth} field&the depth of the ``real'' glyph&0.5~(half-width)\\
+\midrule
+\texttt{italic} field&\multicolumn{2}{c}{0.0}\\
+\bottomrule
+\end{tabular}
+\caption{Default values of \texttt{width} field and other fields}
+\label{tab-wid}
+\end{table}
+Specify the width of characters in character class~$i$, the height, the depth and
+the amount of italic correction. All characters in character class~$i$ are regarded that its width, height, and depth are
+as values of these fields. The default values are shown in Table~\ref{tab-wid}.
 %</en>
 %<*ja>
-このパラメータは\pTeX の \verb+\inhibitxspcode+ プリミティブと似ているが,
-互換性はない.
+\begin{table}[t]
+ \centering
+\begin{tabular}{llr}
+\toprule
+JFM書字方向&\emph{\texttt{'yoko'}(横組)}&\multicolumn{1}{l}{\emph{\texttt{'tate'}(縦組)}}\\
+\midrule
+\texttt{width}&「実際のグリフ」の幅&1.0(全角)\\
+\texttt{height}&「実際のグリフ」の高さ&0.5(二分)\\
+\texttt{depth}&「実際のグリフ」の深さ&0.5(二分)\\
+\midrule
+\texttt{italic}&\multicolumn{2}{c}{0.0}\\
+\bottomrule
+\end{tabular}
+\caption{\texttt{width} フィールド等の標準値}
+\label{tab-wid}
+\end{table}
+文字クラス$i$に属する文字の幅,高さ,深さ,イタリック補正の量を指定する.
+文字クラス$i$に属する全ての文字は,その幅,高さ,深さがこのフィールドで指定した
+値であるものとして扱われる.省略時や,数でない値を指定した時には表\nobreak\ref{tab-wid}に
+            示されている値を用いる.例えば,横組用JFMで \texttt{width} フィールドには数値以外の値を指
+            定した場合,文字の幅はその「実際の」グリフの幅となる.OpenTypeの \texttt{prop} featureと併用
+            すれば,これによってプロポーショナル組を行うことができる.
 %</ja>
 
-\item[\Param{alxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\xspcode+]
+\item[left=<length>, down=<length>, align=<align>]\
 
 %<*en>
-Setting whether inserting \Param{xkanjiskip} is allowed before/after a
-            \textbf{ALchar} whose character code is <chr\_code>.
-             The followings are allowed for <mode>:
-%</en>
-%<*ja>
-文字コードが<chr\_code>の\textbf{ALchar}の前/後ろに\Param{xkanjiskip}の
-挿入を許すかどうかの設定.
-以下の<mode>が許される:
-%</ja>
-\begin{description}
-%<en>\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character.
-%<ja>\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される.
-%<en>\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after.
-%<ja>\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない.
-%<en>\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before.
-%<ja>\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない.
-%<en>\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the character and after the character. This is the default value.
-%<ja>\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である.
-\end{description}
-%<*en>
-Note that parameters \Param{jaxspmode} and \Param{alxspmode} use a common table, hence these two parameters are synonyms of each other.
+These fields are for adjusting the position of the ``real'' glyph. Legal
+            values of \texttt{align} field are \texttt{'left'},
+            \texttt{'middle'}, and \texttt{'right'}. If one of these
+            3~fields are omitted, \texttt{left} and \texttt{down} are
+            treated as~0, and \texttt{align} field is treated as
+            \texttt{'left'}.
+The effects of these 3~fields are indicated in
+Figures \ref{fig-pos}~and~\ref{fig-pos-tate}.
 %</en>
 %<*ja>
-\Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため,
-これら2つのパラメータは互いの異名となっていることに注意する.
+これらのフィールドは実際のグリフの位置を調整するためにある.
+\texttt{align} フィールドに指定できる値は \texttt{'left'}, \texttt{'middle'},
+\texttt{'right'} のいずれかである.もしこれら3つのフィールドのうちの1つが省かれた
+場合,\texttt{left} と \texttt{down} は0,\texttt{align} フィールドは
+\ \texttt{'left'} であるものとして扱われる.
+これら3つのフィールドの意味については図\ref{fig-pos}(横組用和文フォント),
+図\ref{fig-pos-tate}(縦組用和文フォント)で説明する.
 %</ja>
 
-\item[\Param{autospacing}\,=<bool>$^\ast$] [\verb+\autospacing+]
-\item[\Param{autoxspacing}\,=<bool>$^\ast$] [\verb+\autoxspacing+]
-\item[\Param{kanjiskip}\,=<skip>] [\verb+\kanjiskip+]
-\item[\Param{xkanjiskip}\,=<skip>] [\verb+\xkanjiskip+]
-
-\item[\Param{differentjfm}\,=<mode>$^\dagger$]
-
 %<*en>
-Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different.
-The allowed arguments are the followings:
+In most cases, \texttt{left} and \texttt{down} fields are~0, while
+it is not uncommon that the \texttt{align} field is \texttt{'middle'} or \texttt{'right'}.
+For example, setting the \texttt{align} field to \texttt{'right'} is practically needed
+when the current character class is the class for opening delimiters'.
 %</en>
 %<*ja>
-JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグルー/カーンをどのように
-入れるかを指定うる.
-許される値は以下の通り:
+多くの場合,\texttt{left}と\texttt{down}は0である一方,
+\texttt{align}フィールドが\texttt{'middle'}や\texttt{'right'}であることは
+珍しいことではない.
+例えば,\texttt{align}フィールドを\texttt{'right'}に指定することは,
+文字クラスが開き括弧類であるときに実際必要である.
 %</ja>
-\begin{description}
-\item[\texttt{average}]
-\item[\texttt{both}]
-\item[\texttt{large}]
-\item[\texttt{small}]
-\end{description}
-
-\item[\Param{jacharrange}\,=<ranges>$^\ast$]
-\item[\Param{kansujichar}\,=\{<digit>, <chr\_code>\}] [\verb+\kansujichar+]
-\end{list}
 
+\begin{figure}[!tb]
+\begin{minipage}{0.4\textwidth}%
+\begin{center}\unitlength=10pt\small
+\begin{picture}(15,12)(-1,-4)
+\color{b_gray}% jfm
+\put(0,0){\vrule width 12\unitlength height 8\unitlength depth 3\unitlength}
 
-%<en>\section{Other Primitives}
-%<ja>\section{その他のプリミティブ}
-%<en>\subsection{Primitives for Compatibility}
-%<ja>\subsection{互換プリミティブ}
+\color{b_pink}% step1
+\put(-1,-1.5){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
 
-%<*en>
-The following primitives are implemented for compatibility with \pTeX:
-%</en>
-%<*ja>
-以下のプリミティブは\pTeX との互換性のために実装されている:
-%</ja>
-\begin{list}{}{\def\makelabel{\ttfamily\char92 }\advance\leftmargin1\zw}
-\item[kuten]
-\item[jis]
-\item[euc]
-\item[sjis]
-\item[ucs]
-\item[kansuji]
-\end{list}
+\color{red}% real glyph
+\thicklines
+\put(-1,-1.5){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}}
+\put(5,-1.5){\line(0,1){7}\line(0,-1){2.5}}
+\put(-1,5.5){\line(1,0){6}}
+\put(-1,-4){\line(1,0){6}}
 
-%<en>\subsection{\texttt{\char92 inhibitglue} primitive}
-%<ja>\subsection{\texttt{\char92 inhibitglue}プリミティブ}
+\color{b_green}% real glyph
+\put(3,0){\vrule width 6\unitlength height 7\unitlength depth 2.5\unitlength}
 
-%<*en>
-The primitive \verb+\inhibitglue+ suppresses the insertion of \textbf{JAglue}.
-The following is an example, using a special JFM that there will be a glue between
-the beginning of a box and `あ', and also between `あ' and `ウ'.
-%</en>
-%<*ja>
-\verb+\inhibitglue+ プリミティブは\textbf{JAglue}の挿入を抑制する.
-以下は,ボックスの始めと`あ'の間,`あ'と`ウ'の間にグルーが入る特別なJFMを用いた例で
-ある.
-%</ja>
+\color{black}% jfm
+\thicklines
+\put(0,0){\vector(0,1){8}\line(0,-1){3}\vector(1,0){12}}
+\put(12,0){\line(0,1){8}\vector(0,-1){3}}
+\put(0,8){\line(1,0){12}}
+\put(0,-3){\line(1,0){12}}
+\put(0.2,4){\makebox(0,0)[l]{\texttt{height}}}
+\put(12.2,-1.5){\makebox(0,0)[l]{\texttt{depth}}}
+\put(6,0.2){\makebox(0,0)[b]{\texttt{width}}}
 
-\begin{LTXexample}
-\jfont\g=psft:Ryumin-Light:jfm=test \g
-\fbox{\hbox{あウあ\inhibitglue ウ}}
-\inhibitglue\par\noindent あ1
-\par\inhibitglue\noindent あ2
-\par\noindent\inhibitglue あ3
-\par\hrule\noindent あoff\inhibitglue ice
-\end{LTXexample}
+\color{green}% step1
+\thicklines
+\put(3,0){\vector(0,1){7}\vector(0,-1){2.5}\vector(1,0){6}}
+\put(9,0){\line(0,1){7}\line(0,-1){2.5}}
+\put(3,7){\line(1,0){6}}
+\put(3,-2.5){\line(1,0){6}}
+\newsavebox{\eqdist}
+\savebox{\eqdist}(0,0)[b]{%
+  \thinlines
+  \put(-0.08,0.2){\line(0,-1){0.4}}%
+  \put(0.08,0.2){\line(0,-1){0.4}}}
+\put(1.5,0){\usebox{\eqdist}}
+\put(10.5,0){\usebox{\eqdist}}
 
+\color{blue}% shifted
+\thicklines
+\put(3,-1.5){\vector(-1,0){4}}
+\put(1,-1.7){\makebox(0,0)[t]{\texttt{left}}}
+\put(3,0){\vector(0,-1){1.5}}
+\put(3.2,-0.75){\makebox(0,0)[l]{\texttt{down}}}
+\end{picture}
+\end{center}
+\end{minipage}%
+\begin{minipage}{0.6\textwidth}%
 %<*en>
-With the help of this example, we remark the specification of \verb+\inhibitglue+:
+Consider a  Japanese character node which belongs to
+a character class whose the \texttt{align}
+field is \texttt{'middle'}.
 %</en>
 %<*ja>
-この例を援用して,\verb+\inhibitglue+ の仕様について述べる.
+\texttt{align}フィールドの値が \texttt{'middle'} であるような文字クラスに属する
+和文文字ノードを考えよう.
 %</ja>
 \begin{itemize}
+\item
 %<*en>
-\item The call of \verb+\inhibitglue+ in the (internal) vertical mode is
-      simply ignored.
+The black rectangle is the imaginary body of the node.
+Its width, height, and depth are specified by JFM.
 %</en>
 %<*ja>
-\item \verb+\inhibitglue+ の垂直モード中での呼び出しは意味を持たない.
-4行目の入力で有効にならないのは,\verb+\inhibitglue+ の時点では垂直モードであり,
-\verb+\noindent+ の時点で水平モードになるからである.
+黒色の長方形はノードの枠であり,
+その幅,高さ,深さはJFMによって指定されている.
 %</ja>
-
+\item
 %<*en>
-\item The call of \verb+\inhibitglue+ in the (restricted) horizontal
-      mode is only effective on the spot; does not get over boundary of
-      paragraphs. Moreover, \verb+\inhibitglue+ cancels ligatures and
-      kernings, as shown in the last line of above example.
+Since the \texttt{align} field is \texttt{'middle'},
+the ``real'' glyph is centered horizontally (the green rectangle) first.
 %</en>
 %<*ja>
-\item \verb+\inhibitglue+ の(制限された)水平モード中での呼び出しはその場でのみ
-  有効であり,段落の境界を乗り越えない.
-  さらに,\verb+\inhibitglue+ は上の例の最終行のようにリガチャとカーニングを
-  打ち消す.
+\texttt{align}フィールドは \texttt{'middle'} なので,
+実際のグリフの位置はまず水平方向に中央揃えしたものとなる(緑色の長方形).
 %</ja>
-
+\item
 %<*en>
-\item The call of \verb+\inhibitglue+ in math mode is just ignored.
+Furthermore, the glyph is shifted according to values of fields
+      \texttt{left} and \texttt{down}. The ultimate position of the real
+      glyph is indicated by the red rectangle.
 %</en>
 %<*ja>
-\item \verb+\inhibitglue+ を数式モード中で呼び出した場合はただ無視される.
+さらに,グリフは \texttt{left} と \texttt{down} の値に従ってシフトされる.
+最終的な実際のグリフの位置は赤色の長方形で示された位置になる.
 %</ja>
 \end{itemize}
+\end{minipage}
+\medskip
 
-%<en>\section{Control Sequences for \LaTeXe}
-%<ja>\section{\LaTeXe 用のコントロールシーケンス}
+\caption{%
+%<en>The position of the real glyph (horizontal Japanese fonts)
+%<ja>横組和文フォントにおける「実際の」グリフの位置
+}
+\label{fig-pos}
+\end{figure}
+\begin{figure}[!tb]
+\begin{minipage}{0.4\textwidth}%
+\begin{center}\unitlength=10pt\small
+\begin{picture}(15,12)(-6,0)
+\color{b_gray}% jfm
+\put(-6,0){\vrule width 12\unitlength height 11\unitlength}
 
-%<en>\subsection{Patch for NFSS2}
-%<ja>\subsection{NFSS2へのパッチ}
-\label{ssub-nfsspat}
+\color{b_pink}% real glyph
+\put(-6.5,5.5){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength}
 
-%<*en>
-As described in Subsection~\ref{ssec-ltx}, \LuaTeX-ja simply adopted
-\texttt{plfonts.dtx} in \pLaTeXe\ for the Japanese patch for NFSS2.
-For an convenience, we will describe
-commands which are not described in Subsection~\ref{ssub-chgfnt}.
-%</en>
-%<*ja>
-\ref{ssec-ltx} 節で述べたように,\LuaTeX-jaはNFSS2への日本語パッチである
-\pLaTeXe の\texttt{plfonts.dtx}を単純に取り入れている.
-便宜のため,ここでは \ref{ssub-chgfnt} 節で述べていなかったコマンドについて
-記述しておく.
-%</ja>
+\color{red}% real glyph
+\thicklines
+\put(-6.5,5.5){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}}
+\put( 1.5,5.5){\line(0,1){6}\line(0,-1){3}}
+\put(-6.5,11.5){\line(1,0){8}}
+\put(-6.5,2.5){\line(1,0){8}}
 
-\begin{cslist}%
-\item[DeclareYokoKanjiEncoding\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
+\color{b_green}% step1
+\put(-4,3){\vrule width 8\unitlength height 6\unitlength depth 3\unitlength}
 
-%<*en>
-In NFSS2 under \LuaTeX-ja, distinction between alphabetic font families
-            and Japanese font families are only made by their
-            encodings. For example, encodings OT1 and T1 are for
-            alphabetic font families, and a Japanese font family cannot
-            have these encodings. This command defines a new encoding
-            scheme for Japanese font family (in horizontal direction).
-%</en>
-%<*ja>
-\LuaTeX-jaのNFSS2においては,欧文フォントファミリと和文フォントファミリは
-そのエンコーディングからのみ作られる.
-例えば,OT1とT1のエンコーディングは欧文フォントファミリに対するものであり,
-和文フォントファミリはこれらのエンコーディングを持つことはできない.
-このコマンドは和文フォントファミリ(横書き用)のための新しいエンコーディングを
-定義する.
-%</ja>
+\color{black}% jfm
+\thicklines
+\put(0,11){\vector(1,0){6}\vector(-1,0){6}\vector(0,-1){11}}
+\put(0,0){\line(1,0){6}\line(-1,0){6}}
+\put(-6,0){\line(0,1){11}}
+\put( 6,0){\line(0,1){11}}
+\put( 3,10.8){\makebox(0,0)[t]{\texttt{height}}}
+\put(-3,10.8){\makebox(0,0)[t]{\texttt{depth}}}
+\put(0.2,5.5){\makebox(0,0)[l]{\texttt{width}}}
+
+\color{green}% step1
+\thicklines
+\put(-4,3){\vector(0,1){6}\vector(0,-1){3}\vector(1,0){8}}
+\put( 4,3){\line(0,1){6}\line(0,-1){3}}
+\put(-4,9){\line(1,0){8}}
+\put(-4,0){\line(1,0){8}}
+\savebox{\eqdist}(0,0)[b]{%
+  \thinlines
+  \put(-0.08,0.2){\line(0,-1){0.4}}%
+  \put(0.08,0.2){\line(0,-1){0.4}}}
+\put(2,9){\usebox{\eqdist}}
+\put(-2,9){\usebox{\eqdist}}
 
-\item[DeclareKanjiEncodingDefaults\{<text-settings>\}\{<math-settings>\}]
-\item[DeclareKanjiSubstitution\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}]
-\item[DeclareErrorKanjiFont\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}\{<size>\}]
 
+\color{blue}% shifted
+\thicklines
+\put(-4,3){\vector(0,1){2.5}}
+\put(-3.8,4.25){\makebox(0,0)[l]{\texttt{left}}}
+\put(-4,5.5){\vector(-1,0){2.5}}
+\put(-5.,5.7){\makebox(0,0)[b]{\texttt{down}}}
+\end{picture}
+\end{center}
+\end{minipage}%
+\begin{minipage}{0.6\textwidth}%
 %<*en>
-The above 3~commands are just the counterparts for \verb+DeclareFontEncodingDefaults+ and~others.
+(\dots)
 %</en>
 %<*ja>
-上記3つのコマンドはちょうど \verb+DeclareFontEncodingDefaults+ などに対応するものである.
+\texttt{align}フィールドの値が \texttt{'right'} であるような文字クラスに属する
+和文文字を考えよう.
+\begin{itemize}
+\item
+実際のグリフの「垂直位置」は,まずベースラインが文字の物理的な左右方向の中央を通る
+位置となる.
+\item
+また,この場合 \texttt{align} フィールドは \texttt{'right'} なので,
+「水平位置」は字送り方向に「右寄せ」したものとなる(緑色の長方形).
+\item
+その後さらに \texttt{left} と \texttt{down} の値に従ってシフトされる
+のは横組用和文フォントと変わらない.
+\end{itemize}
 %</ja>
+\end{minipage}
+\medskip
 
-\item[reDeclareMathAlphabet\{<unified-cmd>\}\{<al-cmd>\}\{<ja-cmd>\}]
+\caption{%
+%<en>The position of the real glyph (vertical Japanese fonts)
+%<ja>縦組和文フォントにおける「実際の」グリフの位置
+}
+\label{fig-pos-tate}
+\end{figure}
 
-% ToDo: en
+\item[kern={\{[$j$]=<kern>, [$j'$]=\{<kern>, [ratio=<ratio>]\}, ...\}}]
+\nopagebreak
+\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>, [ratio=<ratio>, ...]\}, ...\}}]\leavevmode
 %<*ja>
-和文・欧文の数式用フォントファミリを一度に変更する命令を作成する.
-具体的には,欧文数式用フォントファミリ変更の命令<al-cmd>(\verb+\mathrm+ 等)と,和文数式用フォ
-            ントファミリ変更の命令<ja-cmd>(\verb+\mathmc+ 等)の2つを同時に行う命令として
-            <unified-cmd>を(再)定義する.実際の使用では<unified-cmd>と
-            <al-cmd>に同じものを指定する,すなわち,<al-cmd>で和文側も変
-            更させるようにするのが一般的と思われる.
 
-{\let\item=\origitem
-本命令は
-\begin{center}\tt
-<unified-cmd>\{<arg>\}\quad$\longrightarrow$\quad
-(<al-cmd>を1段展開したもの)\{<ja-cmd>を1段展開したもの)\{<arg>\}\}
-\end{center}
-と定義を行うので,使用には注意が必要である:
+文字クラス$i$の文字と$j$の文字の間に挿入されるカーンやグルーの量を指定する.
+
+<ratio>は,グルーの自然長のうちどれだけの割合が「後の文字」由来かを示す量で,
+$0$から$+1$の実数値をとる.省略時の値は$0.5$である.
+このフィールドの値は\Param{differentjfm}の値が
+\texttt{pleft},~\texttt{pright},~\texttt{paverage}の値のときのみ実際に用いられる.
+
+例えば,\cite{x4051}では,句点と中点の間には,
+句点由来の二分空きと中点由来の四分空きが挿入されるが,この場合には
 \begin{itemize}
-\item <al-cmd>,~<ja-cmd>は既に定義されていなければならない.\verb+\reDeclareMathAlphabet+後に
-両命令の内容を再定義しても,<unified-cmd>の内容にそれは反映されない.
-\item <al-cmd>,~<ja-cmd>に\verb+\@mathrm+などと\texttt{@}をつけた命令を指定した時の動作は保証できない.
-\end{itemize}}
+\item <width>には$0.5+0.25=0.75$を指定する.
+\item <ratio>には$0.25/(0.5+0.25)=1/3$を指定する.
+\end{itemize}
 %</ja>
-
-\item[DeclareRelationFont\{<ja-encoding>\}\{<ja-family>\}\{<ja-series>\}\{<ja-shape>\}\\
-  \hfill\{<al-encoding>\}\{<al-family>\}\{<al-series>\}\{<al-shape>\}]
 %<*en>
-This command sets the `accompanied' alphabetic font family (given by the latter 4~arguments)
-with respect to a Japanese font family given by the former 4~arguments.
+\
+
+Specifies the amount of kern or glue which will be inserted
+between characters in character class~$i$ and those in character class~$j$.
+
+<ratio> specifies how much the glue is originated in the ``right'' character.
+It is a real number between 0 and 1, and treated as 0.5 if omitted. For example,
+The width of a glue between an ideographic full stop ``。''
+and a fullwidth middle dot ``・'' is three-fourth of fullwidth,
+namely halfwidth from the ideographic full stop, and
+quarter-width from the fullwidth middle dot.  In this case,
+we specify <ratio> to $0.25/(0.5+0.25)=1/3$.
 %</en>
+
 %<*ja>
-いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントファミリに対して,
-そのフォントに対応する「従属欧文」フォントファミリを後半の4引数により与える.
+グルーの指定においては,上記に加えて各 \texttt{[$j$]} の各サブテーブル内に
+次のキーを指定できる,
+\begin{cslist}[style=standard]
+\item[priority=<priority>]
+             \Pkg{luatexja-adjust} による優先順位付き
+            行長調整(\ref{ssec-adj}節)の際に使われる値であり,
+行調整処理におけるこのglueの優先
+             度を$-2$から$+2$の間の整数で指定する.大きい値ほど「伸びやすく,縮みやすい」
+             ことを意味する.省略時の値
+             は0であり,範囲外の値が指定されたときの動作は未定義である.
+\item[kanjiskip\_natural=<num>\textrm{, }%
+  kanjiskip\_stretch=<num>\textrm{, }kanjiskip\_shrink=<num>]\leavevmode
+  \label{pg:ksp_nat}
+
+JFMによって本来挿入されるグルーの他に
+\Param{kanjiskip}分の空白を自然長(\texttt{kanjiskip\_natural}),伸び量(\texttt{kanjiskip\_stretch}),
+縮み量(\texttt{kanjiskip\_shrink})ごとに挿入する\footnote{本来\Param{xkanjiskip}が挿入される場所においては
+            \Param{xkanjiskip}分の空白を自然長・伸び量・縮み量ごとに.追加できる.}%
+ための指定である.いずれも省略された場合のデフォルト値は0(追加しない)である.
+
+例えば,\LuaTeX-jaの横組標準JFMの \texttt{jfm-ujis.lua} では,
+\begin{itemize}
+ \item 通常の文字「あ」と開き括弧類の間に入るグルーは,自然長・縮み量半角,伸び量0のグルー
+となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け
+       た分だけ伸びることが許される.
+ \item 同様に,閉じ括弧類(全角コンマ「,」も含む)と通常の文字「う」「え」の間にも
+自然長・縮み量半角,伸び量0のグルー
+となっているが,さらに\Param{kanjiskip}の伸び量に \texttt{kanjiskip\_stretch}(ここでは1)を掛け
+       た分だけ伸びることが許される.
+\end{itemize}
+となっている.従って,以下のような組版結果を得る.
+
+\medskip
+\begin{LTXexample}[width=16\zw]
+\leavevmode
+\ltjsetparameter{kanjiskip=0pt plus 3\zw}
+\vrule\hbox to 15\zw{あ「い」う,えお}\vrule
+\end{LTXexample}
+
+\end{cslist}
 %</ja>
-\item[SetRelationFont]
 %<*en>
-This command is almost same as \verb+\DeclareRelationFont+, except that this command does a local
-assignment, where \verb+\DeclareRelationFont+ does a global assignment.
-%</en>
-%<*ja>
-このコマンドは \verb+\DeclareRelationFont+ とローカルな指定であることを除いて
-ほとんど同じである(\verb+\DeclareRelationFont+ はグローバル).
-%</ja>
+In case of glue, one can specify following additional keys in each \texttt{[$j$]}
+            subtable:
+\begin{cslist}[style=standard]
+\item[priority=<priority>]
+An integer in $[-2,2]$ (treated as 0 if omitted), and this is
+used only in line adjustment with priority by \Pkg{luatexja-adjust}
+(see Subsection~\ref{ssec-adj}). Higher value means the glue is easy to stretch,
+and is also easy to shrink.
+\item[kanjiskip\_natural=<num>\textrm{, }%
+  kanjiskip\_stretch=<num>\textrm{, }kanjiskip\_shrink=<num>]\leavevmode
 
-\item[userelfont]
-%<*en>
-Change current alphabetic font encoding/family/\dots\ to the `accompanied' alphabetic
-            font family with respect to current Japanese font family,
-            which was set by
-            \verb+\DeclareRelationFont+ or \verb+\SetRelationFont+.
-Like \verb+\fontfamily+, \verb+\selectfont+ is required to take an effect.
+These keys specifies the amount of the natural width of \Param{kanjiskip}
+(the stretch/shrink part, respectively) which will be inserted 
+in addition to the original JFM glue. Default values of them are all 0.
+
+As an example, in \texttt{jfm-ujis.lua}, the standard JFM in horizontal writing, we have
+\begin{itemize}
+ \item Between an ordinal letter ``あ'' and an ideographic opening bracket, we have
+a glue whose natural part and shrink part are both half-width, while its stretch part is
+       zero. However, this glue also can be stretched
+       as much as the stretch part of \Param{kanjiskip} times the value of
+       \texttt{kanjiskip\_stretch} key (1 in this case).
+ \item Between an ideographic closeing brackets (the ideographic comma ``,''
+       is included) and an ordinal letter, we have the same glue. 
+       Again, this glue also can be stretched
+       as much as the stretch part of \Param{kanjiskip} times the value of
+       \texttt{kanjiskip\_stretch} key (1 in this case).
+\end{itemize}
+Hence we have the following result:
+
+\medskip
+\begin{LTXexample}[width=16\zw]
+\leavevmode
+\ltjsetparameter{kanjiskip=0pt plus 3\zw}
+\vrule\hbox to 15\zw{あ「い」う,えお}\vrule
+\end{LTXexample}
+
+\end{cslist}
 %</en>
+
+\item[end\_stretch=<kern>, end\_shrink=<kern>]
 %<*ja>
-現在の欧文フォントエンコーディング/ファミリ/…… を,
-\verb+\DeclareRelationFont+ か \verb+\SetRelationFont+ で指定された
-現在の和文フォントファミリに対応する「従属欧文」フォントファミリに変更する.
-\verb+\fontfamily+ のように,有効にするためには \verb+\selectfont+ が必要である.
+(任意)
+
+優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行
+            末に来た時に,行長を詰める調整・伸ばす調整のた
+             めにこの文字と行末の間に挿入可能なカーンの大きさを指定する.
 %</ja>
 
-\item[adjustbaseline]
-...
+\end{cslist}
 
-\item[fontfamily\{<family>\}]
-{\let\item\origitem
-%<*en>
-As in \LaTeXe, this command changes current font family (alphabetic, Japanese,~\emph{or both})
-to <family>. Which family will be changed is determined as follows:
-%</en>
 %<*ja>
-元々の\LaTeXe におけるものと同様に,このコマンドは現在のフォントファミリ(欧文,
-和文,\textbf{もしくは両方})を<family>に変更する.
-どのファミリが変更されるかは以下のようにして決定される:
+\paragraph{文字クラスの決定}
+文字からその文字の属する文字クラスを算出する過程について,
+次の内容を含んだ \texttt{jfm-test.lua} を用いて説明する.
 %</ja>
-\begin{itemize}
 %<*en>
-\item Let current encoding scheme for Japanese fonts be
-      <ja-enc>. Current Japanese font family will be changed to
-      <family>, if one of the following two conditions is met:
+\paragraph{Character to character classes}
+We explain how the character class of a character is determined,
+using  \texttt{jfm-test.lua} which contains the following:
 %</en>
-%<*ja>
-\item 現在の和文フォントに対するエンコーディングが<ja-enc>であるとしよう.
-  現在の和文フォントファミリは,以下の2つの条件のうちの1つが満たされているときに
-  <family>に変更される:
-%</ja>
-\begin{itemize}
+\begin{lstlisting}
+   [0] = {
+      chars = { '漢' },
+      align = 'left', left = 0.0, down = 0.0,
+      width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+   },
+   [2000] = {
+      chars = { '。', 'ヒ' },
+      align = 'left', left = 0.0, down = 0.0,
+      width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+   },
+\end{lstlisting}
+%<ja>ここで,次のような入力とその実行結果を考える:
+%<en>Now consider the following input/output:
+\begin{LTXexample}[width=0.3\textwidth]
+\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+hwid
+\setbox0\hbox{\a ヒ漢}
+\the\wd0
+\end{LTXexample}
 %<*en>
-\item The family <fam> under the encoding <ja-enc> has been already defined by
-      \verb+\DeclareKanijFamily+.
+Now we look why the above source outputs 15\,pt.
+\begin{enumerate}
+\item The character ``ヒ'' is converted to its half width  form ``ヒ'' by \verb+hwid+ feature.
+\item According to the JFM, the character class of ``ヒ'' is 2000, hence its width is halfwidth.
+\item The character class of ``漢'' is zero,  hence its width is fullwidth.
+\item Hence the width of \cs{hbox} equals to 15\,pt.
+\end{enumerate}
+This example shows that the character class of a character is generally determined \emph{after
+applying font features by \Pkg{luaotfload}}.
 %</en>
 %<*ja>
-\item エンコーディング<ja-enc>におけるファミリ<fam>が既に \verb+\DeclareKanjiFamily+ によって定義されている.
+上記の出力結果が,15\,ptとなっているのは理由によるものである:
+\begin{enumerate}
+\item \verb+hwid+ featureによって「ヒ」が半角幅のグリフ「ヒ」と置き換わる(\Pkg{luaotfload} による処理).
+\item JFMによれば,この「ヒ」のグリフの文字クラスは2000である.
+\item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される.
+\end{enumerate}
+この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを
+示している.
 %</ja>
+
 %<*en>
-\item A font definition named \texttt{<enc><ja-enc>.fd} (the file name is
-      all lowercase) exists.
+However, if the class determined by the glyph after application of features is zero,
+\LuaTeX-ja adopts the class determined by the glyph \emph{before} application of features.
+The following input is an example.
 %</en>
 %<*ja>
-\item ã\83\95ã\82©ã\83³ã\83\88å®\9a義ã\83\95ã\82¡ã\82¤ã\83«\texttt{<enc><ja-enc>.fd}ï¼\88ã\83\95ã\82¡ã\82¤ã\83«å\90\8dã\81¯å\85¨ã\81¦å°\8fæ\96\87å­\97ï¼\89ã\81\8cå­\98å\9c¨ã\81\99ã\82\8bï¼\8e
+ä½\86ã\81\97ï¼\8cJFMã\81«ã\82\88ã\81£ã\81¦æ±ºã\81¾ã\82\8bç½®æ\8f\9bå¾\8cã\81®ã\82°ã\83ªã\83\95ã\81®æ\96\87å­\97ã\82¯ã\83©ã\82¹ã\81\8c\81§ã\81\82ã\82\8bå ´å\90\88ã\81¯ï¼\8cç½®æ\8f\9bå\89\8dã\81®æ\96\87å­\97ã\82¯ã\83©ã\82¹ã\82\92æ\8e¡ç\94¨ã\81\99ã\82\8bï¼\8e
 %</ja>
-\end{itemize}
+\begin{LTXexample}[width=0.3\textwidth]
+\jfont\a=file:KozMinPr6N-Regular.otf:jfm=test;+vert
+\a 漢。\inhibitglue 漢
+\end{LTXexample}
 %<*en>
-\item Let current encoding scheme for alphabetic fonts be
-      <al-enc>. For alphabetic font family, the criterion as above is used.
+Here, the character class of the ideographic full stop ``。''~(\texttt{U+3002}) is determined
+as follows:
+\begin{enumerate}
+\item As the case of ``ヒ'', the ideographic full stop ``。'' is converted to its vertical
+      form ``\char"FE12''~(\texttt{U+FE12}) by \verb+vert+ feature.%"
+\item The character class of ``\char"FE12'', according to the JFM  is \emph{zero}.
+\item However, \LuaTeX-ja remembers that this ``\char"FE12'' is obtained from ``。'' by
+      font features. The character class of ``。'' is \emph{non-zero value}, namely, 2000.
+\item Hence the ideographic full stop ``。'' in above belongs the character class~2000.
+\end{enumerate}
 %</en>
 %<*ja>
-\item 現在の欧文フォントに対するエンコーディングを<al-enc>とする.
-  欧文フォントファミリに対しても,上記の基準が用いられる.
+ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる.
+\begin{enumerate}
+\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる.
+\item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される.
+\item この場合,置換前の横組用句点のグリフによって文字クラスを判定する.
+\item 結果として,上の出力例中の句点の文字クラスは2000となる.
+\end{enumerate}
 %</ja>
+
+
+%<ja>\paragraph{仮想的な文字}
+%<en>\paragraph{Imaginary characters}
 %<*en>
-\item There is a case which none of the above applies, that is, the font
-      family named <family> doesn't seem to be defined neither under the
-      encoding <ja-enc>, nor under <al-enc>.
-In this case, the default family for font substitution is used for
-      alphabetic and Japanese fonts. Note that current encoding will not
-      be set to <family>, unlike the original implementation in \LaTeX.
+As described before, you can specify several \emph{imaginary characters} in
+\texttt{chars} field. The most of these characters are regarded as the
+characters of class 0 in \pTeX.
+As a result, \LuaTeX-ja can control typesetting finer than \pTeX.
+The following is the list of imaginary characters:
 %</en>
 %<*ja>
-\item 上記のいずれもが適用されない,つまり<family>が<ja-enc>と<al-enc>の
-  どちらでも定義されないような場合がある.
-  この場合,代替フォントに用いられるデフォルトのフォントファミリが欧文フォントと
-  和文フォントに用いられる.\LaTeX のオリジナルの実装とは異なり,
-  現在のエンコーディングは<family>には設定されないことに注意する.
+上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も
+指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字
+クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か
+い組版調整ができるようになっている.以下でその一覧を述べる:
 %</ja>
-\end{itemize}
-}
+
+\begin{cslist}
+%%\item['diffmet']
+%%<en>Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
+%%<ja>JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる.
+
+\item['boxbdd']
+%<en>The beginning/ending of a hbox, and the beginning of a noindented (i.e., began by \cs{noindent}) paragraph.
+%<ja>hboxの先頭と末尾,及びインデントされていない(\cs{noindent} で開始された)段落の先頭を表す.
+
+\item['parbdd']
+%<en>The beginning of an (indented) paragraph.
+%<ja>通常の(\cs{noindent} で開始されていない)段落の先頭.
+
+\item['jcharbdd']
+%<en>A boundary between \textbf{JAchar} and anything else (such as \textbf{ALchar}, kern, glue,\,\ldots).
+%<ja>\textbf{JAchar}と「その他のもの」(欧文文字,glue,kern等)との境界.
+
+\item[$-1$]
+%<en>The left/right boundary of an inline math formula.
+%<ja>行中数式と地の文との境界.
 \end{cslist}
 
+%<en>\paragraph{Porting JFM from \pTeX}
+%<ja>\paragraph{\pTeX 用和文用TFMの移植}
+
+% ToDo: English version.
+
 %<*en>
-As closing this subsection, we shall introduce an example of
-\verb+\SetRelationFont+ and \verb+\userelfont+:
+See Japanese version of this manual.
 %</en>
+
 %<*ja>
-この節の終わりに,\verb+\SetRelationFont+ と \verb+\userelfont+ の例を
-紹介しておこう.
-%</ja>
-\begin{LTXexample}
-\gtfamily{}あいうabc
-\SetRelationFont{JY3}{gt}{m}{n}{OT1}{pag}{m}{n}
-\userelfont\selectfont{}あいうabc
-\end{LTXexample}
+以下に,\pTeX 用に作られた和文用TFMを\LuaTeX-ja用に移植する場合の注意点を挙げておく.
+\begin{itemize}
+\item 実際に出力される和文フォントのサイズがdesign sizeとなる.
+このため,例えば$1\,\textrm{zw}$がdesign sizeの0.962216倍であるJISフォン
+      トメトリック等を移植する場合は,次のようにするべきである:
+\begin{itemize}
+\item JFM中の全ての数値を$1/0.962216$倍しておく.
+\item \TeX ソース中で使用するところで,サイズ指定を0.962216倍にする.
+      \LaTeX でのフォント宣言なら,例えば次のように:
+\begin{lstlisting}
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[0.962216] psft:Ryumin-Light:jfm=jis}{}
+\end{lstlisting}
+\end{itemize}
+\item 上に述べた特殊文字は,\texttt{'boxbdd'}を除き文字クラスを全部0とする
+      (JFM中に単に書かなければよい).
+\item \texttt{'boxbdd'}については,それのみで一つの文字クラスを形成し,その
+      文字クラスに関してはグルー/カーンの設定はしない.
 
+これは,\pTeX では,
+      hboxの先頭・末尾とインデントされていない(\cs{noindent} で開始さ
+      れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである.
+\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である.
 
-%<en>\subsection{Cropmark/`tombow'}
-%<ja>\subsection{トンボ}
-% ToDo
+ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので,
+      段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに
+      は,段落の最初に手動で \cs{inhibitglue} を追加するか,あるいは
+      \ \cs{everypar} のハックを行い,それを自動化させるしかなかった.
 
-%<en>\section{Extensions}
-%<ja>\section{拡張}
-\subsection{\texttt{luatexja-fontspec.sty}}
+一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ
+うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに
+\texttt{'parbdd'}を入れれば全角下がりとなる.
 
-%<*en>
-As described in Subsection~\ref{ssec-fontspec}, this optional package
-provides the counterparts for several commands defined in the
-\Pkg{fontspec} package.
-In addition to `font features' in the original \Pkg{fontspec},
-the following `font features' specifications are allowed for
-the commands of Japanese version:
-%</en>
-%<*ja>
-\ref{ssec-fontspec} 節で述べたように,この追加パッケージは\Pkg{fontspec}
-パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する.
-オリジナルの\Pkg{fontspec}での`font feature'に加えて,和文版のコマンドには
-以下の`font feature'を指定することができる:
+\begin{LTXexample}[width=0.4\textwidth]
+\jfont\g=KozMinPr6N-Regular:jfm=test \g
+\parindent1\zw\noindent{}◆◆◆◆◆
+\par 「◆◆←二分下がり
+\par 【◆◆←全角下がり
+\par 〔◆◆←全角二分下がり
+\end{LTXexample}
+\end{itemize}
+
+但し,\cs{everypar} を利用している場合にはこの仕組みは正しく動かない.
+そのような例としては箇条書き中の \cs{item} で始まる段落があり,\Pkg{ltjsclasses}では
+人工的に「\texttt{'parbdd'}の意味を持つ」whatsitノードを作ることによって対処している%
+\footnote{\texttt{ltjsclasses.dtx} を参照されたい.
+JFM側で一部の対処ができることにより,\Pkg{jsclasses}のようにif文の判定はしていない.}.
 %</ja>
 
 
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item[JFM=<name>]
-\item[JFM-var=<name>]
+%<en>\subsection{Math font family}
+%<ja>\subsection{数式フォントファミリ}
+\label{ssec-math}
 
 %<*en>
-These 2 font features correspond to \texttt{jfm} and \texttt{jfmvar} keys for
-\verb+\jfont+ primitive, respectively. See Subsection~\ref{ssec-jfont}.
+\TeX\ handles fonts in math formulas by 16~font families\footnote{Omega,
+Aleph, \LuaTeX~and $\varepsilon$-\kern-.125em(u)\pTeX\ can handles 256~families, but
+an external package is needed to support this in plain \TeX\ and
+\LaTeX.}, and each family has three fonts:
+\cs{textfont}, \cs{scriptfont} and \cs{scriptscriptfont}.
 %</en>
 %<*ja>
-これら2つのキーはそれぞれ \verb+\jfont+ プリミティブに対する
-\texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する.
-\ref{ssec-jfont} 節を参照.
+\TeX\ は数式フォントを16のファミリ\footnote{Omega, Aleph, \LuaTeX,そして
+  $\varepsilon$-\kern-.125em(u)\pTeX\ では256の数式ファミリを扱うことができるが,
+  これをサポートするためにplain \TeX と\LaTeX では外部パッケージを読み込む必要が
+  ある.}で管理し,それぞれのファミリは3つのフォントを持っている:
+\cs{textfont}, \cs{scriptfont} そして \cs{scriptscriptfont} である.
 %</ja>
 
-\item[NoEmbed]
 %<*en>
-By specifying this font feature, you can use `name-only' Japanese font which
-will not be embedded in the output PDF file. See Subsection~\ref{ssec-psft}.
+\LuaTeX-ja's handling of Japanese fonts in math formulas is similar;
+Table~\ref{tab-math} shows counterparts to \TeX's primitives for math
+font families. There is no relation between the value of
+\cs{fam} and that of \cs{jfam}; with appropriate settings,
+you can set both \cs{fam} and \cs{jfam} to the same value.
+Here <jfont\_cs> in the argument of \Param{jatextfont} etc.\ is
+a control sequence which is defined by \cs{jfont}, i.e.,
+a \emph{horizontal} Japanese font.
 %</en>
 %<*ja>
-これを指定することで,PDFに埋め込まれない「名前だけ」のフォントを指定することが
-できる.\ref{ssec-psft} 節を参照.
+\LuaTeX-jaの数式中での和文フォントの扱いも同様である.
+表\ref{tab-math}は数式フォントファミリに対する \TeX のプリミティブと対応する
+ものを示している.\cs{fam} と \cs{jfam} の値の間には関係はなく,
+適切な設定の下では \cs{fam} と \cs{jfam} の両方に同じ値を設定することができる.
+\Param{jatextfont} 他の第2引数<jfont\_cs>は,\cs{jfont} で定義された
+\emph{横組用}和文フォントである.\cs{tfont} で定義された
+\emph{縦組用}和文フォントを指定することは想定していない.
 %</ja>
 
-\item[CID=<name>]
-%<*en>
-This feature is effective only when with NoEmbed feature.
-You can use the non-embedded CID-keyed font whose glyphs are addressed according
-to the specified character collection defined by Adobe Inc.
-The default value is Adobe-Japan1. See also Subsection~\ref{ssec-psft}.
-%</en>
-%<*ja>
-NoEmbed キーと合わせて用いる.
-非埋め込みの CID-keyed フォントがどの文字コレクションに基づくものかを指定する.
-デフォルトは Adobe-Japan1 である.\ref{ssec-psft} 節も参照.
-%</ja>
-\end{list}
+\begin{table}[!tb]
+%<en>\caption{Commands for Japanese math fonts}
+%<ja>\caption{和文数式フォントに対する命令}
+\label{tab-math}
+%<en>\medskip
+\centering
+\def\{{\char`\{}\def\}{\char`\}}\small
+\begin{tabular}{ll}
+\toprule
+%<en>\bf Japanese fonts&\bf alphabetic fonts\\
+%<ja>\bf 和文フォント&\bf 欧文フォント\\
+\midrule
+\cs{jfam}${}\in [0,256)$&\cs{fam}\\
+\tt\Param{jatextfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\cs{textfont}<fam>=<font\_cs>\\
+\tt\Param{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\cs{scriptfont}<fam>=<font\_cs>\\
+\tt\Param{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\cs{scriptscriptfont}<fam>=<font\_cs>\\
+\bottomrule
+\end{tabular}
+\end{table}
 
-\subsection{\texttt{luatexja-otf.sty}}
+%<en>\subsection{Callbacks}
+%<ja>\subsection{コールバック}
 
 %<*en>
-This optional package supports typesetting characters in
-Adobe-Japan1. \texttt{luatexja-otf.sty} offers the following 2~low-level
-commands:
+\LuaTeX-ja also has several callbacks. These callbacks can
+be accessed via \verb+luatexbase.add_to_callback+ function and so on, as other callbacks.
 %</en>
 %<*ja>
-この追加パッケージはAdobe-Japan1の文字の出力をサポートする.
-\texttt{luatexja-otf.sty}は以下の2つの低レベルコマンドを提供する:
+\LuaTeX 自体のものに加えて,\LuaTeX-jaもコールバックを持っている.
+これらのコールバックには,他のコールバックと同様に \verb+luatexbase.add_to_callback+
+関数などを用いることでアクセスすることができる.
 %</ja>
-\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
-\item[\char92CID\{<number>\}]
+\begin{description}[font=\bfseries, style=nextline]
+%<en>\item[\texttt{luatexja.load\_jfm} callback]
+%<ja>\item[\texttt{luatexja.load\_jfm}コールバック]
 %<*en>
-Typeset a character whose CID number is <number>.
+With this callback you can overwrite JFMs.
+This callback is called when a new JFM is loaded.
 %</en>
 %<*ja>
-CID番号が<number>の文字を出力する.
+このコールバックを用いることでJFMを上書きすることができる.
+このコールバックは新しいJFMが読み込まれるときに呼び出される.
 %</ja>
 
-\item[\char92UTF\{<hex\_number>\}]
+\begin{lstlisting}[numbers=left]
+function (<table> jfm_info, <string> jfm_name)
+  return <table> new_jfm_info
+end
+\end{lstlisting}
+
 %<*en>
-Typeset a character whose character code is <hex\_number> (in hexadecimal).
-This command is similar to \verb+\char"+<hex\_number>,\ %"
-but please remind remarks below.
+The argument \verb+jfm_info+ contains a table similar to the table in a JFM file, except
+this argument has \texttt{chars} field which contains character codes
+            whose character class is not~0.
 %</en>
 %<*ja>
-文字コードが(16進で)<hex\_number>の文字を出力する.
\81\93ã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯ \verb+\char"+<hex\_number>ã\81¨ä¼¼ã\81¦ã\81\84ã\82\8bã\81\8cï¼\8cä¸\8bã\81®è¨\98è¿°ã\81«æ³¨æ\84\8fã\81\99ã\82\8bã\81\93ã\81¨ï¼\8e%"
+引数 \verb+jfm_info+ はJFMファイルのテーブルと似たものが格納されるが,
\82¯ã\83©ã\82¹0ã\82\92é\99¤ã\81\84ã\81\9fæ\96\87å­\97ã\81®ã\82³ã\83¼ã\83\89ã\82\92å\90«ã\82\93ã\81 \texttt{chars}ã\83\95ã\82£ã\83¼ã\83«ã\83\89ã\82\92æ\8c\81ã\81¤ç\82¹ã\81\8cç\95°ã\81ªã\82\8bï¼\8e
 %</ja>
-\end{list}
 
-%<en>\paragraph{Remarks}
-%<ja>\paragraph{注意}
 %<*en>
-Characters by \verb+\CID+ and \verb+\UTF+ commands are different from
-ordinary characters in the following points:
+An example of this callback is the \texttt{ltjarticle} class, with
+            forcefully assigning character class~0 to \texttt{'parbdd'}
+            in the JFM \texttt{jfm-min.lua}.
 %</en>
 %<*ja>
-\verb+\CID+ と \verb+\UTF+ コマンドによって出力される文字は
-以下の点で通常の文字と異なる:
+このコールバックの使用例は\texttt{ltjarticle}クラスにあり,
+\texttt{jfm-min.lua}中の\texttt{'parbdd'}を強制的にクラス0に割り当てている.
 %</ja>
-\begin{itemize}
+
+%<en>\item[\texttt{luatexja.define\_jfont} callback]
+%<ja>\item[\texttt{luatexja.define\_jfont}コールバック]
 %<*en>
-\item Always treated as \textbf{JAchar}s.
+This callback and the next callback form a pair, and you can assign characters
+ which do not have fixed code points in Unicode to non-zero character classes.
+This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded.
 %</en>
 %<*ja>
-\item 常に\textbf{JAchar}として扱われる.
+このコールバックと次のコールバックは組をなしており,Unicode中に固定された文字コード
+番号を持たない文字を非零の文字クラスに割り当てることができる.
+このコールバックは新しい和文フォントが読み込まれたときに呼び出される.
 %</ja>
+
+\begin{lstlisting}[numbers=left]
+function (<table> jfont_info, <number> font_number)
+  return <table> new_jfont_info
+end
+\end{lstlisting}
 %<*en>
-\item Processing codes for supporting OpenType features (\textit{e.g.},
-      glyph replacement and kerning) by the \Pkg{luaotfload} package
-      is not performed to these characters.
+\verb+jfont_info+ has the following fields,
+\emph{which may not overwritten by a user}:
+\begin{description}
+\item[\texttt{size}]
+The font size specified at \cs{jfont} in scaled points ($1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$).
+\item[\texttt{zw}, \texttt{zh}, \texttt{kanjiskip}, \texttt{xkanjiskip}]
+These are scaled value of those specified by the JFM, by the font size.
+\item[\texttt{jfm}]
+The internal number of the JFM.
+\item[\texttt{var}]
+The value of \texttt{jfmvar}~key, which is specified at \cs{jfont}.
+The default value is the empty string.
+\item[\texttt{chars}]
+The mapping table from character codes to its character classes.\\
+The specification \texttt{[i].chars=\{<character>, ...\}} in the JFM will be  stored in this
+          field as \texttt{chars=\{[<character>]=\,$i$, ...\}}.
+\item[\texttt{char\_type}]
+For $i\in\omega$, \texttt{char\_type[$i$]} is information of characters whose class is
+          $i$, and has the following fields:
+\begin{itemize}
+ \item \texttt{width},~\texttt{height}, \texttt{depth},
+  \texttt{italic}, \texttt{down},~\texttt{left}\ are just
+       scaled value of those specified by the JFM, by the font size.
+ \item \texttt{align} is a number which is determined from \texttt{align}~field in the JFM:
+\[
+ \begin{cases}
+  0&\text{\texttt{'left'} (default)}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'}
+ \end{cases}
+\]
+\item For $j\in \omega$, \texttt{[$j$]} stores a kern or a glue which will be inserted
+between character class~$i$ and class~$j$.
+
+If a kern will be inserted, the value of this field is \texttt{[$j$]=\{false, <kern\_node>, <ratio>\}},
+where <kern\_node> is a node\footnote{%
+ This version of \LuaTeX-ja uses ``direct access
+      model'' for accessing nodes, if possible. }.
+If a glue will be inserted, we have \texttt{[$j$]=\{false, <spec\_node>, <ratio>, <icflag>\}},
+where <spec\_node> is also a node, and $\text{<icflag>}=\textit{from\_jfm}+\text{<priority>}$.
+\end{itemize}
+\end{description}
 %</en>
 %<*ja>
-\item OpenType feature(例えばグリフ置換やカーニング)をサポートするための
-  \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない.
-%</ja>
+\verb+jfont_info+ は最低限以下のフィールドを持つが,これらを書き換えてはならない:
+\begin{cslist}
+\item[size]
+実際に使われるフォントサイズ(sp単位).$1\,\mathrm{sp}=2^{-16}\,\mathrm{pt}$.
+\item[zw\textrm{, }zh\textrm{, }kanjiskip\textrm{, }xkanjiskip]
+JFMファイルで指定されているそれぞれの値をフォントサイズに合わせてスケーリングしたものを
+sp単位で格納している.
+\item[jfm]
+利用されているJFMを識別するための番号.
+\item[var]
+\cs{jfont},~\cs{tfont} で指定された \texttt{jfmvar} キーの値(未指定のときは空文字列).
+\item[chars]
+文字コードから文字クラスへの対応が記述されたテーブル.\\
+JFM内の \texttt{[i].chars=\{<character>, ...\}} という指定は\
+\texttt{chars=\{[<character>]=\,$i$, ...\}} という形式に変換されている.
+\item[char\_type]
+$i\in\omega$に対して,\texttt{char\_type[$i$]} は文字クラス$i$の文字の寸法を格納しており,
+以下のフィールドを持つ.
+\begin{itemize}
+ \item \texttt{width},~\texttt{height}, \texttt{depth},
+  \texttt{italic}, \texttt{down},~\texttt{left}\ は
+JFMで指定されているそれぞれの値をスケーリングしたものである.
+ \item \texttt{align} はJFMで指定されている値によって,
+\[
+ \begin{cases}
+  0&\text{\texttt{'left'}や省略時}\\0.5&\text{\tt 'middle'}\\1&\text{\tt 'right'}
+ \end{cases}
+\]
+のいずれかの値をとる.
+\item $j\in \omega$に対して,\texttt{[$j$]} は文字クラス$i$の文字と$j$の文字の間に挿入されるkern
+      やglueを格納している.
+間に入るものがkernであれば,このフィールドの値は\
+\texttt{[$j$]=\{false, <kern\_node>, <ratio>\}} である.
+<kern\_node>はkernを表すノードそのものである\footnote{%
+本バージョンではノードのアクセス手法にdirect access
+      modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし
+      か見えないことに注意.
+}.
+glueであれば,\texttt{[$j$]=\{false, <spec\_node>, <ratio>, <icflag>\}} である.
+<spec\_node>はglueの長さを表すノードそのものであり,
+      $\text{<icflag>}=\textit{from\_jfm}+\text{<priority>}$である.
 \end{itemize}
-
-
-%<en>\paragraph{Additional Syntax of JFM}
-%<ja>\paragraph{JFMへの記法の追加}
+\item[ascent\textrm{, }descent]
+……
+\item[chars\_cbcache]
+……
+\end{cslist}
+%</ja>
 
 %<*en>
-\texttt{luatexja-otf.sty} extends the syntax of JFM; the entries of \texttt{
-chars} table in JFM now allows a string in the form
-\verb+'AJ1-xxx'+, which stands for the character
-whose CID number in Adobe-Japan1 is \verb+xxx+.
+The returned table \verb+new_jfont_info+ also should include these fields, but
+you are free to add more fields (to use them in the \texttt{luatexja.find\_char\_class} callback).
+The \verb+font_number+ is a font number.
 %</en>
 %<*ja>
-\texttt{luatexja-otf.sty}はJFMの記法を拡張する.
-JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形の文字列が
-使えるようになる.これはAdobe-Japan1におけるCID番号が \verb+xxx+ の文字を表す
+戻り値の \verb+new_jfont_info+ テーブルも上に述べたフィールドをそのまま含まなければならないが,
+それ以外にユーザが勝手にフィールドを付け加えることは自由である.
+\verb+font_number+ はフォント番号である
 %</ja>
 
-%<en>\part{Implementations}
-%<ja>\part{実装}
-\label{part-imp}
-%<en>\section{Storing Parameters}
-%<ja>\section{パラメータの保持}
-\label{sec-para}
-%<en>\subsection{Used Dimensions, Attributes and whatsit nodes}
-%<ja>\subsection{\LuaTeX-jaで用いられる寸法レジスタ,属性レジスタ,whatsitノード}
-
 %<*en>
-Here the following is the list of dimensions and attributes which are used in \LuaTeX-ja.
+A good example of this and the next callbacks is the \Pkg{luatexja-otf}
+            package, supporting \verb+"AJ1-xxx"+ form for Adobe-Japan1
+            CID characters in a JFM. This callback doesn't replace any
+            code of \LuaTeX-ja.
 %</en>
 %<*ja>
-以下は\LuaTeX-jaで用いられる寸法レジスタ(dimension),属性レジスタ(attribute)の
-リストである.
+これと次のコールバックの良い使用例は\Pkg{luatexja-otf}パッケージであり,
+JFM中でAdobe-Japan1 CIDの文字を \verb+"AJ1-xxx"+ の形で指定するために
+用いられている.
 %</ja>
-\begin{list}{}{%
-\def\makelabel{\ttfamily}\advance\leftmargin1\zw
-\def\dim#1{\item[\char92 #1\ \textrm{(dimension)}]}
-\def\attr#1{\item[\char92 #1\ \textrm{(attribute)}]}
-}
 
-\dim{jQ}
+%<en>\item[\texttt{luatexja.find\_char\_class} callback]
+%<ja>\item[\texttt{luatexja.find\_char\_class}コールバック]
 %<*en>
-As explained in Subsection~\ref{ssec-plain}, \verb+\jQ+ is equal to
-                       $1\,\textrm{Q}=0.25\,\textrm{mm}$, where `Q'~(also called `級') is
-                       a unit used in Japanese phototypesetting. So one should not change the value of this dimension.
+This callback is called just when \LuaTeX-ja is trying to determine which
+            character class a character \verb+chr_code+ belongs.
+A function used in this callback should be in the following form:
 %</en>
 %<*ja>
-\ref{ssec-plain} 節で述べたように,\verb+\jQ+ は$1\,\textrm{Q}=0.25\,\textrm{mm}$
-と等しい.ここで,`Q'(もしくは「級」)は日本の写植で用いられる単位である.したがって,
-この寸法レジスタの値を変更してはならない.
+このコールバックは\LuaTeX-jaが \verb+chr_code+ の文字がどの文字クラスに
+属するかを決定しようとする際に呼び出される.
+このコールバックで呼び出される関数は次の形をしていなければならない:
 %</ja>
+\begin{lstlisting}[numbers=left]
+function (<number> char_class, <table> jfont_info, <number> chr_code)
+  if char_class~=0 then return char_class
+  else
+    ....
+    return (<number> new_char_class or 0)
+  end
+end
+\end{lstlisting}
 
-\dim{jH}
 %<*en>
-There is also a unit called `歯' which equals to $0.25\,\textrm{mm}$ and
-                       used in Japanese phototypesetting. This
-                       \verb+\jH+ is a synonym of \verb+\jQ+.
+The argument \verb+char_class+ is the result of \LuaTeX-ja's default
+            routine or previous function calls in this callback, hence
+            this argument may not be 0. Moreover, the returned
+            \verb+new_char_class+ should be as same as \verb+char_class+ when \verb+char_class+
+            is not~0, otherwise you will overwrite the \LuaTeX-ja's
+            default routine.
 %</en>
 %<*ja>
-同じく写植で用いられていた単位として「歯」があり,これは$0.25\,\textrm{mm}$と
-等しい.\verb+\jH+ は \verb+\jQ+ の別名である.
+引数 \verb+char_class+ は\LuaTeX-jaのデフォルトルーチンか,このコールバックの
+直前の関数呼び出しの結果を含んでおり,したがってこの値は0ではないかもしれない.
+さらに,戻り値の \verb+new_char_class+ は \verb+char_class+ が非零のときには
+\verb+char_class+ の値と同じであるべきで,そうでないときは\LuaTeX-jaの
+デフォルトルーチンを書き換えることになる.
 %</ja>
 
-\dim{ltj@zw}
+%<en>\item[\texttt{luatexja.set\_width} callback]
+%<ja>\item[\texttt{luatexja.set\_width}コールバック]
 %<*en>
-A temporal register for the `full-width' of current Japanese font.
+This callback is called when \LuaTeX-ja is trying to encapsule a
+            \textbf{JAchar} \textit{glyph\_node}, to adjust its
+            dimension and position.
 %</en>
 %<*ja>
-現在の和文フォントの「全角幅」を保持する一時レジスタ.
+このコールバックは\LuaTeX-jaが\textbf{JAchar}の寸法と位置を調節するために
+その\textit{glyph\_node}をカプセル化しようとする際に呼び出される.
 %</ja>
+\begin{lstlisting}[numbers=left]
+function (<table> shift_info, <table> jfont_info, <table> char_type)
+  return <table> new_shift_info
+end
+\end{lstlisting}
 
-\dim{ltj@zh}
 %<*en>
-A temporal register for the `full-height' (usually the sum of height of imaginary body and its depth) of current Japanese font.
+The argument \verb+shift_info+ and the returned \verb+new_shift_info+ have
+\texttt{down} and \texttt{left} fields, which are the amount of shifting
+            down/left the character in a scaled point.
 %</en>
 %<*ja>
-現在の和文フォントの「全角高さ」(通常,高さと深さの和)を保持する一時レジスタ.
+引数 \verb+shift_info+ と戻り値の \verb+new_shift_info+ は
+\texttt{down}と\texttt{left}のフィールドを持ち,これらの値は
+文字の下/左へのシフト量(sp単位)である.
 %</ja>
 
-\attr{jfam}
 %<*en>
-Current number of Japanese font family for math formulas.
+A good example is \Pkg{test/valign.lua}.
+After loading this file, the vertical position of glyphs is automatically
+adjusted; the ratio $(\hbox{height}:\hbox{depth})$ of glyphs is adjusted
+to be that of letters in the character class~0. For example, suppose that
+\begin{itemize}
+\item The setting of the JFM: $(\hbox{height})=88x$, $(\hbox{depth})=12x$
+  (the standard values of Japanese OpenType fonts);
+\item The value of the real font: $(\hbox{height})=28y$, $(\hbox{depth})=5y$
+  (the standard values of Japanese TrueType fonts).
+\end{itemize}
+Then, the position of glyphs is shifted up by
 %</en>
 %<*ja>
-数式用の和文フォントファミリの現在の番号.
+良い例が\Pkg{test/valign.lua}である.このファイルが読み込まれた状態では,
+            JFM内で規定された文字クラス0の文字における$(\hbox{高
+            さ}):(\hbox{深さ})$の比になるように,実際のフォントの出力上
+            下位置が自動調整される.例えば,
+\begin{itemize}
+\item JFM側の設定:$(\hbox{高さ})=88x$, $(\hbox{深さ})=12x$%
+(和文OpenTypeフォントの標準値)
+\item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値)
+\end{itemize}
+となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にずらされることとなる:
 %</ja>
+\[
+ \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y.
+\]
+\end{description}
+
+
+
+%<en>\section{Parameters}
+%<ja>\section{パラメータ}
+\subsection{\cs{ltjsetparameter}}
+\label{ssec-param}
 
-\attr{ltj@curjfnt}
 %<*en>
-The font index of current Japanese font.
+As described before, \cs{ltjsetparameter} and \cs{ltjgetparameter} are
+commands for accessing most parameters of \LuaTeX-ja. One of the main
+reason that \LuaTeX-ja didn't adopted the syntax similar to that of \pTeX\
+(\textit{e.g.},~\verb+\prebreakpenalty`)=10000+)
+is the position of \verb+hpack_filter+ callback in the source
+of \LuaTeX, see Section~\ref{sec-para}.
 %</en>
 %<*ja>
-現在の和文フォントのフォント番号.
+先に述べたように,\LuaTeX-jaの内部パラメータにアクセスするには
+\cs{ltjsetparameter}(または \cs{ltjglobalsetparameter})と \cs{ltjgetparameter} を用いる.
+\LuaTeX-jaが\pTeX のような文法(例えば,\verb+\prebreakpenalty`)=10000+)を
+採用しない理由の一つは,\LuaTeX のソースにおける \verb+hpack_filter+
+コールバックの位置にある.\ref{sec-para}章を参照.
 %</ja>
 
-\attr{ltj@charclass}
 %<*en>
-The character class of Japanese \textit{glyph\_node}.
+\cs{ltjsetparameter} and \cs{ltjglobalsetparameter} are commands
+for assigning parameters. These take one argument which is a
+\texttt{<key>=<value>} list.
+The difference between these two commands is the
+scope of assignment;
+\cs{ltjsetparameter} does a local assignment and
+\cs{ltjglobalsetparameter} does a global one.
+They also obey the value of \cs{globaldefs}, like other assignments.
 %</en>
 %<*ja>
-和文文字の\textit{glyph\_node}の文字クラス.
+\cs{ltjsetparameter} と \cs{ltjglobalsetparameter} はパラメータを
+指定するための命令で,\texttt{<key>=<value>}のリストを
+引数としてとる.両者の違いはスコープであり,
+\cs{ltjsetparameter} はローカルな設定を行うのに対し,
+\cs{ltjglobalsetparameter} はグローバルな設定を行う.
+また,他のパラメータ指定と同様に \cs{globaldefs} の値にも従う.
 %</ja>
 
-\attr{ltj@yablshift}
 %<*en>
-The amount of shifting the baseline of alphabetic fonts in scaled point ($2^{-16}\,\textrm{pt}$).
+The following is the list of parameters which can be specified by the
+\cs{ltjsetparameter} command. [\cs{cs}] indicates the counterpart
+in \pTeX, and symbols beside each parameter has the following meaning:
 %</en>
 %<*ja>
-スケールド・ポイント($2^{-16}\,\textrm{pt}$)を単位とした欧文フォントのベースラインの移動量.
+以下は \cs{ltjsetparameter} に指定することができるパラメータの一覧である.
+[\cs{cs}]は\pTeX における対応物を示す.
+また,それぞれのパラメータの右上の記号には次の意味がある:
 %</ja>
-
-\attr{ltj@ykblshift}
+\begin{itemize}
 %<*en>
-The amount of shifting the baseline of Japanese fonts in scaled point ($2^{-16}\,\textrm{pt}$).
+\item ``\ast'' : values at the end of a paragraph or a hbox are
+adopted in the whole paragraph or the whole hbox.
 %</en>
 %<*ja>
-スケールド・ポイント($2^{-16}\,\textrm{pt}$)を単位とした和文フォントのベースラインの移動量
+\item ``\ast'':段落やhboxの終端での値がその段落/hbox全体で用いられる
 %</ja>
-
-\attr{ltj@autospc}
 %<*en>
-Whether the auto insertion of \Param{kanjiskip} is allowed at the node.
+\item ``\dagger'': assignments are always global.
 %</en>
 %<*ja>
-ã\81\9dã\81®ã\83\8eã\83¼ã\83\89ã\81§\Param{kanjiskip}ã\81®è\87ªå\8b\95æ\8c¿å\85¥ã\81\8c許ã\81\95ã\82\8cã\82\8bã\81\8bã\81©ã\81\86ã\81\8bï¼\8e
+\item ``\dagger''ï¼\9aæ\8c\87å®\9aã\81¯å¸¸ã\81«ã\82°ã\83­ã\83¼ã\83\90ã\83«ã\81«ã\81ªã\82\8bï¼\8e
 %</ja>
+\end{itemize}
+
+\begin{cslist}[style=standard]
+\item[\DParam{jcharwidowpenalty}\,=<penalty>$^\ast$] [\cs{jcharwidowpenalty}]\
 
-\attr{ltj@autoxspc}
 %<*en>
-Whether the auto insertion of \Param{xkanjiskip} is allowed at the node.
+Penalty value for suppressing orphans. This penalty is inserted just
+            after the last \textbf{JAchar} which is not regarded as a
+            (Japanese) punctuation mark.
 %</en>
 %<*ja>
-そのノードで\Param{xkanjiskip}の自動挿入が許されるかどうか.
+パラグラフの最後の字が孤立して改行されるのを防ぐためのペナルティの値.
+このペナルティは(日本語の)句読点として扱われない最後の\textbf{JAchar}の直後に
+挿入される.
 %</ja>
 
-\attr{ltj@icflag}
+\item[\DParam{kcatcode}\,=\{<chr\_code>,<natural number>\}$^\ast$]\
+
 %<*en>
-An attribute for distinguishing `kinds' of a node. One of the following value is
-assigned to this attribute:
+An additional attributes which each character whose character code is <chr\_code> has.
+At the present version, the lowermost bit of <natural number> indicates
+            whether the character is considered as a punctuation mark
+            (see the description of \Param{jcharwidowpenalty} above).
 %</en>
 %<*ja>
-ノードの「種類」を区別するための属性.以下のうちのひとつが値として割り当てられる:
+文字コードが<chr\_code>の文字が持つ付加的な属性値.
+現在のバージョンでは,<natural number>の最下位ビットが,その文字が句読点と
+みなされるかどうかを表している(上の\Param{jcharwidowpenalty}の記述を参照).
+%</ja>
+
+\item[\DParam{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}$^\ast$] [\cs{prebreakpenalty}]\
+
+%<*ja>
+文字コード<chr\_code>の\textbf{JAchar}が行頭にくることを抑止するために,
+            この文字の前に挿入/追加されるペナルティの量を指定する.
+
+例えば閉じ括弧「〗」は絶対に行頭にきてはならないので,
+\begin{lstlisting}
+\ltjsetparameter{prebreakpenalty={`〙,10000}}
+\end{lstlisting}
+と,最大値の10000が標準で指定されている.他にも,小書きのカナなど,絶対禁止とい
+            うわけではないができれば行頭にはきて欲しくない場合に,0と
+            10000の間の値を指定するのも有用であろう.
+
+\pTeX では,\cs{prebreakpenalty}, \cs{postbreakpenalty}において,
+\begin{itemize}
+\item 一つの文字に対して,pre, postどちらか一つしか指定することができない%
+  \footnote{後から指定した方で上書きされる.}
+\item pre, post合わせて256文字分の情報を格納することしかできない
+\end{itemize}
+という制限があったが,\LuaTeX-jaではこれらの制限は解消されている.
 %</ja>
-\begin{description}
-\item[\textit{italic} (1)]
 %<*en>
-Glues from an italic correction
-          (\verb+\/+). This distinction of origins of glues
-          (from explicit \verb+\kern+, or from \verb+\/+)
-          is needed in the insertion process of \Param{xkanjiskip}.
+Set a penalty which is inserted automatically before the character <chr\_code>,
+to prevent a line starts from this character. For example, a line cannot started
+with one of closing brackets ``〗'', so \LuaTeX-ja sets
+\begin{lstlisting}
+\ltjsetparameter{prebreakpenalty={`〙,10000}}
+\end{lstlisting}
+by default.
+
+\pTeX\ has following restrictions on \cs{prebreakpenalty} and \cs{postbreakpenalty},
+but they don't exist in \LuaTeX-ja:
+\begin{itemize}
+ \item Both \cs{prebreakpenalty} and \cs{postbreakpenalty} cannot be set
+for the same character.
+ \item We can set \cs{prebreakpenalty} and \cs{postbreakpenalty} up to 256~characters.
+\end{itemize}
 %</en>
+
+\item[\DParam{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}$^\ast$]
+          [\cs{postbreakpenalty}]\
+
 %<*ja>
-イタリック補正(\verb+\/+)によるグルー.このグルーの由来の区別(\verb+\kern+ か
-\verb+\/+ か)は\Param{xkanjiskip}の挿入過程において必要になる.
+文字コード<chr\_code>の\textbf{JAchar}が行末にくることを抑止するために,
+            この文字の後に挿入/追加されるペナルティの量を指定する.
 %</ja>
+%<*en>
+Set a penalty which is inserted automatically after the character <chr\_code>,
+to prevent a line ends with this character.
+%</en>
 
-\item[\textit{packed} (2)]
+\item[\DParam{jatextfont}\,=\{<jfam>,<jfont\_cs>\}$^\ast$]
+%<en>[\cs{textfont} in \TeX]
+%<ja>[\TeX の \cs{textfont}]
+\item[\DParam{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}$^\ast$]
+%<en>[\cs{scriptfont} in \TeX]
+%<ja>[\TeX の \cs{scriptfont}]
+\item[\DParam{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}$^\ast$]
+%<en>[\cs{scriptscriptfont} in \TeX]
+%<ja>[\TeX の \cs{scriptscriptfont}]
+\item[\DParam{yjabaselineshift}\,=<dimen>]\
+\item[\DParam{yalbaselineshift}\,=<dimen>] [\cs{ybaselineshift}]
+\item[\DParam{tjabaselineshift}\,=<dimen>]\
+\item[\DParam{talbaselineshift}\,=<dimen>] [\cs{tbaselineshift}]
+
+\item[\DParam{jaxspmode}\,=\{<chr\_code>,<mode>\}$^\ast$]\
 
-\item[\textit{kinsoku} (3)]
 %<*en>
-Penalties inserted for the word-wrapping process of Japanese characters (\emph{kinsoku}).
+Set whether inserting \Param{xkanjiskip} is allowed before/after a \textbf{JAchar} whose character code is <chr\_code>.
+The followings are allowed for <mode>:
 %</en>
 %<*ja>
-和文文字のワードラップ過程において挿入されたペナルティ(\emph{kinsoku}).
+文字コードが<chr\_code>の\textbf{JAchar}の前/後ろに\Param{xkanjiskip}の
+挿入を許すかどうかの設定.
+以下の<mode>が許される:
 %</ja>
-
-\item[\textit{from\_jfm} (4)]
+\begin{description}
+%<en>\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character.
+%<ja>\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される.
+%<en>\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after.
+%<ja>\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない.
+%<en>\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before.
+%<ja>\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない.
+%<en>\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed both before the character and after the character. This is the default value.
+%<ja>\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である.
+\end{description}
 %<*en>
-Glues/kerns from JFM.
+This parameter is similar to the \cs{inhibitxspcode} primitive of \pTeX, but not compatible with \cs{inhibitxspcode}.
 %</en>
 %<*ja>
-JFM由来のグルー/カーン.
+このパラメータは\pTeX の \cs{inhibitxspcode} プリミティブと似ているが,
+互換性はない.
 %</ja>
+\item[\DParam{alxspmode}\,=\{<chr\_code>,<mode>\}$^\ast$] [\cs{xspcode}]\
 
-\item[\textit{line\_end} (5)]
 %<*en>
-Kerns for ...
+Set whether inserting \Param{xkanjiskip} is allowed before/after a
+            \textbf{ALchar} whose character code is <chr\_code>.
+             The followings are allowed for <mode>:
+%</en>
+%<*ja>
+文字コードが<chr\_code>の\textbf{ALchar}の前/後ろに\Param{xkanjiskip}の
+挿入を許すかどうかの設定.
+以下の<mode>が許される:
+%</ja>
+\begin{description}
+%<en>\item[0, \texttt{inhibit}] Insertion of \Param{xkanjiskip} is inhibited before the character, nor after the character.
+%<ja>\item[0, \texttt{inhibit}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも禁止される.
+%<en>\item[1, \texttt{preonly}] Insertion of \Param{xkanjiskip} is allowed before the character, but not after.
+%<ja>\item[1, \texttt{preonly}] \Param{xkanjiskip}の挿入は文字の前では許されるが,後ろでは許されない.
+%<en>\item[2, \texttt{postonly}] Insertion of \Param{xkanjiskip} is allowed after the character, but not before.
+%<ja>\item[2, \texttt{postonly}] \Param{xkanjiskip}の挿入は文字の後ろでは許されるが,前では許されない.
+%<en>\item[3, \texttt{allow}] Insertion of \Param{xkanjiskip} is allowed before the character and after the character. This is the default value.
+%<ja>\item[3, \texttt{allow}] \Param{xkanjiskip}の挿入は文字の前/後ろのいずれでも許される.これがデフォルトの値である.
+\end{description}
+%<*en>
+Note that parameters \Param{jaxspmode} and \Param{alxspmode} share a common table, hence these two parameters are synonyms of each other.
 %</en>
 %<*ja>
-カーン ...
+\Param{jaxspmode}と\Param{alxspmode}は共通のテーブルを用いているため,
+これら2つのパラメータは互いの別名となっていることに注意する.
 %</ja>
 
-\item[\textit{kanji\_skip} (6)]
+\item[\DParam{autospacing}\,=<bool>] [\cs{autospacing}]
+\item[\DParam{autoxspacing}\,=<bool>] [\cs{autoxspacing}]
+\item[\DParam{kanjiskip}\,=<skip>$^\ast$] [\cs{kanjiskip}]\
+
+%<*ja>
+デフォルトで2つの\textbf{JAchar}の間に挿入されるグルーである.
+通常では,\pTeX と同じようにフォントサイズに比例して変わることはない.
+しかし,自然長が \cs{maxdimen} の場合は,例外的に和文フォントのJFM側で指定されている
+値を採用(こちらはフォントサイズに比例)することになっている.
+%</ja>
 %<*en>
-Glues for \Param{kanjiskip}.
+The default glue which inserted between two \textbf{JAchar}s.
+Changing current Japanese font does not alter this parameter, as \pTeX.
+
+If the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses
+the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}).
 %</en>
+
+\item[\DParam{xkanjiskip}\,=<skip>$^\ast$] [\cs{xkanjiskip}]\
+
 %<*ja>
-\Param{kanjiskip}のグルー.
+デフォルトで\textbf{JAchar}と\textbf{ALchar}の間に挿入されるグルーである.
+\Param{kanjiskip}と同じように,通常ではフォントサイズに比例して変わることはないが,
+自然長が \cs{maxdimen} の場合が例外である.
 %</ja>
+%<*en>
+The default glue which inserted between a \textbf{JAchar} and an
+      \textbf{ALchar}.
+Changing current font does not alter this parameter, as \pTeX.
+
+As \Param{kanjiskip}, if the natural width of this parameter is \cs{maxdimen}, \LuaTeX-ja uses
+the value which is specified in the JFM for current Japanese font (See Subsection~\ref{ssec-jfm-str}).
+%</en>
+
+
+\item[\DParam{differentjfm}\,=<mode>$^\dagger$]\
 
-\item[\textit{xkanji\_skip} (7)]
 %<*en>
-Glues for \Param{xkanjiskip}.
+Specify how glues/kerns between two \textbf{JAchar}s whose JFM (or size) are different.
+The allowed arguments are the followings:
 %</en>
 %<*ja>
-\Param{xkanjiskip}のグルー.
+JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグルー/カーンをどのように
+入れるかを指定する.
+許される値は以下の通り:
 %</ja>
-
-\item[\textit{processed} (8)]
+\begin{quote}
+\texttt{average},
+\texttt{both},
+\texttt{large},
+\texttt{small},
+\texttt{pleft},
+\texttt{pright},
+\texttt{paverage}
+\end{quote}
 %<*en>
-Nodes which is already processed by ...
+The default value is \texttt{paverage}. \dots
 %</en>
 %<*ja>
-... によって既に処理されたノード.
+デフォルト値は \texttt{paverage} である.
+各々の値による差異の詳細は\ref{ssec-cluster-wa}節の「『右空白』の算出」を参照してほしい.
 %</ja>
 
-\item[\textit{ic\_processed} (9)]
+\item[\DParam{jacharrange}\,=<ranges>]
+\item[\DParam{kansujichar}\,=\{<digit>, <chr\_code>\}$^\ast$] [\cs{kansujichar}]
+
+\item[\DParam{direction}\,=<dir>\ \hbox{\rm (always local)}]\
+
 %<*en>
-Glues from an italic correction, but also already processed.
+Assigning to this parameter has the same effect as
+\cs{yoko}~(if $\hbox{<dir>}=4$), \cs{tate}~(if $\hbox{<dir>}=3$),
+\cs{dtou}~(if $\hbox{<dir>}=1$) or \cs{utod}~(if $\hbox{<dir>}=11$).
+If the argument <dir> is not one of 4,~3, 1~nor~11,
+the behavior of this assignment is undefined.
 %</en>
 %<*ja>
-イタリック補正に由来するグルーであるが,まだ処理されていないもの.
+組方向を変更する \cs{yoko}~(if $\hbox{<dir>}=4$), \cs{tate}~(if $\hbox{<dir>}=3$),
+\cs{dtou}~(if $\hbox{<dir>}=1$), \cs{utod}~(if $\hbox{<dir>}=11$) と同じ役割を持つ.
+利用可能な状況もこれら4命令と同一である.引数<dir>が4,~3, 1,~11のいずれでも無いときの
+動作は未定義である.
 %</ja>
 
-\item[\textit{boxbdd} (15)]
+\end{cslist}
+
+
+\subsection{\cs{ltjgetparameter}}
+\label{ssec-getpar}
 %<*en>
-Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
+\cs{ltjgetparameter} is a control sequence for acquiring parameters. It
+always takes a parameter name as first argument.
 %</en>
 %<*ja>
-ある水平ボックスか段落の最初か最後に挿入されたグルー/カーン.
+\cs{ltjgetparameter} はパラメータの値を取得するための命令であり,
+常にパラメータの名前を第一引数にとる.
 %</ja>
-\end{description}
+\begin{LTXexample}
+\ltjgetparameter{differentjfm},
+\ltjgetparameter{autospacing},
+\ltjgetparameter{kanjiskip},
+\ltjgetparameter{prebreakpenalty}{`)}.
+\end{LTXexample}
 
-\attr{ltj@kcat$i$}
 %<*en>
-Where $i$~is a natural number which is less than~7.
-These 7~attributes store bit~vectors indicating which character block is regarded as a block of \textbf{JAchar}s.
+\emph{The return value of\/ \cs{ltjgetparameter} is
+always a string}, which is outputted by \texttt{tex.write()}.
+Hence any character other than space~``\texttt{\char32}''~(\texttt{U+0020}) has the category code
+12~(other), while the space has 10~(space).
 %</en>
 %<*ja>
-$i$は7より小さい自然数.
-これら7つの属性レジスタは,どの文字ブロックが\textbf{JAchar}のブロックとして
-扱われるかを示すビットベクトルを格納する.
+\emph{\cs{ltjgetparameter} の戻り値は常に文字列である.}
+これは\texttt{tex.write()}によって出力しているためで,空白「\texttt{\char32}」
+(\texttt{U+0020})を除いた文字のカテゴリーコードは全て12~(other)となる.
+一方,空白のカテゴリーコードは10~(space)である.
 %</ja>
-\end{list}
 
+\begin{itemize}
+\item
 %<*en>
-Furthermore, \LuaTeX-ja uses several `user-defined' whatsit nodes for
-inrernal processing. All those nodes store a natural number (hence the node's
-\texttt{type} is 100). The following \verb+user_id+s are used:
+If first argument is one of the
+following, no  additional argument is needed.
 %</en>
 %<*ja>
-さらに,\LuaTeX-jaはいくつかの「ユーザ定義の」whatsit ノードを内部処理に用いる.
-これらの全てのノードは自然数を格納している(したがってノードの\texttt{type}は
-100である).次の \verb+user_id+ が使用される:
+第1引数が次のいずれかの場合には,追加の引数は必要ない.
 %</ja>
-\begin{description}
-\item[30111]
+\begin{quote}
+\sffamily
+jcharwidowpenalty, yjabaselineshift, yalbaselineshift, autospacing, autoxspacing,\\
+kanjiskip, xkanjiskip, differentjfm, direction
+\end{quote}
 %<*en>
-Nodes for indicating that \verb+\inhibitglue+ is
-          specified. The \texttt{value} field of these nodes doesn't matter.
+Note that \verb+\ltjgetparameter{autospacing}+~and~\verb+\ltjgetparameter{autoxspacing}+
+returns 1 or 0, not
+\texttt{true}~nor~\texttt{false}.
 %</en>
 %<*ja>
-\verb+\inhibitglue+ が指定されたことを示すノード.これらのノードの
-\texttt{value}フィールドは意味を持たない.
+\verb+\ltjgetparameter{autospacing}+ と \verb+\ltjgetparameter{autoxspacing}+ は,
+\texttt{true}や\texttt{false}を返すの\emph{ではなく},
+1か0のいずれかを返すことに注意,
 %</ja>
 
-\item[30112]
+\item
 %<*en>
-Nodes for \LuaTeX-ja's stack system (see the next
-          subsection). The \texttt{value} field of these nodes is
-          current group.
+If first argument is one of the
+following, an additional argument---a character code, for example---is needed.
 %</en>
 %<*ja>
-\LuaTeX-jaのスタックシステム(次の節を参照)のためのノード.
-これらのノードの\texttt{value}フィールドは現在のグループを表す.
+第1引数が次のいずれかの場合には,さらに文字コードを第2引数としてとる.
 %</ja>
-
-\item[30113]
+\begin{quote}
+\sffamily
+kcatcode, prebreakpenalty, postbreakpenalty, jaxspmode, alxspmode
+\end{quote}
 %<*en>
-Nodes for Japanese Characters which the callback process of
-          \Pkg{luaotfload} won't be applied, and the character code is
-          stored in the \texttt{value} field. Each node having this
-          \verb+user_id+ is converted to a `glyph\_node' \emph{after}
-          the callback process of luaotfload.
-          This \verb+user_id+ is only used by the \Pkg{luatexja-otf} package.
+\verb+\ltjgetparameter{jaxspmode}{...}+~and~\verb+\ltjgetparameter{alxspmode}{...}+
+returns 0,~1, 2,~or~3, instead of \texttt{preonly} etc.
 %</en>
 %<*ja>
-\Pkg{luaotfload}のコールバックによる処理が適用されない和文文字のためのノードで,
-\texttt{value}フィールドにその文字のコードが格納されている.
-この \verb+user_id+ を持つノードはそれぞれが\Pkg{luaotfload}のコールバックの処理の
-\textbf{後で}`glyph\_node'に変換される.この \verb+user_id+ は %
-\Pkg{luatexja-otf} パッケージでのみ使用される.
+\verb+\ltjgetparameter{jaxspmode}{...}+ や \verb+\ltjgetparameter{alxspmode}{...}+\
+は,\texttt{preonly} などといった文字列ではなく,0から3までの値を返す.
 %</ja>
 
-\item[30114]
-Nodes for indicating beginning of a paragraph. 
-A paragraph which is started by \verb+\item+ in list-like environments has a horizontal box
-for its label before the actual contents. So \dots
-\end{description}
+\item
 %<*en>
-These whatsits will be removed during the process of inserting \textbf{JAglue}s.
+\verb+\ltjgetparameter{jacharrange}{+<range>\verb+}+ returns \texttt{0}
+if ``characters which belong to the character range~<range> are \textbf{JAchar}'',
+\texttt{1} if ``\dots~are \textbf{ALchar}''.
+Although there is no character range~$-1$, specifying $-1$ to <range> does not cause an
+      error (returns 1).
 %</en>
 %<*ja>
-これらのwhatsitノードは\textbf{JAglue}の挿入処理の間に取り除かれる.
+\verb+\ltjgetparameter{jacharrange}{+<range>\verb+}+ は,<range>が\textbf{JAchar}達の
+範囲ならば0を,そうでなければ1を返す.「$-1$番の文字範囲」は存在しないが,<range>に$-1$を
+指定してもエラーは発生しない(1を返す).
 %</ja>
 
-%<en>\subsection{Stack System of \LuaTeX-ja}
-%<ja>\subsection{\LuaTeX-jaのスタックシステム}
-\label{ssec-stack}
-
-%<en>\paragraph{Background}
-%<ja>\paragraph{背景}
+\item
 %<*en>
-\LuaTeX-ja has its own stack system, and most parameters of \LuaTeX-ja
-are stored in it. To clarify the reason, imagine the parameter
-\Param{kanjiskip} is stored by a skip, and consider the following
-source:
+For an integer~<digit> between 0~and~9,
+     \verb+\ltjgetparameter{kansujichar}{+<digit>\verb+}+ returns the character code
+of the result of \cs{kansuji}<digit>.
 %</en>
 %<*ja>
-\LuaTeX-jaは独自のスタックシステムを持ち,\LuaTeX-jaのほとんどのパラメータは
-これを用いて保持されている.その理由を明らかにするために,
-\Param{kanjiskip}パラメータがスキップレジスタで保持されているとし,
-以下のコードを考えてみよう:
+0--9の数<digit>に対して,
+\verb+\ltjgetparameter{kansujichar}{+<digit>\verb+}+ は,\cs{kansuji}<digit>で出力され
+     る文字の文字コードを返す.
 %</ja>
-\begin{LTXexample}
-\ltjsetparameter{kanjiskip=0pt}ふがふが.%
-\setbox0=\hbox{\ltjsetparameter{kanjiskip=5pt}ほげほげ}
-\box0.ぴよぴよ\par
-\end{LTXexample}
 
+\item
 %<*en>
-As described in Subsection~\ref{ssec-param}, the only effective value of
-\Param{kanjiskip} in an hbox is the latest value, so the value of
-\Param{kanjiskip} which applied in the entire hbox should be 5\,pt.
-However, by the implementation method of \LuaTeX, this `5\,pt' cannot be
-known from any callbacks.  In the \texttt{tex/packaging.w} (which is a
-file in the source of \LuaTeX), there are the following codes:
+\verb+\ltjgetparameter{adjustdir}+ returns a integer which represents
+the direction of the surrounding vertical list.
+As \Param{direction}, the return value 1 means \emph{down-to-up} direction,
+3 means \emph{tate} direction (vertical typesetting),
+and 4 means \emph{yoko} direction (horizontal typesetting).
 %</en>
 %<*ja>
-\ref{ssec-param} 節で述べたように,ある水平ボックスの中で効力を持つ
-\Param{kanjiskip}の値は最後に現れた値のみであり,したがってボックス全体に適用される
-\Param{kanjiskip}は5\,ptであるべきである.しかし,\LuaTeX の実装のために,
-この`5\,pt'はどのコールバックからも知ることはできない.
-\texttt{tex/packaging.w}(これは\LuaTeX のソースファイルである)の中に,
-以下のコードがある:
+\verb+\ltjgetparameter{adjustdir}+ は,周囲のvboxの組方向(言い換えれば,
+\cs{vadjust} で用いられる組方向)を表す数値を返す.
+\Param{direction}と同様に,1は \cs{dtou} 方向を,
+3は縦組みを,4は横組みを表す.
 %</ja>
-\begin{lstlisting}
-void package(int c)
-{
-    scaled h;                   /* height of box */
-    halfword p;                 /* first node in a box */
-    scaled d;                   /* max depth */
-    int grp;
-    grp = cur_group;
-    d = box_max_depth;
-    unsave();
-    save_ptr -= 4;
-    if (cur_list.mode_field == -hmode) {
-        cur_box = filtered_hpack(cur_list.head_field,
-                                 cur_list.tail_field, saved_value(1),
-                                 saved_level(1), grp, saved_level(2));
-        subtype(cur_box) = HLIST_SUBTYPE_HBOX;
-\end{lstlisting}
+
+\item
 %<*en>
-Notice that \verb+unsave+ is executed \emph{before}
-\verb+filtered_hpack+ (this is where \verb+hpack_filter+ callback is
-executed): so `5\,pt' in the above source is orphaned at
-\verb+unsave+, and hence it can't be accessed from \verb+hpack_filter+
-callback.
+For an integer~<reg\_num> between 0~and~65535,
+\verb+\ltjgetparameter{boxdim}{+<reg\_num>\verb+}+ returns the direction of
+\cs{box}<reg\_num>. If this box register is void, the returned value is zero.
 %</en>
 %<*ja>
-\verb+unsave+ が \verb+filtered_hpack+(これは \verb+hpack_filter+ コールバックが
-実行されるところである)の\textbf{前に}実行されていることに注意する.
-したがって,上記ソース中で`5\,pt'は \verb+unsave+ のところで捨てられ,
-\verb+hpack_filter+ からはアクセスすることができない.
+0--65535の数<reg\_num>に対して,
+\verb+\ltjgetparameter{boxdim}{+<reg\_num>\verb+}+ は,\cs{box}<reg\_num>に
+格納されているボックスの組方向を表す.もしこのレジスタが空の場合は,0が返される.
 %</ja>
 
-%<en>\paragraph{The method}
-%<ja>\paragraph{解決法}
-
+\item
 %<*en>
-The code of stack system is based on that in a post of Dev-luatex mailing list\footnote{%
-\texttt{[Dev-luatex] tex.currentgrouplevel}, a post at 2008/8/19 by Jonathan Sauer.}.
+The following parameter names \emph{cannot be specified} in \cs{ltjgetparameter}.
 %</en>
 %<*ja>
-スタックシステムのコードはDev-luatexメーリングリストのある投稿\footnote{\texttt{[Dev-luatex] tex.currentgrouplevel}: Jonathan Sauerによる2008/8/19の投稿.}を
-ベースにしている.
+次のパラメータ名を \cs{ltjgetparameter} に指定することはできない.
 %</ja>
+\begin{quote}
+\sffamily
+jatextfont, jascriptfont, jascriptscriptfont, jacharrange
+\end{quote}
 
+\item
 %<*en>
-These are two \TeX\ count registers for maintaining information:
-\verb+\ltj@@stack+ for the stack level, and \verb+\ltj@@group@level+ for
-the \TeX's group level when the last assignment was done.  Parameters
-are stored in one big table named \texttt{charprop\_stack\_table}, where
-\texttt{charprop\_stack\_table[$i$]} stores data of stack level~$i$. If
-a new stack level is created by \verb+\ltjsetparameter+, all data of the
-previous level is copied.
+\verb+\ltjgetparameter{chartorange}{+<chr\_code>\verb+}+ returns
+the range number which <chr\_code> belongs to
+(although there is no parameter named ``chartorange'').
+
+If <chr\_code> is between 0 and 127, this <chr\_code> does not belong to
+any character range. In this case,
+      \verb+\ltjgetparameter{chartorange}{+<chr\_code>\verb+}+
+returns $-1$.
+
+Hence, one can know whether <chr\_code> is \textbf{JAchar} or not
+by the following:
 %</en>
 %<*ja>
-情報を保持するために,2つの\TeX の整数レジスタを用いている:
-\verb+\ltj@@stack+ でスタックレベル,\verb+\ltj@@group@level+ で最後の代入が
-なされた時点での\TeX のグループレベルを保持している.
-パラメータは\texttt{charprop\_stack\_table}という名前のひとつの大きなテーブルに
-格納される.ここで,\texttt{charprop\_stack\_table[$i$]}はスタックレベル$i$の
-データを格納している.もし新しいスタックレベルが \verb+\ltjsetparameter+ によって
-生成されたら,前のレベルの全てのデータがコピーされる.
+\verb+\ltjgetparameter{chartorange}{+<chr\_code>\verb+}+ によって
+<chr\_code>の属する文字範囲の番号を知ることができる.
+
+<chr\_code>に0--127の値を指定した場合(このとき,<chr\_code>が属する
+文字範囲は存在しない)は$-1$が返る.
+
+そのため,<chr\_code>が\textbf{JAchar}か\textbf{ALchar}かは
+次で知ることができる:
 %</ja>
+\begin{quote}
+\ttfamily \verb+\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{+%
+  <chr\_code>\verb+}}+\\\null\hfill\verb+% 0 if JAchar, 1 if ALchar+
+\end{quote}
 
 %<*en>
-To resolve the problem mentioned in `Background' above, \LuaTeX-ja uses
-another thing: When a new stack level is about to be created, a whatsit
-node whose type, subtype and value are 44~(\textit{user\_defined}),
-30112, and current group level respectively is appended to the current
-list (we refer this node by \textit{stack\_flag}). This enables us to
-know whether assignment is done just inside a hbox. Suppose that the
-stack level is~$s$ and the \TeX's group level is~$t$ just after the hbox
-group, then:
+\item Because the returned value is string, the following conditionals do not work
+if \Param{kanjiskip} (or~\Param{xkanjiskip}) has the stretch part or the shrink part.
+\begin{lstlisting}
+\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi
+\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi
+\end{lstlisting}
+The correct way is using a temporary register.
+\begin{lstlisting}
+\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi
+\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi
+\end{lstlisting}
 %</en>
 %<*ja>
-上の「背景」で述べた問題を解決するために,\LuaTeX-jaではもう一つの手法を導入する:
-新しいスタックレベルが生成されようとするとき,type, subtype, valueがそれぞれ
-44~(\textit{user\_defined}), 30112,そして現在のグループレベルであるwhatsitノード
-を現在のリストに付け加える(このノードを\textit{stack\_flag}とする).
-これにより,ある水平ボックスの中で代入がなされたかどうかを知ることが可能
-となる.スタックレベルを$s$,その水平ボックスグループの直後の\TeX のグループレベルを
-$t$とすると:
+\item 返り値が文字列であることから,\Param{kanjiskip}や\Param{xkanjiskip}を直接
+\ \cs{ifdim} を使って比較することは望ましくない.伸び量や縮み量を持っている時には,
+次はエラーを発生させる:
+\begin{lstlisting}
+\ifdim\ltjgetparameter{kanjiskip}>\z@ ... \fi
+\ifdim\ltjgetparameter{xkanjiskip}>\z@ ... \fi
+\end{lstlisting}
+レジスタに一旦代入するのが良い:
+\begin{lstlisting}
+\@tempskipa=\ltjgetparameter{kanjiskip} \ifdim\@tempskipa>\z@ ... \fi
+\@tempskipa=\ltjgetparameter{xkanjiskip}\ifdim\@tempskipa>\z@ ... \fi
+\end{lstlisting}
 %</ja>
+
+\end{itemize}
+
+%<*ja>
+\subsection{\cs{ltjsetparameter} の代替}
+原則として各種内部パラメータの設定には \cs{ltjsetparameter} もしくは
+\ \cs{ltjglobalsetparameter}\ を用いることになるが,
+\cs{ltjsetparameter} の実行には時間がかかるという難点があり,
+\LuaTeX-ja の内部ではより高速に実行できる別の形式を用いている.
+\emph{本節は一般利用者むけの内容ではない.}
+
+\paragraph{\Param{kanjiskip}, \Param{xkanjiskip} の設定}
+\pLaTeXe 新ドキュメントクラスでは,
+\begin{lstlisting}
+\def\@setfontsize#1#2#3{%
+  ...
+  \kanjiskip=0zw plus .1zw minus .01zw
+  \ifdim\xkanjiskip>\z@
+    \if@slide \xkanjiskip=0.1em \else
+      \xkanjiskip=0.25em plus 0.15em minus 0.06em
+    \fi
+  \fi}
+\end{lstlisting}
+と,フォントサイズを変更するごとに \cs{kanjiskip}, \cs{xkanjiskip} を変更している.
+この \cs{@setfontsize} は文書の中で多数回実行されるので.
+\LuaTeX-ja 用に素直に書き換えた
+\begin{lstlisting}
+  \ltjsetparameter{kanjiskip=0\zw plus .1\zw minus .01\zw}
+  \@tempskipa=\ltjgetparameter{xkanjiskip}
+  \ifdim\@tempskipa>\z@
+    \if@slide
+      \ltjsetparameter{xkanjiskip=0.1em}
+    \else
+      \ltjsetparameter{xkanjiskip=0.25em plus 0.15em minus 0.06em}
+    \fi
+  \fi
+\end{lstlisting}
+としたのではタイプセットが遅くなってしまう.
+そこで,\cs{ltjsetparameter} の中で
 \begin{itemize}
+\item \cs{globaldefs} の値を読み取る \cs{ltj@setpar@global}
+\item \Param{kanjiskip} の設定を行う \cs{ltjsetkanjiskip}
+\item \Param{xkanjiskip} の設定を行う \cs{ltjsetxkanjiskip}
+\end{itemize}
+を独立させ,\Pkg{ltjsclasses}では,
+\begin{lstlisting}
+  \ltj@setpar@global
+  \ltjsetkanjiskip{\z@ plus .1\zw minus .01\zw}
+  \@tempskipa=\ltjgetparameter{xkanjiskip}
+  \ifdim\@tempskipa>\z@
+    \if@slide
+      \ltjsetxkanjiskip.1em
+    \else
+      \ltjsetxkanjiskip.25em plus .15em minus .06em
+    \fi
+  \fi
+\end{lstlisting}
+としている.
+\cs{ltj@setpar@global}を直前に実行せず,単独で
+\cs{ltjsetkanjiskip}, \cs{ltjsetxkanjiskip}を実行することは想定されていないので注意.
+
+
+
+\paragraph{ベースライン補正量の設定}
+\pLaTeX の\Pkg{ascmac}パッケージでは,縦組の欧文ベースライン補正量の一時待避・復帰処理に
+\ \cs{@saveybaselineshift}\ という寸法レジスタを用い
+\begin{lstlisting}
+\@savetbaselineshift\tbaselineshift\tbaselineshift\z@
+...
+\tbaselineshift\@savetbaselineshift
+\end{lstlisting}
+という処理を行っている.
+
+これを\LuaTeX-ja 用に \cs{ltjsetparameter} を使って書き直すと,
+\begin{lstlisting}
+\@savetbaselineshift\ltjgetparameter{talbaselineshift}
+\ltjsetparameter{talbaselineshift=\z@}
+...
+\ltjsetparameter{talbaselineshift=\@savetbaselineshift}
+\end{lstlisting}
+となる.
+
+さて,縦組の欧文ベースライン補正量\Param{talbaselineshift}は,
+実際には \cs{ltj@tablshift} という属性レジスタに格納されている
+(\ref{sec-para}\nobreak 節参照).属性レジスタは長さではなく整数値を格納する\footnote{%
+  従って,\texttt{\textbackslash @savetbaselineshift=\textbackslash ltj@tablshift}\
+  のように記述することはできない.属性レジスタを \cs{tbaselineshift} という名称にしなかっ
+  たのはそのためである.
+}ものであり,\cs{ltj@tablshift} は補正量を sp 単位で保持することから,
+上記のコードと同じ内容をより速い以下のコードで実現することができる.
+\begin{lstlisting}
+\@savetbaselineshift\ltj@tablshift sp%
+\ltj@tablshift\z@
+...
+\ltj@tablshift\@savetbaselineshift
+\end{lstlisting}
+この手法は \Pkg{ascmac} パッケージの\LuaTeX-ja対応パッチ \Pkg{lltjp-tascmac.sty} で
+実際に用いられている.\Pkg{lltjp-tascmac.sty} は自動的に読み込まれるので,
+ユーザは何も気にせず普通に \Pkg{ascmac} パッケージを \cs{usepackage} で読みこめば良い.
+%</ja>
+
+
+%<en>\section{Other Commands for plain \TeX\ and \LaTeXe}
+%<ja>\section{plainでも\LaTeX でも利用可能なその他の命令}
+%<en>\subsection{Commands for compatibility with \pTeX}
+%<ja>\subsection{\pTeX 互換用命令}
+
 %<*en>
-\item If there is no \textit{stack\_flag} node in the list of the hbox, then
-      no assignment was occurred inside the hbox. Hence values of
-      parameters at the end of the hbox are stored in the stack
-      level~$s$.
+The following commands are implemented for compatibility with \pTeX.
+Note that the former five commands don't support JIS~X~0213, but only JIS~X~0208.
+The last \cs{kansuji} converts an integer into its Chinese numerals.
 %</en>
 %<*ja>
-\item もしその水平ボックスのリストの中に\textit{stack\_flag}ノードがなければ,
-  水平ボックスの中では代入は起こらなかったということになる.
-  したがって,その水平ボックスの終わりにおけるパラメータの値はスタックレベル$s$に
-  格納されている.
+以下の命令は\pTeX との互換性のために実装されている.そのため,JIS~X~0213には対応せず,
+\pTeX と同じようにJIS~X~0208の範囲しかサポートしていない.
 %</ja>
-
+\begin{center}
+\cs{kuten}, \cs{jis}, \cs{euc}, \cs{sjis}, \cs{jis}, \cs{kansuji}
+\end{center}
 %<*en>
-\item If there is a \textit{stack\_flag} node whose value is~$t+1$, then
-      an assignment was occurred just inside the hbox group. Hence
-      values of parameters at the end of the hbox are stored in the
-      stack level~$s+1$.
+These six commands takes an internal integer, and returns a \emph{string}.
 %</en>
 %<*ja>
-\item もし値が$t+1$の\textit{stack\_flag}ノードがあれば,その
-  水平ボックスグループの中で代入が起こったことになる.
-  したがって,水平ボックスの終わりにおけるパラメータの値はスタックレベル$s+1$に
-  格納されている.
+これら6命令は内部整数を引数とするが,実行結果は\textbf{文字列}であることに注意.
 %</ja>
+\begin{LTXexample}
+\newcount\hoge
+\hoge="2423 %"
+\the\hoge, \kansuji\hoge\\
+\jis\hoge, \char\jis\hoge\\
+\kansuji1701
+\end{LTXexample}
 
 %<*en>
-\item If there are \textit{stack\_flag} nodes but all of their values
-      are more than~$t+1$, then an assignment was occurred in the box,
-      but it is done is `more internal' group. Hence values of
-      parameters at the end of the hbox are stored in the stack
-      level~$s$.
+To change characters of Chinese numerals for each digit, set \Param{kansujichar} parameter:
+\begin{LTXexample}
+\ltjsetparameter{kansujichar={1,`壹}}
+\ltjsetparameter{kansujichar={7,`漆}}
+\ltjsetparameter{kansujichar={0,`零}}
+\kansuji1701
+\end{LTXexample}
 %</en>
-%<*ja>
-\item もし\textit{stack\_flag}ノードがあるがそれらの値が全て$t+1$より大きい
-  場合,そのボックスの中で代入が起こったが,それは「より内部の」グループで
-  起こったということになる.したがって,水平ボックスの終わりでのパラメータの
-  値はスタックレベル$s$に格納されている.
-%</ja>
-\end{itemize}
 
+
+\subsection{\cs{inhibitglue}}
 %<*en>
-Note that to work this trick correctly, assignments to
-\verb+\ltj@@stack+ and \verb+\ltj@@group@level+ have to be local always,
-regardless the value of \verb+\globaldefs+.
-This problem is resolved by using
-\hbox{\verb+\directlua{tex.globaldefs=0}+} (this assignment is local).
+\cs{inhibitglue} suppresses the insertion of \textbf{JAglue}.
+The following is an example, using a special JFM that there will be a glue between
+the beginning of a box and ``あ'', and also between ``あ''~and~``ウ''.
 %</en>
 %<*ja>
-このトリックを正しく働かせるためには,\verb+\ltj@@stack+ と \verb+\ltj@@group@level+ への
-代入は \verb+\globaldefs+ の値によらず常にローカルでなければならないことに注意する.
-この問題は \hbox{\verb+\directlua{tex.globaldefs=0}+}(この代入は常にローカル)を
-用いることで解決している.
+\cs{inhibitglue} は\textbf{JAglue}の挿入を抑制する.
+以下は,ボックスの始めと「あ」の間,「あ」「ウ」の間にグルーが入る特別なJFMを用いた例で
+ある.
 %</ja>
 
-%<en>\section{Linebreak after Japanese Character}
-%<ja>\section{和文文字直後の改行}
-\label{sec-lbreak}
-%<en>\subsection{Reference: Behavior in \pTeX}
-%<ja>\subsection{参考:\pTeX の動作}
-%<*en>
-In~\pTeX, a line break after a Japanese character doesn't emit a space,
-since words are not separated by spaces in Japanese writings. However,
-this feature isn't fully implemented in \LuaTeX-ja due to the
-specification of callbacks in~\LuaTeX. To clarify the difference between
-\pTeX~and~\LuaTeX, We briefly describe the handling of a line break in~\pTeX, in
-this subsection.
+\begin{LTXexample}[width=0.4\textwidth]
+\jfont\g=file:KozMinPr6N-Regular.otf:jfm=test \g
+\fbox{\hbox{あウあ\inhibitglue ウ}}
+\inhibitglue\par\noindent あ1
+\par\inhibitglue\noindent あ2
+\par\noindent\inhibitglue あ3
+\par\hrule\noindent あoff\inhibitglue ice
+\end{LTXexample}
 
-\pTeX's input processor can be described in terms of a finite state
-automaton, as that of~\TeX\ in~Section~2.5 of~\cite{texbytopic}. The
-internal states are as follows:
-\begin{itemize}
-\item State~$N$: new line
-\item State~$S$: skipping spaces
-\item State~$M$: middle of line
-\item State~$K$: after a Japanese character
-\end{itemize}
-The first three states---$N$, $S$~and~$M$---are as same as \TeX's input
-processor.  State~$K$ is similar to state~$M$, and is entered after
-Japanese characters.  The diagram of state transitions are indicated in
-Figure~\ref{fig-ptexipro}.  Note that \pTeX\ doesn't leave state~$K$
-after `beginning/ending of a group' characters.
+%<*en>
+With the help of this example, we remark the specification of \cs{inhibitglue}:
 %</en>
-
 %<*ja>
-欧文では文章の改行は単語間でしか行わない.そのため,\TeX では,(文字の直後の)改行は
-空白文字と同じ扱いとして扱われる.一方,和文ではほとんどどこでも改行が可能なため,
-\pTeX では和文文字の直後の改行は単純に無視されるようになっている.
-
-このような動作は,\pTeX が\TeX からエンジンとして拡張されたことによって可能になったことである.
-\pTeX の入力処理部は,\TeX におけるそれと同じように,有限オートマトンとして記述することができ,
-以下に述べるような4状態を持っている.
-
+この例を援用して,\cs{inhibitglue} の仕様について述べる.
+%</ja>
 \begin{itemize}
-\item State~$N$: 行の開始.
-\item State~$S$: 空白読み飛ばし.
-\item State~$M$: 行中.
-\item State~$K$: 行中(和文文字の後).
-\end{itemize}
-また,状態遷移は,図 \ref{fig-ptexipro} のようになっており,図中の数字は
-カテゴリーコードを表している.最初の3状態は\TeX の入力処理部と同じであり,
-図中から状態$K$と「$j$」と書かれた矢印を取り除けば,\TeX の入力処理部と同
-じものになる.
-
-この図から分かることは,
-\begin{quote}
-行が和文文字(とグループ境界文字)で終わっていれば,改行は無視される
-\end{quote}
-ということである.
+%<*en>
+\item The call of \cs{inhibitglue} in the (internal) vertical mode is
+      simply ignored.
+%</en>
+%<*ja>
+\item \emph{\cs{inhibitglue} の垂直モード中での呼び出しは意味を持たない}\footnote{%
+  この点は\TeX~Live~2014での\pTeX における \cs{inhibitglue} の仕様変更と同じである.
+}.
+4行目の入力で有効にならないのは,\cs{inhibitglue} の時点では垂直モードであり,
+\cs{noindent} の時点で水平モードになるからである.
 %</ja>
 
-\begin{figure}[!tb]
-\begin{gather*}
- \def\sp{\texttt{\char32}}
- \xymatrix{&&
-   {\text{scan a cs}}\ar@(r,ul)[dr]&\\
-\ar[r]&
-   *++[o][F-]{N}\ar[ur]^0\ar[dd]_{d,\ g}\ar[u]^{5\ (\texttt{\char92par})}
-     \ar@{->}@(d,l)[ddrr]_(0.45){j}&&
-   *++[o][F-]{S}\ar@(l,dr)[ul]^0\ar@(l,ur)[ddll]_{d,\ g}\ar[u]_{5}
-     \ar@{->}@(r,r)[dd]^{j}\\&\\&
-   *++[o][F-]{M}\ar[uuur]^0\ar@(r,dl)[uurr]_(0.55){10\ (\sp)}
-     \ar[d]_{5\ ({\sp})}\ar@{->}@(dr,dl)[rr]_{j}&&
-   *++[o][F-]{K}\ar@{->}@(ul,d)[uuul]^0\ar@{->}[ll]^{d}
-     \ar@{->}@(ur,dr)[uu]^{10\ (\sp)}\ar@{->}[d]_5\\
-   &&&
- }\\
- d:=\{3,4,6,7,8,11,12,13\},\quad g:=\{1,2\},\quad j:=(\text{Japanese characters})
-\end{gather*}
-\begin{itemize}
 %<*en>
-\item Numbers represent category codes.
+\item The call of \cs{inhibitglue} in the (restricted) horizontal
+      mode is only effective on the spot; does not get over boundary of
+      paragraphs. Moreover, \cs{inhibitglue} cancels ligatures and
+      kernings, as shown in the last line of above example.
 %</en>
 %<*ja>
-\item 数字はカテゴリーコードを表わしている.
+\item \cs{inhibitglue} の(制限された)水平モード中での呼び出しはその場でのみ
+  有効であり,段落の境界を乗り越えない.
+  さらに,\cs{inhibitglue} は上の例の最終行のように(欧文における)リガチャとカーニングを
+  打ち消す.これは,\cs{inhibitglue} が内部的には「現在のリスト中にwhatsitノードを
+  追加する」ことを行なっているからである.
 %</ja>
+
 %<*en>
-\item Category codes 9~(ignored), 14~(comment)~and~15~(invalid) are omitted in the above diagram.
+\item The call of \cs{inhibitglue} in math mode is just ignored.
 %</en>
 %<*ja>
-\item カテゴリーコード9(無視する文字),14(コメント文字),15(無効文字)は上の図では省かれている.
+\item \cs{inhibitglue} を数式モード中で呼び出した場合はただ無視される.
+%</ja>
+
+%<*ja>
+\item \LaTeX で\LuaTeX-ja を使用する場合は,
+\cs{inhibitglue} の代わりとして \verb+\<+ を使うことができる.
+既に \verb+\<+ が定義されていた場合は,\LuaTeX-ja の読み込みで強制的に上書きされるので
+注意すること.
 %</ja>
 \end{itemize}
-%<en>\caption{State transitions of \pTeX's input processor.}
-%<ja>\caption{\pTeX の入力処理部の状態遷移.}
-\label{fig-ptexipro}
-\end{figure}
 
 
-%<en>\subsection{Behavior in \LuaTeX-ja}
-%<ja>\subsection{\LuaTeX-jaの動作}
+\subsection{\cs{ltjdeclarealtfont}}
+\label{ssec-altfont}
 %<*en>
-States in the input processor of \LuaTeX\ is the same as that of \TeX,
-and they can't be customized by any callbacks. Hence, we can only use
-\verb+process_input_buffer+ and \verb+token_filter+ callbacks for to
-suppress a space by a line break which is after Japanese characters.
-
-However, \verb+token_filter+ callback cannot be used either, since a
-character in category code 5~(end-of-line) is converted into an space
-token \emph{in the input processor}.  So we can use only the
-\verb+process_input_buffer+ callback.  This means that suppressing a
-space must be done \emph{just before} an input line is read.
-
-Considering these situations, handling of an end-of-line in \LuaTeX-ja are as follows:
+Using \cs{ltjdeclarealtfont}, one can ``compose'' more than one Japanese fonts.
+This \cs{ltjdeclarealtfont} uses in the following form:
 \begin{quote}
-A character U+FFFFF (its category code is set to 14~(comment) by
-\LuaTeX-ja) is appended to an input line, \emph{before \LuaTeX\ actually
-process it}, if and only if the following two conditions are satisfied:
-\begin{enumerate}
-\item The category code of the character $\langle${return}$\rangle$
-      (whose character code is 13) is 5~(end-of-line).
-\item The input line matches the following `regular expression':
-\[
-  (\text{any char})^*(\textbf{JAchar})
-  \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
-\]
-\end{enumerate}
+\ttfamily \textbackslash ltjdeclarealtfont<base\_font\_cs><alt\_font\_cs>\{<range>\}
+\end{quote}
+where  <base\_font\_cs>~and~<alt\_font\_cs> are defined by \cs{jfont}.
+Its meaning is
+\begin{quote}
+If the current Japanese font is <base\_font\_cs>, characters which belong to <range>
+is typeset by another Japanese font <alt\_font\_cs>, instead of <base\_font\_cs>.
 \end{quote}
+Here <range> is a comma-separated list of character codes, but also accepts negative integers:
+$-n$~($n≥1$) means that all characters of character classes~$n$, with respect to JFM used
+by <base\_font\_cs>. Note that characters which do not exist in <alt\_font\_cs> are
+ignored.
 
-\paragraph{Remark}
-The following example shows the major difference from the behavior of \pTeX:
-\begin{LTXexample}
-\ltjsetparameter{autoxspacing=false}
-\ltjsetparameter{jacharrange={-6}}xあ
-y\ltjsetparameter{jacharrange={+6}}zあ
-u
-\end{LTXexample}
-\begin{itemize}
-\item There is no space between `x' and `y', since the line~2 ends with a \textbf{JAchar} `あ'
-(this `あ' considered as an \textbf{JAchar} at the ending of line~1).
-\item There is no space between `あ' (in the line~3) and `u', since the
-      line~3 ends with an \textbf{ALchar}
-(the letter `あ' considered as an \textbf{ALchar} at the ending of line~2).
-\end{itemize}
+For example, if \cs{hoge} uses \texttt{jfm-ujis.lua}, the standard JFM of \LuaTeX-ja,
+then
+\begin{lstlisting}
+\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}}
+\end{lstlisting}
+does
+\begin{quote}
+If the current Japanese font is \cs{hoge}, \texttt{U+3000}--\texttt{U+30FF}
+and characters in class~1 (ideographic opening brackets)
+are typeset by \cs{piyo}.
+\end{quote}
 %</en>
-
 %<*ja>
-\LuaTeX の入力処理部は\TeX のそれと全く同じであり,コールバックによりユーザが
-カスタマイズすることはできない.このため,改行抑制の目的でユーザが利用で
-きそうなコールバックとしては,\verb+process_input_buffer+や
-\verb+token_filter+に限られてしまう.しかし,\TeX の入力処理部をよく見る
-と,後者も役には経たないことが分かる:改行文字は,入力処理部によってトー
-クン化される時に,カテゴリーコード10の32番文字へと置き換えられてしまうた
-め,\verb+token_filter+で非標準なトークン読み出しを行おうとしても,空白文
-字由来のトークンと,改行文字由来のトークンは区別できないのだ.
-
-すると,我々のとれる道は,\verb+process_input_buffer+を用いて
-\LuaTeX の入力処理部に引き渡される前に入力文字列を編集するというものしかない.
-以上を踏まえ,\LuaTeX-jaにおける「和文文字直後の改行抑制」の処理は,次のようになっている:
+\cs{jfont} の書式を見ればわかるように,基本的には\LuaTeX-jaにおける1つの和文フォントに
+使用出来る「実際のフォント」は1つである.
+しかし,\cs{ltjdeclarealtfont} を用いると,この原則から外れることができる.
 
+\cs{ltjdeclarealtfont} は以下の書式で使用する:
 \begin{quote}
-各入力行に対し,\textbf{その入力行が読まれる前の内部状態で}
-以下の2条件が満たされている場合,\LuaTeX-jaはU+FFFFF番の文字
-\footnote{この文字はコメント文字として扱われるように\LuaTeX-ja内部で設定をしている.}
-を末尾に追加する.よって,その場合に改行は空白とは見做されないこととなる.
-\begin{enumerate}
-\item 改行文字(文字コード13番)のカテゴリーコードが5~(end-of-line)である.
-\item 入力行は次の「正規表現」にマッチしている:
-\[
-  (\text{any char})^*(\textbf{JAchar})
-  \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
-\]
-\end{enumerate}
+\ttfamily \textbackslash ltjdeclarealtfont<base\_font\_cs><alt\_font\_cs>\{<range>\}
 \end{quote}
-
-この仕様は,前節で述べた\pTeX の仕様にできるだけ近づけたものとなっている.最初の条件は,
-\texttt{verbatim}系環境などの日本語対応マクロを書かなくてすませるためのものである.
-しかしながら,完全に同じ挙動が実現できたわけではない.
-差異は,次の例が示すように,和文文字の範囲を変更した行の改行において見られる:
-\begin{LTXexample}
-\ltjsetparameter{autoxspacing=false}
-\ltjsetparameter{jacharrange={-6}}xあ
-y\ltjsetparameter{jacharrange={+6}}zあ
-u
-\end{LTXexample}
-もし\pTeX とまったく同じ挙動を示すならば,出力は
-「\hbox{\ltjsetparameter{autoxspacing=false}x yzあu}」となるべきである.しかし,実際には
-上のように異なる挙動となっている.
+これは「現在の和文フォント」が<base\_font\_cs>であるとき,
+<range>に属する文字は<alt\_font\_cs>を用いて組版される,という意味である.
 \begin{itemize}
-\item 2行目は「あ」という和文文字で終わる(2行目を処理する前の時点では,
-      「あ」は和文文字扱いである)ため,直後の改行文字は無視される.
-\item 3行目は「あ」という欧文文字で終わる(2行目を処理する前の時点では,
-      「あ」は欧文文字扱いである)ため,直後の改行文字は空白に置き換わる.
+ \item <base\_font\_cs>, <alt\_font\_cs>は
+\cs{jfont} によって定義された和文フォントである.
+ \item <range>は文字コードの範囲を表すコンマ区切りのリストであるが,
+   例外として負数$-n$は「<base\_font\_cs>のJFMの文字クラス$n$に属する全ての文字」
+   を意味する.
+
+<range>中に<alt\_font\_cs>中に実際には存在しない文字が指定された場合は,
+その文字に対する設定は無視される.
 \end{itemize}
-このため,トラブルを避けるために,和文文字の範囲を\verb+\ltjsetparameter+で編集した場合,
-その行はそこで改行するようにした方がいいだろう.
-%</ja>
-
 
-%<en>\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}}
-%<ja>\section{JFMグルーの挿入,\Param{kanjiskip}と\Param{xkanjiskip}}
-\label{sec-jfmglue}
-%<en>\subsection{Overview}
-%<ja>\subsection{概要}
+例えば,\cs{hoge} のJFMが\LuaTeX-ja標準の
+\ \texttt{jfm-ujis.lua} であった場合,
+\begin{lstlisting}
+\ltjdeclarealtfont\hoge\piyo{"3000-"30FF, {-1}-{-1}}
+\end{lstlisting}
+は「\cs{hoge} を利用しているとき,
+\texttt{U+3000}--\texttt{U+30FF}と
+文字クラス1(開き括弧類)中の文字だけは \cs{piyo} を用いる」
+ことを設定する.\verb+{-1}-{-1}+ という変わった指定の仕方をしているのは,
+普通に \texttt{-1} と指定したのでは正しく$-1$と読み取られないという
+マクロの都合による.
+%</ja>
+
+%<*ja>
+\subsection{\cs{ltjalchar} と \cs{ltjjachar}}
+文字コードが$\text{<chr\_code>}~(\geq 128=\mathtt{0x80})$の文字を
+\ \cs{char} プリミティブを使い \cs{char}<chr\_code> として出力させると,
+その文字の属する文字範囲(\ref{ssec-setrange}節参照)によって
+\textbf{ALchar}か\textbf{JAchar}か,つまり欧文フォントで出力されるか和文フォントで出力され
+るかが決まる.
+
+文字範囲の設定を無視し,文字コードが$\text{<chr\_code>}~(\geq 128=\mathtt{0x80})$の文字を強制的に
+\textbf{ALchar}, \textbf{JAchar}で出力する命令がそれぞれ
+\ \cs{ltjalchar},~\cs{ltjjachar} である.使用方法は \cs{char} と同じく
+\ \cs{ltjalchar}<chr\_code>, \cs{ltjjachar}<chr\_code>とすればよい.
+<chr\_code>が127以下の場合は,\cs{ltjjachar} であっても\textbf{ALchar}として出力されること
+に注意.
+
+以下は\ref{ssec-setrange}節に載せた例に,\cs{char} の動作を追加したものである.
+\begin{LTXexample}[width=0.25\textwidth]
+\gtfamily\large % default, ALchar, JAchar
+¶, \char`¶, \ltjalchar`¶, \ltjjachar`¶\\    % default: ALchar
+α, \char`α, \ltjalchar`α, \ltjjachar`α  % default: JAchar
+\end{LTXexample}
+%</ja>
 
-\LuaTeX-jaにおける和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる.
-\pTeX では次のような仕様であった:
-\begin{itemize}
-\item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
-追加する過程で行われる.
-\item \Param{xkanjiskip}の挿入は,水平ボックスへのパッケージングや行分割前に行われる.
-\item \Param{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に
-「和文文字を表す2つの<char\_node>の間には\Param{kanjiskip}がある」ものとみなされる.
-\end{itemize}
-しかし,\LuaTeX-jaでは,水平ボックスへのパッケージングや行分割前に全ての
-\textbf{JAglue},即ちJFMグルー・\Param{xkanjiskip}・\Param{kanjiskip}の
-3種類を一度に挿入することになっている.これは,\LuaTeX において欧文の合字・
-カーニング処理がノードベースになったことに対応する変更である.
 
-\LuaTeX-jaにおける\textbf{JAglue}挿入処理では,次節で定義する
-「クラスタ」を単位にして行われる.大雑把にいうと,「クラスタ」は文字とそれに付随す
-るノード達(アクセント位置補正用のカーンや,イタリック補正)をまとめたもの
-であり,2つのクラスタの間には,ペナルティ,\verb+\vadjust+,whatsitなど,行組版
-には関係しないものがある.
+%<en>\section{Commands for \LaTeXe}
+%<ja>\section{\LaTeXe 用の命令}
 
+%<en>\subsection{Patch for NFSS2}
+%<ja>\subsection{NFSS2へのパッチ}
+\label{ssec-nfsspat}
 
-%<en>\subsection{definition of a `cluster'}
-%<ja>\subsection{「クラスタ」の定義}
+%<*en>
+Japanese patch for NFSS2 in \LuaTeX-ja
+is based on \texttt{plfonts.dtx} which plays the same role in \pLaTeXe.
+We will describe
+commands which are not described in Subsection~\ref{ssec-chgfnt}.
+%</en>
+%<*ja>
+\LuaTeX-jaのNFSS2への日本語パッチは
+\pLaTeXe で同様の役割を果たす \texttt{plfonts.dtx} をベースに,
+和文エンコーディングの管理等をLuaで書きなおしたものである.
+ここでは\ref{ssec-chgfnt}節で述べていなかった命令について
+記述しておく.
+%</ja>
 
-\def\OA{$\text{\sf O}_{\text{\sf A}}$}
-\def\OB{$\text{\sf O}_{\text{\sf B}}$}
-\begin{defn}
+\begin{cslist}%
+\item[\normalfont\bfseries %
+%<ja>追加の長さ変数達
+%<en>additonal dimensions
+]
 %<*en>
-A \emph{cluster} is a list of consecutive nodes in one of the following forms,
-with the \textit{id} of it:
+Like \pLaTeXe, \LuaTeX-ja defines the following dimensions
+for information of current Japanese font:
 %</en>
 %<*ja>
-\textbf{クラスタ}は以下の形のうちのどれかひとつをとる連続的なノードのリストである:
+\pLaTeXe と同様に,\LuaTeX-jaは「現在の和文フォントの情報」を格納する長さ変数
+%</ja>
+\begin{quote}
+ \cs{cht}~(height), \cs{cdp}~(depth), \cs{cHT}~(sum of former two),\\
+ \cs{cwd}~(width), \cs{cvs}~(lineskip), \cs{chs}~(equals to \cs{cwd})
+\end{quote}
+%<en>and its \cs{normalsize} version:
+%<ja>と,その \cs{normalsize} 版である
+\begin{quote}
+ \cs{Cht}~(height), \cs{Cdp}~(depth),
+ \cs{Cwd}~(width), \\\cs{Cvs}~(equals to \cs{baselineskip}),
+ \cs{Chs}~(equals to \cs{cwd})%
+%<en>.
+\end{quote}
+%<*ja>
+を定義している.なお,\cs{cwd} と \cs{zw},また
+\cs{cHT} と \cs{zh} は一致しない可能性がある.なぜなら,
+\cs{cwd},~\cs{cHT} は「あ」の寸法から決定されるのに対し,
+\cs{zw} と \cs{zh} はJFMに指定された値に過ぎないからである.
 %</ja>
-\begin{enumerate}
 %<*en>
-\item Nodes whose value of\ \verb+\ltj@icflag+ is in $[3,15)$.  These
-      nodes come from a hbox which is already packaged, by unpackaging
-      (\verb+\unhbox+).
-      The \textit{id} is \textit{id\_pbox}.
+Note that \cs{cwd}~and~\cs{cHT} may  differ from \cs{zw}~and~\cs{zh}
+respectively.
+On the one hand the former dimensions are determined from the character ``あ'',
+but on the other hand \cs{zw}~and~\cs{zh} are specified by JFM.
+%</en>
+
+
+\item[\cs{DeclareYokoKanjiEncoding}\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
+%<en>\ \\[\dimexpr-\medskipamount-2\baselineskip\relax]
+%<ja>\ \\[\dimexpr-2\baselineskip\relax]
+\item[\cs{DeclareTateKanjiEncoding}\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
+
+%<*en>
+In NFSS2 under \LuaTeX-ja, distinction between alphabetic fonts
+            and Japanese fonts are only made by their
+            encodings. For example, encodings OT1 and T1 are encodings for
+            alphabetic fonts, and Japanese fonts cannot
+            have these encodings. These command define a new encoding
+            scheme for Japanese font families.
 %</en>
 %<*ja>
-\item その \verb+\ltj@icflag+ の値が$[3,15)$に入るノードのリスト.
-  これらのノードはある既にパッケージングされた水平ボックスから \verb+\unhbox+ で
-  アンパックされたものである.
-  その\textit{id}は\textit{id\_pbox}である.
+\LuaTeX-jaのNFSS2においては,欧文フォントと和文フォントは
+そのエンコーディングによってのみ区別される.
+例えば,OT1とT1のエンコーディングは欧文フォントのエンコーディングであり,
+和文フォントはこれらのエンコーディングを持つことはできない.
+これらコマンドは横組用・縦組用和文フォントのための新しいエンコーディングを
+それぞれ定義する.
 %</ja>
 
+\item[\cs{DeclareKanjiEncodingDefaults}\{<text-settings>\}\{<math-settings>\}]
+%<en>\ \\[\dimexpr-\medskipamount-2\baselineskip\relax]
+%<ja>\ \\[\dimexpr-2\baselineskip\relax]
+\item[\cs{DeclareKanjiSubstitution}\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}]
+%<en>\ \\[\dimexpr-\medskipamount-2\baselineskip\relax]
+%<ja>\ \\[\dimexpr-2\baselineskip\relax]
+\item[\cs{DeclareErrorKanjiFont}\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}\{<size>\}]
+
 %<*en>
-\item A inline math formula, including two \textit{math\_node}s at the boundary of it.
-      The \textit{id} is \textit{id\_math}.
+The above 3~commands are just the counterparts for \cs{DeclareFontEncodingDefaults} and~others.
 %</en>
 %<*ja>
-\item インライン数式でその境界に2つの\textit{math\_node}を含むもの.
-  その\textit{id}は\textit{id\_math}である.
+上記3つのコマンドはちょうどNFSS2 の \cs{DeclareFontEncodingDefaults} などに対応するものである.
+%</ja>
+
+\item[\cs{reDeclareMathAlphabet}\{<unified-cmd>\}\{<al-cmd>\}\{<ja-cmd>\}]
+
+% ToDo: en
+%<*ja>
+和文・欧文の数式用フォントファミリを一度に変更する命令を作成する.
+具体的には,欧文数式用フォントファミリ変更の命令<al-cmd>(\cs{mathrm} 等)と,和文数式用フォ
+            ントファミリ変更の命令<ja-cmd>(\cs{mathmc} 等)の2つを同時に行う命令として
+            <unified-cmd>を(再)定義する.実際の使用では<unified-cmd>と
+            <al-cmd>に同じものを指定する,すなわち,<al-cmd>で和文側も変
+            更させるようにするのが一般的と思われる.
+
+本命令は
+\begin{center}\tt
+<unified-cmd>\{<arg>\}\quad$\longrightarrow$\quad
+(<al-cmd>の1段展開結果)\{<ja-cmd>の1段展開結果)\{<arg>\}\}
+\end{center}
+と定義を行うので,使用には注意が必要である:
+%<en>\vspace{-\medskipamount}
+\begin{itemize}
+\item <al-cmd>,~<ja-cmd>は既に定義されていなければならない.
+      \cs{reDeclareMathAlphabet}\\の後に
+両命令の内容を再定義しても,<unified-cmd>の内容にそれは反映されない.
+\item <al-cmd>,~<ja-cmd>に\verb+\@mathrm+などと \texttt{@} をつけた命令を指定した時の動作は保証できない.
+\end{itemize}
 %</ja>
 
+\item[\cs{DeclareRelationFont}\{<ja-encoding>\}\{<ja-family>\}\{<ja-series>\}\{<ja-shape>\}\\*
+  \null\hfill\{<al-encoding>\}\{<al-family>\}\{<al-series>\}\{<al-shape>\}]
 %<*en>
-\item A \textit{glyph\_node}~$p$ with nodes which relate with it:
+This command sets the ``accompanied'' alphabetic font (given by the latter 4~arguments)
+with respect to a Japanese font given by the former 4~arguments.
 %</en>
 %<*ja>
-\item \textit{glpyh\_node}~$p$とそれに関係するノード:
+いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントに対して,
+そのフォントに対応する「従属欧文」のフォントを後半の4引数により与える.
 %</ja>
-\begin{enumerate}
+\item[\cs{SetRelationFont}]
 %<*en>
-\item A kern for the italic correction of~$p$.
+This command is almost same as \cs{DeclareRelationFont}, except that this command does a local
+assignment, where \cs{DeclareRelationFont} does a global assignment.
 %</en>
 %<*ja>
-\item $p$のイタリック補正のためのカーン.
+このコマンドは \cs{DeclareRelationFont} とローカルな指定であることを除いて
+ほとんど同じである(\cs{DeclareRelationFont} はグローバル).
 %</ja>
 
+\item[\cs{userelfont}]
 %<*en>
-\item An accent attached to $p$ by \verb+\accent+.
+Change current alphabetic font encoding/family/\dots\ to the `accompanied' alphabetic
+            font family with respect to current Japanese font family,
+            which was set by
+            \cs{DeclareRelationFont} or \cs{SetRelationFont}.
+Like \cs{fontfamily}, \cs{selectfont} is required to take an effect.
 %</en>
 %<*ja>
-\item \verb+\accent+ による$p$に付随したアクセント.
+現在の欧文フォントのエンコーディング/ファミリ/…… を,
+\cs{DeclareRelationFont} か \cs{SetRelationFont} で指定された
+現在の和文フォントに対応する「従属欧文」フォントに変更する.
+\cs{fontfamily} のように,有効にするためには \cs{selectfont} が必要である.
 %</ja>
-\end{enumerate}
+
+\item[\cs{adjustbaseline}]
+%<*en>
+In \pLaTeXe, \cs{adjustbaseline} sets \cs{tbaselineshift}
+to match the vertical center of ``M'' and that of ``あ''  in vertical typesetting:
 \[
-\overbrace{%
- \Node{kern}{$\mathit{subtype}=2$}\longrightarrow
-\left\{\begin{array}{c}
-\Node{glyph}{accent}\\\noalign{\medskip}
-\Node{hbox}{accent (shifted vert.)}
-\end{array}\right\}\longrightarrow
-\Node{kern}{$\mathit{subtype}=2$}}^{\text{(a)}}
-\longrightarrow
-\Node{glyph}{$p$}\longrightarrow
-\overbrace{%
-\Node{kern}{italic corr.}}^{\text{(b)}}
+\text{\cs{tbaselineshift}} \leftarrow
+\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2
+  + d_{\text{あ}} - d_{\text{M}},
+\]
+where $h_{a}$~and~$d_{a}$ denote the height of ``$a$'' and the depth, respectively.
+In \LuaTeX-ja, this \cs{adjustbaseline} does same task, namely setting the
+            \Param{talbaselineshift} parameter.
+%</en>
+%<*ja>
+\pLaTeXe では,\cs{adjustbaseline} は縦組時に「M」と「あ」の中心線を一致させるために,
+\cs{tbaselineshift} を設定する役割を持っていた:
+\[
+\text{\cs{tbaselineshift}} \leftarrow
+\frac{(h_{\text{M}}+d_{\text{M}}) - (h_{\text{あ}}+d_{\text{あ}})}2
+  + d_{\text{あ}} - d_{\text{M}},
 \]
+ここで,$h_{a}$,~$d_{a}$はそれぞれ「$a$」の高さ・深さを表す.
+\LuaTeX-jaにおいても\cs{adjustbaseline} は同様に\Param{talbaselineshift}パラメータの調整処
+            理を行っている.
+
+同時に,これも\pLaTeXe の \cs{adjustbaseline} で行われていたが,
+「漢」の寸法を元に,(本節の最初に述べた,小文字で始まる)\cs{cht}, \cs{cwd} といった長さ変数を設定する.
+%</ja>
 
+\item[\cs{fontfamily}\{<family>\}]
 %<*en>
-The \textit{id} is \textit{id\_jglyph} or
-\textit{id\_glyph}, according to whether the \textit{glyph\_node}
-represents a Japanese character or not.
+As in \LaTeXe, this command changes current font family (alphabetic, Japanese,~\emph{or both})
+to <family>. See Subsection~\ref{ssec-fontfamilycmd} for detail.
 %</en>
 %<*ja>
-\textit{id}は\textit{glyph\_node}が和文文字を表すかどうかによって
-\textit{id\_jglyph},もしくは\textit{id\_glyph}となる
+元々の\LaTeXe におけるものと同様に,このコマンドは現在のフォントファミリ(欧文,
+和文,\emph{もしくは両方})を<family>に変更する.詳細は\ref{ssec-fontfamilycmd}節を参照すること
 %</ja>
 
+
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\DeclareKanjiFamily{JY3}{edm}{}
+\DeclareFontShape{JY3}{edm}{m}{n}    {<-> s*KozMinPr6N-Regular:jfm=ujis;}{}
+\DeclareFontShape{JY3}{edm}{m}{green}{<-> s*KozMinPr6N-Regular:jfm=ujis;color=007F00}{}
+\DeclareFontShape{JY3}{edm}{m}{blue} {<-> s*KozMinPr6N-Regular:jfm=ujis;color=0000FF}{}
+\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{green}{"4E00-"67FF,{-2}-{-2}}
+\DeclareAlternateKanjiFont{JY3}{edm}{m}{n}{JY3}{edm}{m}{blue}{ "6800-"9FFF}
+{\kanjifamily{edm}\selectfont
+日本国民は、正当に選挙された国会における代表者を通じて行動し、……}
+\end{LTXexample}
+%<ja>\caption{\cs{DeclareAlternateKanjiFont} の使用例}
+%<en>\caption{An example of \cs{DeclareAlternateKanjiFont}}
+\label{fig:altkanji}
+\end{figure}
+
+\item[\cs{DeclareAlternateKanjiFont}\{<base-encoding>\}\{<base-family>\}\{<base-series>\}\{<base-shape>\}\\
+  \null\hfill\{<alt-encoding>\}\{<alt-family>\}\{<alt-series>\}\{<alt-shape>\}\{<range>\}]
+%<*ja>
+\ref{ssec-altfont}節の\
+\cs{ltjdeclarealtfont} と同様に,前半の4引数の
+和文フォント(基底フォント)のうち<range>中の文字を
+第5から第8引数の和文フォントを使って組むように指示する.
+使用例を図\nobreak\ref{fig:altkanji}に載せた.
+
+\begin{itemize}
+ \item
+\cs{ltjdeclarealtfont} では基底フォント・置き換え先和文フォントはあらかじめ定義されてい
+            ないといけない(その代わり即時発効)であったが,
+\cs{DeclareAlternateKanjiFont} の設定が
+実際に効力が発揮するのは,書体変更やサイズ変更を行った時,
+あるいは(これらを含むが)\cs{selectfont} が実行された時である.
+ \item
+段落やhboxの最後での設定値が段落/hbox全体にわたって通用する点や,
+<range>に負数$-n$を指定した場合,それが「基底フォントの文字クラス$n$に属する文字全体」
+と解釈されるのは \cs{ltjdeclarealtfont} と同じである.
+\end{itemize}%
+%</ja>
+%<*en>
+As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec-altfont}),
+characters in <range> of the Japanese font (we say the \emph{base font})
+which specified by first 4 arguments are typeset
+by the Japanese font which specified by fifth to eighth arguments
+(we say the \emph{alternate font}).
+An example is shown in Figure~\ref{fig:altkanji}.
+
+\begin{itemize}
+ \item
+In \cs{ltjdeclarealtfont}, the base font and the alternate font must be already defined.
+But this \cs{DeclareAlternateKanjiFont} is not so.
+In other words, \cs{DeclareAlternateKanjiFont} is effective only after
+current Japanese font is changed, or only after \cs{selectfont} is executed.
+ \item \dots
+\end{itemize}%
+\vspace{-\medskipamount}
+%</en>
+\end{cslist}
+
 %<*en>
-\item An box-like node, that is, an hbox, a vbox, a rule (\verb+\vrule+) and an \textit{unset\_node}.
-The \textit{id} is \textit{id\_hlist} if the node is an
-      hbox which is not shifted vertically, or \textit{id\_box\_like}
-      otherwise.
+As closing this subsection, we shall introduce an example of
+\cs{SetRelationFont} and \cs{userelfont}:
 %</en>
 %<*ja>
-\item ボックス様のノード,つまり水平ボックス,垂直ボックス,罫線 (\verb+\vrule+),
-  そして\textit{unset\_node}.
-  その\textit{id}は垂直に移動していない水平ボックスならば\textit{id\_hlist},
-  そうでなければ\textit{id\_box\_like}となる.
+この節の終わりに,\cs{SetRelationFont} と \cs{userelfont} の例を
+紹介しておこう.\cs{userelfont} の使用によって,「abc」の部分のフォントが
+Avant Garde (OT1/pag/m/n) に変わっていることがわかる.
 %</ja>
+\begin{LTXexample}[width=0.3\textwidth]
+\makeatletter
+\SetRelationFont{JY3}{\k@family}{m}{n}{OT1}{pag}{m}{n}
+  % \k@family: current Japanese font family
+\userelfont\selectfont あいうabc
+\end{LTXexample}
 
+%<en>\subsection{Detail of \cs{fontfamily} command}
+%<ja>\subsection{\cs{fontfamily}コマンドの詳細}
+\label{ssec-fontfamilycmd}
 %<*en>
-\item A glue, a kern whose subtype is not 2~(\textit{accent}), and a discretionary break.
-The \textit{id} is \textit{id\_glue}, \textit{id\_kern}
-      and \textit{id\_disc}, respectively.
+In this subsection, we describe when \cs{fontfamily}<family> changes current
+Japanese/alphabetic font family. Basically, current Japanese fotn family is changed to
+<family> if it is recognized as a Japanese font family, and similar with alphabetic font
+family. There is a case that current Japanese/alphabetic font family are both changed to
+<family>, and another case that <family> isn't recognized as a Japanese/alphabetic font
+family either.
+
+\paragraph{Recognition as Japanese font family}
+First, Whether Japanese font family will be changed is determined in following order.
+This order is very similar to \cs{fontfamily} in \pLaTeXe, but we re-implemented in Lua.
+We use an auxiliary list~$N_{\mathrm{J}}$.
 %</en>
 %<*ja>
-\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そして任意改行.
-  その\textit{id}はそれぞれ\textit{id\_glue}, \textit{id\_kern},そして
-  \textit{id\_disc}である.
+本節では,\cs{fontfamily}<family> がいつ和文/欧文フォントファミリを変更するかについて解説
+する.基本的には,<family>が和文フォントファミリだと認識されれば和文側が,欧文フォントファ
+ミリだと認識されれば欧文側が変更される.どちらとも認識されれば和文・欧文の両方が変わるこ
+とになるし,当然どちらとも認識されないこともある.
+
+\paragraph{和文フォントファミリとしての認識}
+まず,<family>が和文フォントファミリとして認識されるかは以下の順序で決定される.
+これは\pLaTeXe の \cs{fontfamily} にとても似ているが,ここではLuaによって実装している.
+補助的に「和文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{J}}$を用いる.
 %</ja>
-\end{enumerate}
+\begin{enumerate}
 %<*en>
-Let \textit{Np}, \textit{Nq} and \textit{Nr} denote a cluster.
+\item If the family~<family> has been defined already by \cs{DeclareKanjiFamily},
+      <family> is recognized as a  Japanese font family.
+      Note that <family> need not be defined under \emph{current} Japanese font encoding.
 %</en>
 %<*ja>
-以下では\textit{Np}, \textit{Nq}, \textit{Nr}でクラスタを表す.
+\item ファミリ<family>が既に \cs{DeclareKanjiFamily} によって定義されている場合,
+      <family>は和文フォントファミリであると認識される.
+      ここで,<family>は現在の和文フォントエンコーディングで定義されていなくてもよい.
 %</ja>
-\end{defn}
+%<*en>
+\item If the family~<family> has been listed in a list~$N_{\mathrm{J}}$, this means
+      that <family> is not a Japanese font family.
+%</en>
+%<*ja>
+\item ファミリ<family>がリスト$N_{\mathrm{J}}$に既に含まれていれば,それは
+      <family>が和文フォントファミリではないことを意味する.
+%</ja>
+%<*en>
+\item If the \Pkg{luatexja-fontspec} package is loaded, we stop here, and <family> is not
+      recognized as a Japanese font family.
 
-\paragraph{\textit{id}の意味}
-$\mathit{Np}.\mathit{id}$の意味を述べるとともに,
-「先頭の文字」を表す\textit{glyph\_node}~$\mathit{Np}.\mathit{head}$と,
-「最後の文字」を表す\textit{glyph\_node}~$\mathit{Np}.\mathit{tail}$を次のように定義する.
-直感的に言うと,\textit{Np}は$\mathit{Np}.\mathit{head}$で始まり$\mathit{Np}.\mathit{tail}$で終わるような単語,
-と見做すことができる.これら$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は
-説明用に準備した概念であって,実際のLuaコード中にそのように書かれているわけではないことに注意.
+      If the \Pkg{luatexja-fontspec} package is \emph{not} loaded, 
+now \LuaTeX-ja looks whether there exists a Japanese font encoding~<enc> such that
+      a font definition named \texttt{<enc><family>.fd} (the file name is
+      all lowercase) exists. If so, <family> is recognized as a  Japanese font family (the font definition file won't be loaded here). 
+      If not, <family> is not a Japanese font family, and 
+      <family> is appended to the list~$N_{\mathrm{J}}$.
+%</en>
+%<*ja>
+\item もし\Pkg{luatexja-fontspec}パッケージが読み込まれていれば,ここで終了であり,
+<family>は和文フォントファミリとして認識されないことになる.
 
-\begin{description}
-\item[\textit{id\_jglyph}] 和文文字.\\
-$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その和文文字を表している
-\textit{glyph\_node}そのものである.
-\item[\textit{id\_glyph}] 和文文字を表していない\textit{glyph\_node}~$p$.\\
-多くの場合,$p$は欧文文字を格納しているが,`ffi'などの合字によって作られた
-\textit{glyph\_node}である可能性もある.
-前者の場合,$\mathit{Np}.\mathit{head}$,~$\mathit{Np}.\mathit{tail} = p$である.
-一方,後者の場合,
-\begin{itemize}
-\item $\mathit{Np}.\mathit{head}$は,
-合字の構成要素の先頭→(その\textit{glyph\_node}における)合字の構成要素の先頭→……
-と再帰的に検索していってたどり着いた\textit{glyph\_node}である.
-\item $\mathit{Np}.\mathit{last}$は,同様に末尾→末尾→と検索してたどり着いた\textit{glyph\_node}である.
-\end{itemize}
-\item[\textit{id\_math}] インライン数式.\\
-便宜的に,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$ともに
-「文字コード$-1$の欧文文字」とおく.
-\item[\textit{id\_hlist}] 縦方向にシフトされていない水平ボックス.\\
-この場合,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$はそれぞれ$p$の内容を表すリストの,
-先頭・末尾のノードである.
-\begin{itemize}
-\item 状況によっては,\TeX ソースで言うと
-\begin{verbatim}
-\hbox{\hbox{abc}...\hbox{\lower1pt\hbox{xyz}}}
-\end{verbatim}
-のように,$p$の内容が別の水平ボックスで開始・終了している可能性も十分あり得る.そのような場合,
-$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,\textbf{垂直方向にシフトされていない}水平ボックスの
-場合だけ内部を再帰的に探索する.例えば上の例では,$\mathit{Np}.\mathit{head}$は文字「a」を表すノードであり,
-一方$\mathit{Np}.\mathit{tail}$は垂直方向にシフトされた水平ボックス,\verb+\lower1pt\hbox{xyz}+に対応するノードである.
-\item また,先頭にアクセント付きの文字がきたり,末尾にイタリック補正用のカーンが
-来ることもあり得る.この場合は,クラスタの定義のところにもあったように,それらは無視して算出を行う.
-\item 最初・最後のノードが合字によって作られた\textit{glyph\_node}のときは,それぞれに対して\textit{id\_glyph}%
-と同様に再帰的に構成要素をたどっていく.
-\end{itemize}
-\item[\textit{id\_pbox}] 「既に処理された」ノードのリストであり,これらのノードが二度処理を受けないために
-まとめて1つのクラスタとして取り扱うだけである.
-\textit{id\_hlist}と同じ方法で$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$を算出する,
-\item[\textit{id\_disc}] discretionary break (\verb+\discretionary{pre}{post}{nobreak}+).\\
-\textit{id\_hlist}と同じ方法で$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$を算出するが,
-第3引数の \texttt{nobreak}(行分割が行われない時の内容)を使う.言い換えれば,ここで行分割が発生した時の状況は
-全く考慮に入れない.
-\item[\textit{id\_box\_like}] \textit{id\_hlist}とならないboxや,rule.\\
-この場合は,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$のデータは利用されないので,2つの算出は無意味である.
-敢えて明示するならば,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は共にnil値である.
-\item[他] 以上にない\textit{id}に対しても,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は無意味.
-\end{description}
+もし\Pkg{luatexja-fontspec}パッケージが読み込まれていなければ,和文エンコーディング<enc>で
+フォント定義ファイル\texttt{<enc><family>.fd}(ファイル名は全て小文字)が存在するようなも
+      のがあるかどうかを調べる.
+存在すれば,<family>は和文フォントファミリと認識される(フォント定義ファイルは読み込まれな
+      い).
+存在しなければ,<family>は和文フォントファミリでないと認識され,リスト$N_{\mathrm{J}}$に<family>を追加することでそれを記憶する.
 
-\paragraph{クラスタの別の分類}
-さらに,JFMグルー挿入処理の実際の説明により便利なように,\textit{id}とは別のクラスタの分類を行っておく.
-挿入処理では2つの隣り合ったクラスタの間に
-空白等の実際の挿入を行うことは前に書いたが,ここでの説明では,問題にしているクラスタ\textit{Np}は「後ろ側」のクラスタである
-とする.「前側」のクラスタについては,以下の説明で\textit{head}が\textit{last}に置き換わることに注意すること.
-\begin{description}
-\item[和文A] リスト中に直接出現している和文文字.
-\textit{id}が\textit{id\_jglyph}であるか,\\
-\textit{id}が\textit{id\_pbox}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+%</ja>
+\end{enumerate}
 
-\item[和文B] リスト中の水平ボックスの中身の先頭として出現した和文文字.和文Aとの違いは,これの前に
-JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip}は入り得る)ことである.\\
-\textit{id}が\textit{id\_hlist}か\textit{id\_disc}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+%<*en>
+\paragraph{Recognition as alphabetic font family}
+Next, whether alphabetic font family will be changed is determined in following order.
+We use auxiliary lists $F_{\mathrm{A}}$~and~$N_{\mathrm{A}}$, 
+%</en>
+%<*ja>
+\paragraph{欧文フォントファミリとしての認識}
+同様に,<family>が和文フォントファミリとして認識されるかは以下の順序で決定される.
+補助的に「欧文フォントファミリと既に認識された」ファミリのリスト$F_{\textrm{A}}$と,
+「欧文フォントファミリではないと認識された」ファミリを格納したリスト$N_{\mathrm{A}}$を用いる.
+%</ja>
 
-\item[欧文] リスト中に直接/水平ボックスの中身として出現している欧文文字.次の3つの場合が該当:
-\begin{itemize}
-\item \textit{id}が\textit{id\_glyph}である.
-\item \textit{id}が\textit{id\_math}である.
-\item \textit{id}が\textit{id\_pbox}か\textit{id\_hlist}か\textit{id\_disc}であって,$\mathit{Np}.\mathit{head}$が\textbf{ALchar}.
-\end{itemize}
-\item[箱] box,またはそれに類似するもの.次の2つが該当:
-\begin{itemize}
-\item \textit{id}が\textit{id\_pbox}か\textit{id\_hlist}か\textit{id\_disc}であって,$\mathit{Np}.\mathit{head}$が\textit{glyph\_node}でない.
-\item \textit{id}が\textit{id\_box\_like}である.
-\end{itemize}
+\begin{enumerate}
+%<*en>
+\item If the family~<family> has been listed in a list~$F_{\mathrm{A}}$, 
+      <family> is recognized as an alphabetic font family.
+%</en>
+%<*ja>
+\item ファミリ<family>がリスト$F_{\mathrm{A}}$に既に含まれていれば,
+      <family>は欧文フォントファミリと認識される.
+%</ja>
+%<*en>
+\item If the family~<family> has been listed in a list~$N_{\mathrm{A}}$, this means
+      that <family> is not  an alphabetic font family.
+%</en>
+%<*ja>
+\item ファミリ<family>がリスト$N_{\mathrm{A}}$に既に含まれていれば,それは
+      <family>が欧文フォントファミリではないことを意味する.
+%</ja>
+%<*en>
+\item If there exists an alphabetic font encoding such that the family~<family> has been
+      defined under it, <family> is recognized as an alphabetic font family, and
+      to memorize this, <family> is appended to the list~$F_{\mathrm{A}}$.
+%</en>
+%<*ja>
+\item ある欧文フォントエンコーディング下でファミリ<family>が定義されていれば,
+      <family>は欧文フォントファミリと認識され,リスト$F_{\mathrm{A}}$に<family>を追加することでこのことを記憶する.
+%</ja>
+%<*en>
+\item Now \LuaTeX-ja looks whether there exists an alphabetic font encoding~<enc> such that
+      a font definition named \texttt{<enc><family>.fd} (the file name is
+      all lowercase) exists. If so, current alphabetic font family will be changed to
+      <family>~(the font definition file won't be loaded here). 
+      If not, current alphabetic font family won't be changed, and
+      <family> is appended to the list~$N_{\mathrm{A}}$.
+%</en>
+%<*ja>
+\item 最終段階では,欧文エンコーディング<enc>で
+フォント定義ファイル\texttt{<enc><family>.fd}(ファイル名は全て小文字)が存在するようなも
+      のがあるかどうかを調べる.
+存在すれば,<family>は欧文フォントファミリと認識される(フォント定義ファイルは読み込まれない).
+存在しなければ,<family>は欧文フォントファミリと認識されないので,リスト$N_{\mathrm{A}}$に
+      <family>を追加してそのことを記憶する.
+%</ja>
+\end{enumerate}
 
-\end{description}
+%<*en>
+Also, each call of \cs{DeclareFontFamily} \emph{after} loading of \LuaTeX-ja makes
+the second argument (family) is appended to the list~$F_{\mathrm{A}}$.
+%</en>
+%<*ja>
+また,\cs{DeclareFontFamily}が\LuaTeX-jaの読み込み後に実行された場合は,
+第2引数(ファミリ名)が自動的に$F_{\mathrm{A}}$に追加される.
+%</ja>
 
-\subsection{段落/水平ボックスの先頭や末尾}
-\paragraph{先頭部の処理}
-まず,段落/水平ボックスの一番最初にあるクラスタ\textit{Np}を探索する.
-水平ボックスの場合は何の問題もないが,段落の場合では以下のノード達を事前に読み飛ばしておく:
-\begin{center}
-\verb+\parindent+由来の水平ボックス ($\mathit{subtype}=3$),及び\textit{subtype}が44~(\textit{user\_defined})でない
-ようなwhatsit.
-\end{center}
-これは,\verb+\parindent+由来の水平ボックスがクラスタを構成しないようにするためである.
+%<*en>
+The above order is very similar to \cs{fontfamily} in \pLaTeXe, but more complicated (clause~3.).
+This is because  \pLaTeXe\ is a \emph{format} however \LuaTeX-ja is not, 
+hence \LuaTeX-ja does not know calls of \cs{DeclareFontFamily} \emph{before} itself is
+loaded.
+%</en>
+%<*ja>
+以上の方針は\pLaTeXe における \cs{fontfamily} にやはり類似しているが,3.が加わり若干複雑になっている.
+それは\pLaTeXe がフォーマットであるのに対し\LuaTeX-jaはそうでないため,
+\LuaTeX-jaは自身が読み込まれる前にどういう\cs{DeclareFontFamily}の呼び出しがあったか
+把握できないからである.
+%</ja>
 
-次に,\textit{Np}の直前に空白$g$を必要なら挿入する:
-\begin{enumerate}
-\item この処理が働くような\textit{Np}は\textsf{和文A}である.
-\item 問題のリストが字下げありの段落(\verb+\parindent+由来の水平ボックスあり)の場合は,
-この空白$g$は「文字コード\texttt{'parbdd'}の文字」と\textit{Np}の間に入るグルー/カーンである.
-\item そうでないとき(\verb+noindent+で開始された段落や水平ボックス)は,
-$g$は「文字コード\texttt{'boxbdd'}の文字」と\textit{Np}の間に入るグルー/カーンである.
-\end{enumerate}
-ただし,もし$g$がglueであった場合,この挿入によって\textit{Np}による行分割が新たに可能になるべきではない.
-そこで,以下の場合には,$g$の直前に\verb+\penalty10000+を挿入する:
-\begin{itemize}
-\item 問題にしているリストが段落であり,かつ
-\item \textit{Np}の前には予めペナルティがなく,$g$はglue.
-\end{itemize}
+%<en>\paragraph{Remarks}
+%<ja>\paragraph{注意}
+%<*en>
+Of course, there is a case that <family> is not recognized as a Japanese font family,  nor
+an alphabetic font family.
+In this case, \LuaTeX-ja treats ``the argument <family> is wrong'', so
+set both current alphabetic and Japanese font family to <family>,
+to use the default family for font substitution.
+%</en>
+%<*ja>
+さて,引数によっては,「和文フォントファミリとも欧文フォントファミリも認識されなかった」
+という事態もあり得る.
+  この場合,引数<family>は不正だった,ということになるので,
+和文・欧文の両方のフォントファミリを<family>に設定し,代用フォントが使われるに任せることにする.
+%</ja>
 
-\paragraph{末尾の処理}
-末尾の処理は,問題のリストが段落のものか水平ボックスのものかによって異なる.
-後者の場合は容易い:最後のクラスタを\textit{Nq}とおくと,\textit{Nq}と「文字コード\texttt{'boxbdd'}の文字」の間に入るグルー/カーンを,
-\textit{Nq}の直後に挿入するのみである.
 
-一方.前者(段落)の場合は,リストの末尾は常に\verb+\penalty10000+と,
-\verb+\parfillskip+由来のグルーが存在する.よって,最後のクラスタ\textit{Np}は
-この\verb+\parfillskip+由来のグルーとなり,実質的な中身の最後はその1つ前のクラスタ\textit{Nq}となる.
-\begin{enumerate}
-\item まず\textit{Nq}の直後に(後に述べる)\textsf{line-end~[E]}によって定まる空白を挿入する.
-\item 次に,段落の最後の「通常の和文文字${}+{}$句点」が独立した行となるのを防ぐために,
-\Param{jcharwidowpenalty}の値の分だけ適切な場所のペナルティを増やす.
+%<*en>
+\section{Addon packages}
+\LuaTeX-ja has several addon packages.
+These addons are written as \LaTeX\ packages, but
+\Pkg{luatexja-otf} and~\Pkg{luatexja-adjust} can be loaded in plain \LuaTeX\
+by \cs{input}.
+%</en>
+%<*ja>
+\section{拡張パッケージ}
+\LuaTeX-jaには(動作には必須ではないが)自由に読み込める拡張が付属している.
+これらは\LaTeX のパッケージとして制作しているが,
+\Pkg{luatexja-otf}と\Pkg{luatexja-adjust}についてはplain \LuaTeX でも\
+\cs{input} で読み込み可能である.
+%</ja>
+\subsection{\Pkg{luatexja-fontspec}}
+\label{ssec-fontspec2}
+%<*en>
+As described in Subsection~\ref{ssec-fontspec}, this optional package
+provides the counterparts for several commands defined in the
+\Pkg{fontspec} package (requires \Pkg{fontspec}~v2.4).
+In addition to OpenType font features in the original \Pkg{fontspec},
+the following ``font features'' specifications are allowed for
+the commands of Japanese version:
+%</en>
+%<*ja>
+\ref{ssec-fontspec}節で述べたように,この追加パッケージは\Pkg{fontspec}%
+パッケージで定義されているコマンドに対応する和文フォント用のコマンドを提供する.
 
-ペナルティ量を増やす場所は,\textit{head}が\textbf{JAchar}であり,かつその文字の\Param{kcatcode}が偶数であるような
-最後のクラスタの直前にあるものたちである\footnote{大雑把に言えば,\Param{kcatcode}が奇数であるような\textbf{JAchar}
-を約物として考えていることになる.\Param{kcatcode}の最下位ビットはこの\Param{jcharwidowpenalty}用にのみ利用される.}.
-\end{enumerate}
+\Pkg{fontspec}パッケージで指定可能な各種OpenType機能に加えて,和文版のコマンドには
+以下の「フォント機能」を指定することができる:
+%</ja>
 
-\subsection{概観と典型例:2つの「和文A」の場合}
-先に述べたように,2つの隣り合ったクラスタ,\textit{Nq}と\textit{Np}の間には,
-ペナルティ,\verb+\vadjust+,whatsitなど,行組版には関係しないものがある.模式的に表すと,
-\[
- \Node{cluster}{\textit{Nq}}\longrightarrow
-\overbrace{
-\Node{penalty}{$p$}\longrightarrow \cdots\longrightarrow \Node{whatsit}{}}^{(a)}
-\longrightarrow \Node{cluster}{\textit{Np}}
-\]
-のようになっている.間の(a)に相当する部分には,何のノードもない場合ももちろんあり得る.
-そうして,JFMグルー挿入後には,この2クラスタ間は次のようになる:
-\[
- \Node{cluster}{\textit{Nq}}\longrightarrow\Node{kern}{左空白}\longrightarrow
-\overbrace{
-\Node{penalty}{$p+x$}\longrightarrow \cdots\longrightarrow \Node{whatsit}{}}^{(a)}
-\longrightarrow \Node{glue or kern}{右空白}\longrightarrow \Node{cluster}{\textit{Np}}
-\]
 
-以後,\textbf{典型的な例として,クラスタ\textit{Nq}と\textit{Np}が共に\textsf{\textmd{和文A}}である場合を見ていこう,}
-この場合が全ての場合の基本となる.
+\begin{cslist}
+\item[CID=<name>\textrm{, }JFM=<name>\textrm{, }JFM-var=<name>]
+
+%<*en>
+These 3 keys correspond to \texttt{cid}, \texttt{jfm} and
+\texttt{jfmvar} keys for \cs{jfont}~and~\cs{tfont} respectively.
+See Subsections~\ref{ssec-jfont} and \ref{ssec-psft} for details
+ of \texttt{cid}, \texttt{jfm} and
+\texttt{jfmvar} keys.
+
+The \texttt{CID} key is effective only when with \texttt{NoEmbed}
+described below. The same JFM cannot be used in both horizontal Japanese fonts and
+            vertical Japanese fonts, hence the \texttt{JFM} key
+will be actually used in \texttt{YokoFeatures}~and~\texttt{TateFeatures} keys.
+%</en>
+%<*ja>
+これら3つのキーはそれぞれ \cs{jfont},~\cs{tfont}に対する
+\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する.
+\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーの詳細は\ref{ssec-jfont}節
+            と\ref{ssec-psft}節を参照.
+
+\texttt{CID} キーは下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である.
+また,横組用JFMと縦組用JFMは共用できないため,実際に \texttt{JFM} キーを用いる際は
+後に述べる\ \texttt{YokoFeatures} キーや \texttt{TateFeatures}\ の中で用いる
+ことになる.
+%</ja>
+
+\item[NoEmbed]
+%<*en>
+By specifying this key, one can use ``name-only'' Japanese font which
+will not be embedded in the output PDF file. See Subsection~\ref{ssec-psft}.
+%</en>
+%<*ja>
+これを指定することで,PDFに埋め込まれない「名前だけ」のフォントを指定することが
+できる.\ref{ssec-psft}節を参照.
+%</ja>
+
+\begin{figure}[!tb]
+\begin{LTXexample}[width=0.25\textwidth]
+\jfontspec[
+  YokoFeatures={Color=007F00}, TateFeatures={Color=00007F},
+  TateFont=KozGoPr6N-Regular
+]{KozMinPr6N-Regular}
+\hbox{\yoko 横組のテスト}\hbox{\tate 縦組のテスト}
+\addjfontfeatures{Color=FF0000}
+\hbox{\yoko 横組}\hbox{\tate 縦組}
+\end{LTXexample}
+%<ja>\caption{\texttt{TateFeatures} 等の使用例}
+%<en>\caption{An example of \texttt{TateFeatures} etc.}
+\label{fig:yokotate-fontspec}
+\end{figure}
+
+\item[Kanjiskip=<bool>]
+%<*ja>
+\pageref{pg:ltjksp}ページで説明した \verb+\jfont+ 中での \texttt{ltjksp} 指定と
+同一の効力を持ち,
+JFM中における \texttt{kanjiskip\_natural}, \texttt{kanjiskip\_stretch},\ 
+\texttt{kanjiskip\_shrink}キー(\pageref{pg:ksp_nat}ページ)の有効/無効を切り替える.
+標準値は \texttt{true} である.
+%</ja>
+
+\item[TateFeatures=\{<features>\}\textrm{, }TateFont=<font>]
+%<*en>
+The \texttt{TateFeatures} key specifies font features which are only turned~on in
+vertical writing, such as \texttt{Style=VerticalKana}~(\texttt{vkna} feature).
+Similarly, the \texttt{TateFont} key specifies the Japanese font which will be used only
+            in vertical writing.
+A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}.
+%</en>
+%<*ja>
+縦組において使用されるフォントや,縦組においてのみ適用されるフォント機能達を
+指定する.使用例は図\ref{fig:yokotate-fontspec}参照.
+%</ja>
+
+\item[YokoFeatures=\{<features>\}]
+%<*en>
+The \texttt{YokoFeatures} key specifies font features which are only turned~on in
+horizontal writing,.
+A demonstrarion is shown in Figure~\ref{fig:yokotate-fontspec}.
+%</en>
+%<*ja>
+同様に,横組においてのみ適用されるフォント機能達を
+指定する.使用例は図\ref{fig:yokotate-fontspec}参照.
+%</ja>
+
+
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\jfontspec[
+  AltFont={
+    {Range="4E00-"67FF, Color=007F00},
+    {Range="6800-"9EFF, Color=0000FF},
+    {Range="3040-"306F, Font=KozGoPr6N-Regular},
+  }
+]{KozMinPr6N-Regular}
+日本国民は、正当に選挙された国会における代表者を通じて行動し、われらとわれらの子孫のために、
+諸国民との協和による成果と、わが国全土にわたつて自由のもたらす恵沢を確保し、……
+\end{LTXexample}
+%<ja>\caption{\texttt{AltFont} の使用例}
+%<en>\caption{An example of \texttt{AltFont}}
+\label{fig:altkanji-fontspec}
+\end{figure}
+
+\item[AltFont]
+
+%<*en>
+As \cs{ltjdeclarealtfont}~(Subsection~\ref{ssec-altfont}) and
+\cs{DeclareAlternateKanjiFont}~(Subsection~\ref{ssec-nfsspat}),
+with this key, one can typeset some Japanese characters
+by a different font and/or using different features.
+The \texttt{AltFont} feature takes a comma-separated list of comma-separated lists,
+as the following:
+%</en>
+%<*ja>
+\ref{ssec-altfont}節の \cs{ltjdeclarealtfont} や,
+\ref{ssec-nfsspat}節の \cs{DeclareAlternateKanjiFont} と同様に,
+このキーを用いると一部の文字を異なったフォントや機能たちを使って組むことができる.
+\texttt{AltFont} キーに指定する値は,次のように二重のコンマ区切りリストである:
+%</ja>
+\begin{lstlisting}[escapechar=\#]
+AltFont = {
+  ...
+  { Range=#\LARG range>#, #\LARG features>#},
+  { Range=#\LARG range>#, Font=#\LARG font~name>#, #\LARG features># },
+  { Range=#\LARG range>#, Font=#\LARG font~name># },
+  ...
+}
+\end{lstlisting}
+%<*en>
+Each sublist should have the \texttt{Range} key
+(sublist which does not contain \texttt{Range} key is simply ignored).
+A demonstrarion is shown in Figure~\ref{fig:altkanji-fontspec}.
+%</en>
+%<*ja>
+各部分リストには \texttt{Range} キーが必須である(含まれない部分リストは
+単純に無視される).指定例は図\ref{fig:altkanji-fontspec}に示した.
+%</ja>
+\end{cslist}
+
+%<*ja>
+なお,\Pkg{luatexja-fontspec} 読み込み時には和文フォント定義ファイル%
+\texttt{<ja-enc><family>.fd}は全く参照されなくなる.
+%</ja>
+
+
+%<*en>
+\paragraph{Remark on \texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} keys}
+In \texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures} keys,
+one cannot specify per-shape settings such as \texttt{BoldFeatures}.
+For example,
+\begin{lstlisting}
+AltFont = {
+  { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
+    Range="3000-"30FF, BoldFeatures={Color=007F00} }
+}
+\end{lstlisting}
+does \emph{not} work. Instead, one have to write
+\begin{lstlisting}
+UprightFeatures = {
+  AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } },
+},
+BoldFeatures = {
+  AltFont =  { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } },
+}
+\end{lstlisting}
+
+On the other hand, \texttt{YokoFeatures}, \texttt{TateFeatures} and  \texttt{TateFont}
+keys can be specified in each list in the \texttt{AltFont} key. Also,
+one can specify \texttt{AltFont} inside \texttt{YokoFeatures},~\texttt{TateFeatures}.
+
+Note that features which are specified in \texttt{YokoFeatures}~and~\texttt{TateFeatures}
+are always interpreted \emph{after} other ``direction-independent'' features.
+This explains why \cs{addjfontfeatures} at~line~6 in~Figure~\ref{fig:yokotate-fontspec}
+has no effect, because a color specification is already done in
+\texttt{YokoFeatures}~and~\texttt{TateFeatures} keys.
+%</en>
+%<*ja>
+\paragraph{\texttt{AltFont}, \texttt{YokoFeatures}, \texttt{TateFeatures} 等の制限}
+\texttt{AltFont},~\texttt{YokoFeatures},~\texttt{TateFeatures}の各キーは
+シェイプ別に指定されるべきものであり,
+内部では \texttt{BoldFeatures} などのシェイプ別の指定は行うことが出来ない.
+例えば.
+\begin{lstlisting}
+AltFont = {
+  { Font=HogeraMin-Light, BoldFont=HogeraMin-Bold,
+    Range="3000-"30FF, BoldFeatures={Color=007F00} }
+}
+\end{lstlisting}
+のように指定することは出来ず,
+\begin{lstlisting}
+UprightFeatures = {
+  AltFont = { { Font=HogeraMin-Light, Range="3000-"30FF, } },
+},
+BoldFeatures = {
+  AltFont =  { { Font=HogeraMin-Bold, Range="3000-"30FF, Color=007F00 } },
+}
+\end{lstlisting}
+のように指定しなければならない.
+
+一方,\texttt{AltFont} キー内の各リストでは
+\ \texttt{YokoFeatures},~\texttt{TateFeatures} 及び \texttt{TateFont} キーを
+指定することは可能であり.また\ \texttt{YokoFeatures},~\texttt{TateFeatures} キーの
+中身に \texttt{AltFont} を指定することができる.
+
+また,図\ref{fig:yokotate-fontspec}後半部では6行目の色の指定が効かず,
+2行目で指定した\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による色の指定が有効になっ
+たままである.これは\emph{\ \texttt{YokoFeatures},~\texttt{TateFeatures}\ による
+OpenType機能指定は
+組方向に依存しないOpenType機能の指定より後に解釈される}からである.
+
+%</ja>
+
+
+\subsection{\Pkg{luatexja-otf}}
+\label{ssec-ltjotf}
+%<*en>
+This optional package supports typesetting characters in
+Adobe-Japan1 character collection
+(or other CID character collection, if the font is supported).
+The package \Pkg{luatexja-otf} offers the following 2~low-level
+commands:
+%</en>
+%<*ja>
+この追加パッケージはAdobe-Japan1(フォント自身が持っていれば,
+別のCID文字セットでも可)の文字の出力をサポートする.
+\Pkg{luatexja-otf}は以下の2つの低レベルコマンドを提供する:
+%</ja>
+\begin{cslist}
+\item[\cs{CID}\{<number>\}]
+%<*en>
+Typeset a character whose CID number is <number>.
+%</en>
+%<*ja>
+CID番号が<number>の文字を出力する.
+%</ja>
+
+\item[\cs{UTF}\{<hex\_number>\}]
+%<*en>
+Typeset a character whose character code is <hex\_number> (in hexadecimal).
+This command is similar to \verb+\char"+<hex\_number>,\ %"
+but please remind remarks below.
+%</en>
+%<*ja>
+文字コードが(16進で)<hex\_number>の文字を出力する.
+このコマンドは \verb+\char"+<hex\_number>と似ているが,下の注意を参照すること.%"
+%</ja>
+\end{cslist}
+
+%<*ja>
+このパッケージは,マクロ集 \texttt{luatexja-ajmacros.sty}\footnote{\Pkg{otf}パッケージ付属の井上浩一氏によるマクロ集
+\texttt{ajmacros.sty} に対して
+漢字コードをUTF-8にしたり,plain \LuaTeX でも利用可能にするという
+修正を加えたものである.}\ も自動的に読み込む.
+\texttt{luatexja-ajmacros.sty} は,
+そのため,\Pkg{luatexja-otf} を読みこめば \texttt{ajmacros.sty} マクロ集にある \cs{aj半角} などのマクロもそのまま使うことができる.
+%</ja>
+%<*en>
+This package automatically loads \texttt{luatexja-ajmacros.sty}, which is slightly
+modified version of \texttt{ajmacros.sty}\footnote{Useful macros by iNOUE Koich!, for the
+\Pkg{japanese-otf} package.}.
+Hence one can use macros which sre defined in \texttt{ajmacros.sty}, such as~\cs{aj半角}.
+%</en>
+
+%<en>\paragraph{Remarks}
+%<ja>\paragraph{注意}
+%<*en>
+Characters by \cs{CID} and \cs{UTF} commands are different from
+ordinary characters in the following points:
+%</en>
+%<*ja>
+\cs{CID} と \cs{UTF} コマンドによって出力される文字は
+以下の点で通常の文字と異なる:
+%</ja>
+\begin{itemize}
+%<*en>
+\item Always treated as \textbf{JAchar}s.
+%</en>
+%<*ja>
+\item 常に\textbf{JAchar}として扱われる.
+%</ja>
+%<*en>
+\item Processing codes for supporting OpenType features (\textit{e.g.},
+      glyph replacement and kerning) by the \Pkg{luaotfload} package
+      is not performed to these characters.
+%</en>
+%<*ja>
+\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための
+  \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない.
+%</ja>
+\end{itemize}
+
+%<en>\paragraph{Additional syntax of JFM}
+%<ja>\paragraph{JFMへの記法の追加}
+
+%<*en>
+The package \Pkg{luatexja-otf} extends the syntax of JFM; the entries of \texttt{
+chars} table in JFM now allows a string in the form
+\verb+'AJ1-xxx'+, which stands for the character
+whose CID number in Adobe-Japan1 is \verb+xxx+.
+
+This extended notation is used in the standard JFM \texttt{jfm-ujis.lua}
+to typeset halfwidth Hiragana glyphs (CID~516--598) in halfwidth.
+%</en>
+%<*ja>
+\Pkg{luatexja-otf}パッケージを読み込むと,
+JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形の文字列が
+使えるようになる.これはAdobe-Japan1におけるCID番号が \verb+xxx+ の文字を表す.
+
+この拡張記法は,標準JFM~\texttt{jfm-ujis.lua}で,半角ひらがなのグリフ(CID~516--598)を
+正しく半角幅で組むために利用されている.
+%</ja>
+
+%<*en>
+\paragraph{IVS support}
+Recent fonts support Ideographic Variation Selector (IVS).
+It seems that \Pkg{luaotfload} and \Pkg{fontspec} packages do not support
+IVS, so we implemented IVS support in \Pkg{luatexja-otf}.
+\emph{IVS support is experimental; if you want to enable this, load
+\Pkg{luatexja-otf} and execute the following:}
+%</en>
+%<*ja>
+\paragraph{IVSサポート}
+最近のOpenTypeフォントやTrueTypeフォントには,
+\texttt{U+E0100}--\texttt{U+E01EF}の範囲の「文字」
+(漢字用異体字セレクタ)を後置することによって
+字形を指定する仕組み(IVS)が含まれている.
+執筆時点の2013年12月では,\Pkg{luaotfload}や\Pkg{fontspec}パッケージ類は
+IVSに対応してはいないようである.これらのパッケージで対応してくれるのが理想的だが,
+それまでのつなぎとして,\Pkg{luatexja-otf}パッケージ内にIVS対応を仕込んでおいた.
+
+\medskip
+
+\emph{IVS対応は試験的なものである.
+有効にするには,\Pkg{luatexja-otf}パッケージを読み込んだ上で以下の命令を実行する%
+\footnote{この命令を2回以上実行しても意味がない.}:}
+%</ja>
+\begin{lstlisting}
+\directlua{luatexja.otf.enable_ivs()}
+\end{lstlisting}
+%<ja> すると,上の命令を実行した箇所以降では,以下のようにIVSによる字形指定が有効となる.
+%<en> After executing the command above, you can use IVS like the following:
+\begin{LTXexample}
+\Large
+\jfontspec{KozMinPr6N-Regular}
+奈良県葛󠄀城市と,東京都葛󠄁飾区.\\
+こんにちは,渡
+邉󠄀邉󠄁邉󠄂邉󠄃邉󠄄
+邉󠄅邉󠄆邉󠄇邉󠄈邉󠄉
+邉󠄊邉󠄋邉󠄌邉󠄍邉󠄎
+さん.
+\end{LTXexample}
+%<*ja>
+左上側の入力においては,漢字用異体字セレクタを明示するため,
+例えばVariation~Selector~18 (\texttt{U+E0101})を\IVSB{18}のように表記している.
+%</ja>
+\medskip
+
+%<*en>
+Specifying glyph variants by IVS precedes glyph replacement by font features.
+For example, only ``葛'' in ``葛西'' is changed by font features
+\texttt{jp78}~or~\texttt{jp90}, which does not followed by any variation selector.
+%</en>
+%<*ja>
+また,IVSによる字形指定は,OpenType機能によるそれに優先されることとした.
+下の例において,\texttt{jp78}, \texttt{jp90} 指定で字形が変化した文字は
+異体字セレクタが続いていない「葛西」中の「葛」のみである.
+%</ja>
+\begin{LTXexample}
+ \def\TEST#1{%
+   {\jfontspec[#1]{KozMinPr6N-Regular}%
+   葛󠄀城市,葛󠄁飾区,葛西}\\}
+ 指定なし:\TEST{}
+ \texttt{jp78}:\TEST{CJKShape=JIS1978}
+ \texttt{jp90}:\TEST{CJKShape=JIS1990}
+\end{LTXexample}
+
+%<*ja>
+現状では,\TeX 側のインターフェースとなる \Pkg{luatexja-otf.sty} は一切変更していない
+ので,ZRさんによる\Pkg{PXipamjm}パッケージ%
+\footnote{\url{https://github.com/zr-tex8r/PXipamjm}. 説明は彼のブログ記事
+「pxipamjm パッケージの説明書のような何か(\url{http://d.hatena.ne.jp/zrbabbler/20131221})」
+にある.}
+にあるような気の利いた命令はまだない.
+異体字の一覧表示を行いたい場合は,gitリポジトリ内の \texttt{test/test19-ivs.tex} 中にある
+Lua・\TeX コードが参考になるだろう.
+%</ja>
+
+
+\subsection{\Pkg{luatexja-adjust}}
+\label{ssec-adj}
+\begin{figure}[t]
+\def\sq{%
+  \hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{%
+   \hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw%
+  \hskip\dimexpr.5\zw-.2pt\relax}\hss}}
+\def\sb{\hbox to 1\zw{\hss\fboxsep=-.5\fboxrule\fbox{%
+  ■\hskip\dimexpr-.5\zw-.2pt\vrule width.4pt height.08\zw depth.12\zw%
+  \hskip\dimexpr.5\zw-.2pt\relax}\hss}}
+\newbox\gridbox
+\def\outbox#1{{\Large%
+  \ltjsetparameter{kanjiskip=0pt plus .2\zw minus .2\zw}%
+  \setbox\gridbox=\hbox to 20\zw{\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb\sq\sq\sq\sq\sb}%
+  \hbox{\textcolor{cyan}{\copy\gridbox}\hskip-20\zw%
+  \vbox{\hsize=20\zw\noindent\leftskip0pt\rightskip0pt\parfillskip0pt#1}\vrule}%
+}}
+
+{\centering
+\begin{tabular}{lc}
+\toprule
+no adjustment&\outbox{以上の原理は,「包除原理」とよく呼ばれるが\hskip-.5\zw\null}\\
+without priority&%
+\ltjdisableadjust
+\outbox{以上の原理は,「包除原理」とよく呼ばれるが}%
+\ltjenableadjust\\
+with priority&%
+\outbox{以上の原理は,「包除原理」とよく呼ばれるが}
+%<en>\ltjdisableadjust
+\\
+\bottomrule
+\end{tabular}\par}
+\smallskip
+
+Note: the value of
+\Param{kanjiskip} is 0\,pt${}^{+1/5\,\mathrm{em}}_{-1/5\,\mathrm{em}}$ in this figure,
+for making the difference obvious.
+%<ja>\caption{行長調整}\label{fig-adj}
+%<en>\caption{Line adjustment}\label{fig-adj}
+\end{figure}
+
+
+%<*en>
+(see Japanese version of this manual)
+%</en>
+%<*ja>
+\pTeX では,行長調整において優先度の概念が存在しなかったため,図
+\ref{fig-adj}上段における半角分の半端は,図\ref{fig-adj}中段のように,鍵
+括弧周辺の空白と和文間空白(\Param{kanjiskip})の両方によって負担される.し
+かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい
+ては,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文
+文字はベタ組で組まれる(図\ref{fig-adj}下段)ことになっている.この追加
+パッケージは\cite{jlreq}や\cite{x4051}における規定のような,優先順位付き
+の行長調整を提供する.詳細な仕様については\ref{sec-adjspec}章を参照してほしい.
+\begin{itemize}
+ \item 優先度付き行長調整は,段落を行分割した後に個々の行について行われるものである.
+そのため,行分割の位置は変化することはない.
+
+また,\verb+\hbox to ... {...}+ のような「幅が指定されたhbox」では無効である.
+ \item 優先度付き行長調整を行うと,和文処理グルーの自然長は変化しないが,伸び量や縮み量は
+一般に変化する.そのため,既に組まれた段落を \cs{unhbox} などを利用して組み直す処理を
+行う場合には注意が必要である.
+\end{itemize}
+
+
+\Pkg{luatexja-adjust} は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する.
+
+\begin{cslist}
+\item[\cs{ltjdisableadjust}]
+優先順位付きの行長調整を無効化する.
+
+\item[\cs{ltjenableadjust}]
+優先順位付きの行長調整を有効化する.
+
+\item[\textsf{adjust}\,=<bool>] \cs{ltjsetparameter} で指定可能な追加パラメータであり,
+<bool>が\textit{true}なら \cs{ltjenableadjust} を,
+そうでなければ \cs{ltjdisableadjust} を実行する.
+\end{cslist}
+%</ja>
+
+\subsection{\Pkg{luatexja-ruby}}
+%<*en>
+This addon package provides functionality of ``ruby'' (\emph{furigana}) annotations
+using callbacks of \LuaTeX-ja.
+There is no detailed manual of \Pkg{luatexja-ruby.sty} in English.
+(Japanese manual is another PDF file, \url{luatexja-ruby.pdf}.)
+%</en>
+%<*ja>
+この追加パッケージは,\LuaTeX-jaの機能を利用したルビ(振り仮名)の組版機能を提供する.
+前後の文字種に応じた前後への自動進入や,
+行頭形・行中形・行末形の自動的な使い分けが特徴である.
+
+ルビ組版に設定可能な項目や注意事項が多いため,本追加パッケージの詳細な説明は
+使用例と共に \url{luatexja-ruby.pdf}\ という別ファイルに載せている.
+この節では簡単な使用方法のみ述べる.
+%</ja>
+
+\begin{description}
+%<*en>
+ \item[Group-ruby]
+By default, ruby characters (the second argument of \cs{ruby})
+are attached to base characters (the first argument), as one object.
+This type of ruby is called \emph{group-ruby}.
+%</en>
+%<*ja>
+ \item[グループルビ] 標準ではグループルビの形で組まれる.第1引数に親文字,
+第2引数にルビを記述する.
+%</ja>
+\begin{LTXexample}[width=0.3\textwidth]
+東西線\ruby{妙典}{みようでん}駅は……\\
+東西線の\ruby{妙典}{みようでん}駅は……\\
+東西線の\ruby{妙典}{みようでん}という駅……\\
+東西線\ruby{葛西}{かさい}駅は……
+\end{LTXexample}
+%<*en>
+As the above example, ruby hangover is allowed on the Hiragana before/after
+its base characters.
+%</en>
+%<ja> この例のように,標準では前後の平仮名にルビ全角までかかるようになっている.
+
+%<*en>
+\item[Mono-ruby]
+To attach ruby characters to each base characters (\emph{mono-ruby}),
+one should use \cs{ruby} multiple times:
+%</en>
+%<*ja>
+ \item[モノルビ] 親文字を1文字にするとモノルビとなる.
+2文字以上の熟語をモノルビの形で組みたい場合は,面倒でも
+その数だけ \cs{ruby} を書く必要がある.
+%</ja>
+\begin{LTXexample}[width=0.3\textwidth]
+東西線の\ruby{妙}{みよう}\ruby{典}{でん}駅は……
+\end{LTXexample}
+
+%<*en>
+ \item[Jukugo-ruby]
+Vertical bar~\verb+|+ denotes a boundary of \emph{groups}.
+%</en>
+%<*ja>
+ \item[熟語ルビ] 引数内の縦棒 \verb+|+ はグループの区切りを表し,
+複数グループのルビは熟語ルビとして組まれる.
+\cite{x4051}にあるように,
+どのグループでも「親文字」が対応するルビ以上の長さの場合は
+各グループごとに,そうでないときは全体をまとめて1つのグループルビとして組まれる.
+\cite{jlreq}で規定されている組み方とは異なるので注意.
+%</ja>
+\begin{LTXexample}
+\ruby{妙|典}{みよう|でん}\
+\ruby{葛|西}{か|さい}\
+\ruby{神楽|坂}{かぐら|ざか}
+\end{LTXexample}
+%<*en>
+If there are multiple groups in one \cs{ruby} call,
+A linebreak between two groups is allowed.
+%</en>
+%<ja> 複数ルビではグループとグループの間で改行が可能である.
+\begin{LTXexample}[width=0.3\textwidth]
+\vbox{\hsize=6\zw\noindent
+  \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た}
+  \hbox to 2.5\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た}
+  \hbox to   3\zw{}\ruby{京|急|蒲|田}{けい|きゆう|かま|た}
+}
+\end{LTXexample}
+\end{description}
+
+%<*en>
+If the width of ruby characters are longer than that of base characters,
+\cs{ruby} automatically selects the appropriate form
+among the line-head form, the line-middle form, and the line-end form.
+%</en>
+%<*ja>
+また,ルビ文字のほうが親文字よりも長い場合は,自動的に
+行頭形・行中形・行末形のいずれか適切なものを選択する.
+%</ja>
+\begin{LTXexample}[width=0.3\textwidth]
+\vbox{\hsize=8\zw\noindent
+\null\kern3\zw ……を\ruby{承}{うけたまわ}る
+     \kern1\zw ……を\ruby{承}{うけたまわ}る\\
+\null\kern5\zw ……を\ruby{承}{うけたまわ}る
+}
+\end{LTXexample}
+
+
+%<*ja>
+\subsection{\Pkg{lltjext}}
+\pLaTeX では縦組用の拡張として \Pkg{plext} パッケージが用意されていたが,
+それを\LuaTeX-ja用に書きなおしたものが本追加パッケージ \Pkg{lltjext} である.
+
+従来の \Pkg{plext} パッケージとの違いは,
+{\catcode`\<=12
+\begin{itemize}
+ \item 組方向オプション \texttt{<y>}(横組),\texttt{<t>}(縦組),
+\texttt{<z>}\ の他に\ \texttt{<d>}(dtou方向),\texttt{<u>}(utod方向)を追加した.
+\texttt{<z>} と \texttt{<u>} の違いは,\texttt{<z>} が(\Pkg{plext} パッケージと同様に)
+周囲の組方向が縦組のときにしか意味を持たない
+       のに対し,\texttt{<u>} にはそのような制限がないことである.
+
+ \item \Pkg{plext} パッケージでは,表組(\texttt{tabular} 環境,\texttt{align} 環境等)や
+\texttt{minipage} 環境,\cs{parbox} 命令において,
+垂直位置指定 \texttt{[t]},~\texttt{[b]} の挙動が非読み込み時と微妙に変わることがあった.
+
+\Pkg{lltjext} パッケージでは,垂直位置指定が\LaTeXe と同様の挙動(以下に示す)に
+なるように修正した.
+\begin{itemize}
+ \item \texttt{[t]} オプション指定時は,ボックスのベースラインが中身の1行目のベースライン
+       (1行目の上に罫線などが来た時は,ボックスの上端)に一致するように配置する.
+ \item \texttt{[b]} オプション指定時は,ボックスのベースラインが中身の最終行のベースライン
+       (中身の最後が罫線などの時は,ボックスの下端)に一致するように配置する.
+ \item それ以外のときは,ボックスの中央が「数式の軸」に一致するように配置する.
+\end{itemize}
+
+ \item 連数字用命令 \cs{rensuji} における位置合わせオプション \texttt{[l]}, \texttt{[c]},
+       \texttt{[r]} の挙動を若干変更した.
+
+\end{itemize}
+}
+%</ja>
+%<*en>
+\subsection{\texttt{lltjext.sty}}
+\pLaTeX\ supplies additional macros for vertical writing in the \Pkg{plext} package.
+The \Pkg{lltjext} package which we want to describe here is the \LuaTeX-ja
+counterpart of the \Pkg{plext} package.
+%</en>
+
+%<*ja>
+念の為,本 \Pkg{lltjext} パッケージで追加・変更している命令の一覧を載せておく.
+\begin{cslist}
+\item[tabular\textrm{, }array\textrm{, }minipage環境]
+これらの環境は,
+\begin{lstlisting}
+\begin{tabular}<dir>[pos]{table spec} ... \end{tabular}
+\begin{array}<dir>[pos]{table spec}   ... \end{array}
+\begin{minipage}<dir>[pos]{width}     ... \end{minipage}
+\end{lstlisting}
+のように,組方向オプション \texttt{\<dir\>} が拡張されている.
+既に述べたように,組方向オプションに指定できる値は以下の5つであり,
+それ以外を指定した時や無指定時は周囲の組方向と同じ組方向になる.
+\begin{description}
+ \item[y] 横組(\cs{yoko})
+ \item[t] 縦組(\cs{tate})
+ \item[z] 周囲が縦組の時はutod方向,それ以外はそのまま
+ \item[d] dtou方向
+ \item[u] utod方向
+\end{description}
+\item[\cs{parbox}\<<dir>\>{[<pos>]}\{<width>\}\{<contents>\}]
+\cs{parbox} 命令も同様に,組方向の指定ができるように拡張されている.
+
+\item[\cs{pbox}\<<dir>\>{[<width>][<pos>]}\{<contents>\}]
+組方向<dir>で<contents>の中身をLRモードで組む命令である.
+<width>が正の値であるときは,ボックス全体の幅がその値となる.
+その際,中身は<pos>の値に従い,左寄せ(\texttt{l}),右揃え(\texttt{r}),
+中央揃え(それ以外)される.
+\item[picture環境]
+図表作成に用いる \texttt{picture} 環境も,
+\begin{lstlisting}
+\begin{picture}<dir>(x_size, y_size)(x_offset,y_offset)
+  ...
+\end{picture}
+\end{lstlisting}
+と組方向が指定できるように拡張されている.
+$x$成分の増加方向は字送り方向,$y$成分の増加方向は行送り方向の\emph{反対方向}となる.
+\Pkg{plext} パッケージと同様に
+内部ではベースライン補正(\Param{yalbaselineshift}パラメータなど)の影響を受けないように,
+\cs{put},~\cs{line}, \cs{vector}, \cs{dashbox}, \cs{oval},~\cs{circle}も
+ベースライン補正を受けないように再定義されている.
+
+\item[\cs{rensuji}{[<pos>]}\{<contents>\}\textrm{, }\cs{rensujiskip}]
+
+\item[\cs{Kanji}\{<counter\_name>\}]
+
+\item[\cs{kasen}\{<contents>\}\textrm{, }\cs{bou}\{<contents>\}\textrm{,
+                    }\cs{boutenchar}]
+
+\item[参照番号]
+\end{cslist}
+%</ja>
+%<*en>
+\begin{cslist}
+\item[tabular\textrm{, }array\textrm{, }minipage\textrm{ environments}]
+These environments are extended by \texttt{\<dir\>}, which specifies the direction,
+as follows:
+\begin{lstlisting}
+\begin{tabular}<dir>[pos]{table spec} ... \end{tabular}
+\begin{array}<dir>[pos]{table spec}   ... \end{array}
+\begin{minipage}<dir>[pos]{width}     ... \end{minipage}
+\end{lstlisting}
+This option permits one of the following five values. If none of them is specified,
+the direction inside the environment is same as that outside the enviromnent.
+\begin{description}
+ \item[y] \emph{yoko} direction (horizontal writing)
+ \item[t] \emph{tate} direction (vertical writing)
+ \item[z] \emph{utod} direction if direction outside the env.\ is \emph{tate}.
+ \item[d] \emph{dtou} direction
+ \item[u] \emph{utod} direction
+\end{description}
+\item[\cs{parbox}\<<dir>\>{[<pos>]}\{<width>\}\{<contents>\}]
+\cs{parbox} command is also extended by \texttt{\<dir\>}.
+
+\item[\cs{pbox}\<<dir>\>{[<width>][<pos>]}\{<contents>\}]
+This commands typeset <contents> in LR-mode, in <dir> direction.
+If <width> is positive, the width of the box becomes this <width>.
+In this case, <contents> will be aligned \dots
+
+\item[picture\textrm{\ environment}]
+
+\item[\cs{rensuji}{[<pos>]}\{<contents>\}\textrm{, }\cs{rensujiskip}]
+
+\item[\cs{Kanji}\{<counter\_name>\}]
+
+\item[\cs{kasen}\{<contents>\}\textrm{, }\cs{bou}\{<contents>\}\textrm{,
+                    }\cs{boutenchar}]
+
+\item[参照番号]
+\end{cslist}
+%</en>
+
+
+
+%<en>\part{Implementations}
+%<ja>\part{実装}
+\label{part-imp}
+%<en>\section{Storing Parameters}
+%<ja>\section{パラメータの保持}
+\label{sec-para}
+%<en>\subsection{Used dimensions, attributes and whatsit nodes}
+%<ja>\subsection{\LuaTeX-jaで用いられるレジスタとwhatsitノード}
+
+%<*en>
+Here the following is the list of dimensions and attributes which are used in \LuaTeX-ja.
+%</en>
+%<*ja>
+以下は\LuaTeX-jaで用いられる寸法レジスタ(dimension),属性レジスタ(attribute)の
+リストである.
+%</ja>
+\begin{list}{}{%
+\def\makelabel{\ttfamily}\advance\leftmargin1\zw
+\def\dim#1{\item[\textbackslash #1\ \textrm{(dimension)}]}
+\def\cnt#1{\item[\textbackslash #1\ \textrm{(counter)}]}
+\def\attr#1{\item[\textbackslash #1\ \textrm{(attribute)}]}
+}
+
+\dim{jQ}
+%<*en>
+\cs{jQ} is equal to
+                       $1\,\textrm{Q}=0.25\,\textrm{mm}$, where ``Q''~(also called ``級'') is
+                       a unit used in Japanese phototypesetting.
+So one should not change the value of this dimension.
+%</en>
+%<*ja>
+\cs{jQ} は写植で用いられた$1\,\textrm{Q}=0.25\,\textrm{mm}$%
+(「級」とも書かれる)に等しい.したがって,
+この寸法レジスタの値を変更してはならない.
+%</ja>
+
+\dim{jH}
+%<*en>
+There is also a unit called ``歯'' which equals to $0.25\,\textrm{mm}$ and
+                         used in Japanese phototypesetting.
+This \cs{jH} is the same \cs{dimen} register as \cs{jQ}.
+%</en>
+%<*ja>
+同じく写植で用いられていた単位として「歯」があり,これも$0.25\,\textrm{mm}$と
+等しい.この \cs{jH} は \cs{jQ} と同じ寸法レジスタを指す.
+%</ja>
+
+\dim{ltj@zw}
+%<*en>
+A temporal register for the ``full-width'' of current Japanese font.
+The command \cs{zw} sets this register to the correct value, and
+``return'' this register itself.
+%</en>
+%<*ja>
+現在の和文フォントの「全角幅」を保持する一時レジスタ.
+\cs{zw} 命令は,このレジスタを適切な値に設定した後,
+「このレジスタ自体を返す」.
+%</ja>
+
+\dim{ltj@zh}
+%<*en>
+A temporal register for the ``full-height'' (usually the sum of height of imaginary body and its depth) of current Japanese font.
+The command \cs{zh} sets this register to the correct value, and
+``return'' this register itself.
+%</en>
+%<*ja>
+現在の和文フォントの「全角高さ」(通常,高さと深さの和)を保持する一時レジスタ.
+\cs{zh} 命令は,このレジスタを適切な値に設定した後,
+「このレジスタ自体を返す」.
+%</ja>
+
+\attr{jfam}
+%<*en>
+Current number of Japanese font family for math formulas.
+%</en>
+%<*ja>
+数式用の和文フォントファミリの現在の番号.
+%</ja>
+
+\attr{ltj@curjfnt}
+%<*en>
+The font index of current Japanese font for horizontal direction.
+%</en>
+%<*ja>
+現在の横組用和文フォントのフォント番号.
+%</ja>
+
+\attr{ltj@curtfnt}
+%<*en>
+The font index of current Japanese font for vertical direction.
+%</en>
+%<*ja>
+現在の縦組用和文フォントのフォント番号.
+%</ja>
+
+\attr{ltj@charclass}
+%<*en>
+The character class of a \textbf{JAchar}. This attribute is only set on a
+                        \textit{glyph\_node} which contains a \textbf{JAchar}.
+%</en>
+%<*ja>
+\textbf{JAchar}の文字クラス.\textbf{JAchar}が格納された\textit{glyph\_node}でのみ使われる.
+%</ja>
+
+\attr{ltj@yablshift}
+%<*en>
+The amount of shifting the baseline of alphabetic fonts in scaled point ($2^{-16}\,\textrm{pt}$).
+%</en>
+%<*ja>
+スケールド・ポイント($2^{-16}\,\textrm{pt}$)を単位とした欧文フォントのベースラインの移動量.
+%</ja>
+
+\attr{ltj@ykblshift}
+%<*en>
+The amount of shifting the baseline of Japanese fonts in scaled point ($2^{-16}\,\textrm{pt}$).
+%</en>
+%<*ja>
+スケールド・ポイント($2^{-16}\,\textrm{pt}$)を単位とした和文フォントのベースラインの移動量.
+%</ja>
+
+\attr{ltj@tablshift}
+\attr{ltj@tkblshift}
+
+\attr{ltj@autospc}
+%<*en>
+Whether the auto insertion of \Param{kanjiskip} is allowed at the node.
+%</en>
+%<*ja>
+そのノードで\Param{kanjiskip}の自動挿入が許されるかどうか.
+%</ja>
+
+\attr{ltj@autoxspc}
+%<*en>
+Whether the auto insertion of \Param{xkanjiskip} is allowed at the node.
+%</en>
+%<*ja>
+そのノードで\Param{xkanjiskip}の自動挿入が許されるかどうか.
+%</ja>
+
+\attr{ltj@icflag}
+%<*en>
+An attribute for distinguishing ``kinds'' of a node. One of the following value is
+assigned to this attribute:
+%</en>
+%<*ja>
+ノードの「種類」を区別するための属性.以下のうちのひとつが値として割り当てられる:
+%</ja>
+\begin{description}
+\item[\textit{italic} (1)]
+%<*en>
+Kerns from italic correction (\verb+\/+), or from kerning information of a Japanese font.
+These kerns are ``ignored'' in the insertion process of \textbf{JAglue},
+unlike explicit \cs{kern}.
+%</en>
+%<*ja>
+イタリック補正(\verb+\/+)によるカーン,
+または \Pkg{luaotfload} によって挿入されたフォントのカーニング情報由来のカーン.
+これらのカーンは通常の \cs{kern} とは異なり,
+\textbf{JAglue}の挿入処理においては透過する.
+%</ja>
+
+\item[\textit{packed} (2)]
+
+\item[\textit{kinsoku} (3)]
+%<*en>
+Penalties inserted for the word-wrapping process (\emph{kinsoku shori}) of Japanese characters.
+%</en>
+%<ja>禁則処理のために挿入されたペナルティ.
+\item[\mathversion{bold}$(\textit{from\_jfm}-2)$--$(\textit{from\_jfm}+2)$~(4--8)]
+%<en>Glues/kerns from JFM.
+%<ja>JFM由来のグルー/カーン.
+\item[\textit{kanji\_skip}~(9), \textit{kanji\_skip\_jfm}~(10)]
+%<en>Glues from \Param{kanjiskip}.
+%<ja>和文間空白\Param{kanjiskip}を表すグルー.
+\item[\textit{xkanji\_skip}~(11), \textit{xkanji\_skip\_jfm}~(12)]
+%<en>Glues from \Param{xkanjiskip}.
+%<ja>和欧文間空白\Param{xkanjiskip}を表すグルー.
+\item[\textit{processed} (13)]
+%<en>Nodes which is already processed by \ldots.
+%<ja>\LuaTeX-ja の内部処理によって既に処理されたノード.
+\item[\textit{ic\_processed} (14)]
+%<*en>
+Glues from an italic correction, but already processed in the insertion process of \textbf{JAglue}s.
+%</en>
+%<ja>イタリック補正に由来するグルーであって,既に \textbf{JAglue} 挿入処理にかかったもの.
+\item[\textit{boxbdd} (15)]
+%<en>Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
+%<ja>hboxか段落の最初か最後に挿入されたグルー/カーン.
+\end{description}
+
+%<*ja>
+また,挿入処理の結果であるリストの最初のノードでは,\verb+\ltj@icflag+ の値に
+\textit{processed\_begin\_flag}~(128)が追加される.これによって,\cs{unhbox} が
+連続した場合でも「ボックスの境界」が識別できるようになっている.
+%</ja>
+
+\attr{ltj@kcat\,$i$}
+%<*en>
+Where $i$~is a natural number which is less than~7.
+These 7~attributes store bit~vectors indicating which character block is regarded as a block of \textbf{JAchar}s.
+%</en>
+%<*ja>
+$i$は7より小さい自然数.
+これら7つの属性レジスタは,どの文字ブロックが\textbf{JAchar}のブロックとして
+扱われるかを示すビットベクトルを格納する.
+%</ja>
+
+\attr{ltj@dir}
+%<*ja>
+\textit{direction}~whatsit(後述)において組方向を示すために,あるいは\textit{dir\_box}の
+                        組方向を用いる.\textit{direction}~whatsitにおいては値は
+\begin{quote}
+ \textit{dir\_dtou} (1), \textit{dir\_tate} (3),
+ \textit{dir\_yoko} (4), \textit{dir\_utod} (11)
+\end{quote}
+のいずれかであり,\textit{dir\_box}ではこれらに次を加えた値をとる(\ref{sec-dir-imp}章参照).
+%</ja>
+\begin{description}
+\item[\textit{dir\_node\_auto} (128)]
+%<ja> 異なる組方向に配置するために自動的に作られたボックス.
+\item[\textit{dir\_node\_manual} (256)]
+%<ja> \cs{ltjsetwd} によって「ボックスの本来の組方向とは異なる組方向での寸法」を
+%<ja> 設定したときに,それを記録するためのボックス.
+\end{description}
+%<ja> \TeX 側から見える値,つまり \verb+\the\ltj@dir+ の値は常に0である.
+
+\end{list}
+
+%<*en>
+Furthermore, \LuaTeX-ja uses several user-defined whatsit nodes for
+internal processing. All those nodes except \emph{direction} whatsits
+store a natural number (hence its \texttt{type} is 100).
+\emph{direction} whatsits store a node list, hence its \texttt{type} is 110.
+Their \texttt{user\_id} (used for distinguish user-defined whatsits)
+are allocated by \texttt{luatexbase.newuserwhatsitid}.
+%</en>
+%<*ja>
+さらに,\LuaTeX-jaはいくつかのuser-defined whatsit nodeを内部処理に用いる.
+\textit{direction} whatsitはノードリストを格納するが,
+それ以外のwhatsitノードの \texttt{type} は100であり,ノードは自然数を格納している.
+user-defined whatsitを識別するための \texttt{user\_id} は\
+\texttt{luatexbase.newuserwhatsitid} により確保されており,
+下の見出しは単なる識別用でしかない.
+%</ja>
+\begin{description}
+\item[\textit{inhibitglue}]
+%<*en>
+Nodes for indicating that \cs{inhibitglue} is
+          specified. The \texttt{value} field of these nodes doesn't matter.
+%</en>
+%<*ja>
+\cs{inhibitglue} が指定されたことを示すノード.これらのノードの\
+\texttt{value} フィールドは意味を持たない.
+%</ja>
+
+\item[\textit{stack\_marker}]
+%<*en>
+Nodes for \LuaTeX-ja's stack system (see the next
+          subsection). The \texttt{value} field of these nodes is
+          current group level.
+%</en>
+%<*ja>
+\LuaTeX-jaのスタックシステム(次の節を参照)のためのノード.
+これらのノードの \texttt{value} フィールドは現在のグループネストレベルを表す.
+%</ja>
+
+\item[\textit{char\_by\_cid}]
+%<*en>
+Nodes for \textbf{JAchar} which the callback process of
+          \Pkg{luaotfload} won't be applied, and the character code is
+          stored in the \texttt{value} field. Each node of this type are
+           converted to a \textit{glyph\_node} \emph{after}
+          the callback process of luaotfload.
+Nodes of this type is used in \cs{CID}, \cs{UTF} and IVS support.
+%</en>
+%<*ja>
+\Pkg{luaotfload}のコールバックによる処理が適用されない\textbf{JAchar}のためのノードで,
+\texttt{value} フィールドに文字コードが格納されている.
+この種類のノードはそれぞれが\Pkg{luaotfload}のコールバックの処理の
+\emph{後で}\textit{glyph\_node}に変換される.
+\cs{CID}, \cs{UTF}やIVS対応処理でこの種類のノードが利用されている.
+%</ja>
+
+\item[\textit{replace\_vs}]
+%<*en>
+Similar to \textit{char\_by\_cid} whatsits above.
+These nodes are for \textbf{ALchar} which the callback process of
+          \Pkg{luaotfload} won't be applied.
+%</en>
+%<*ja>
+上の\textit{char\_by\_cid}と同様に,
+これらのノードは\Pkg{luaotfload}のコールバックによる処理が適用されない\textbf{ALchar}のた
+          めものである.
+%</ja>
+
+\item[\textit{begin\_par}]
+%<*en>
+Nodes for indicating beginning of a paragraph.
+A paragraph which is started by \cs{item} in list-like environments has a horizontal box
+for its label before the actual contents. So \dots
+%</en>
+%<*ja>
+「段落の開始」を意味するノード.
+list環境,itemize環境などにおいて,\cs{item} で始まる各項目は……
+%</ja>
+
+\item[\textit{direction}]
+
+\end{description}
+
+%<*en>
+These whatsits will be removed during the process of inserting \textbf{JAglue}s.
+%</en>
+%<*ja>
+これらのwhatsitノードは\textbf{JAglue}の挿入処理の間に取り除かれる.
+%</ja>
+
+%<en>\subsection{Stack system of \LuaTeX-ja}
+%<ja>\subsection{\LuaTeX-jaのスタックシステム}
+\label{ssec-stack}
+
+%<en>\paragraph{Background}
+%<ja>\paragraph{背景}
+%<*en>
+\LuaTeX-ja has its own stack system, and most parameters of \LuaTeX-ja
+are stored in it. To clarify the reason, imagine the parameter
+\Param{kanjiskip} is stored by a skip, and consider the following
+source:
+%</en>
+%<*ja>
+\LuaTeX-jaは独自のスタックシステムを持ち,\LuaTeX-jaのほとんどのパラメータは
+これを用いて保持されている.その理由を明らかにするために,
+\Param{kanjiskip}パラメータがスキップレジスタで保持されているとし,
+以下のコードを考えてみよう:
+%</ja>
+\begin{LTXexample}
+\ltjsetparameter{kanjiskip=0pt}ふがふが.%
+\setbox0=\hbox{%
+  \ltjsetparameter{kanjiskip=5pt}ほげほげ}
+\box0.ぴよぴよ\par
+\end{LTXexample}
+
+%<*en>
+As described in Subsection~\ref{ssec-param}, the only effective value of
+\Param{kanjiskip} in an hbox is the latest value, so the value of
+\Param{kanjiskip} which applied in the entire hbox should be 5\,pt.
+However, by the implementation method of \LuaTeX, this ``5\,pt'' cannot be
+known from any callbacks.  In the \texttt{tex/packaging.w}, which is a
+file in the source of \LuaTeX, there are the following codes:
+%</en>
+%<*ja>
+\ref{ssec-param}節で述べたように,あるhboxの中で効力を持つ
+\Param{kanjiskip}の値は最後に現れた値のみであり,したがってボックス全体に適用される
+\Param{kanjiskip}は5\,ptであるべきである.しかし,\LuaTeX の実
+装を観察すると,この5\,ptという長さはどのコールバックからも知ることはできないことがわかる.
+\LuaTeX のソースファイルの1つ \texttt{tex/packaging.w} の中に,
+以下のコードがある:
+%</ja>
+\begin{lstlisting}[numbers=left,firstnumber=1226]
+void package(int c)
+{
+    scaled h;                   /* height of box */
+    halfword p;                 /* first node in a box */
+    scaled d;                   /* max depth */
+    int grp;
+    grp = cur_group;
+    d = box_max_depth;
+    unsave();
+    save_ptr -= 4;
+    if (cur_list.mode_field == -hmode) {
+        cur_box = filtered_hpack(cur_list.head_field,
+                                 cur_list.tail_field, saved_value(1),
+                                 saved_level(1), grp, saved_level(2));
+        subtype(cur_box) = HLIST_SUBTYPE_HBOX;
+\end{lstlisting}
+%<*en>
+Notice that \texttt{unsave()} is executed \emph{before}
+\texttt{filtered\_hpack()}, where \texttt{hpack\_filter} callback is
+executed) here. So ``5\,pt'' in the above source is orphaned at
+\texttt{unsave()}, and hence it can't be accessed from \texttt{hpack\_filter}
+callback.
+%</en>
+%<*ja>
+\texttt{unsave()} が \texttt{filtered\_hpack()}(これは \texttt{hpack\_filter} コールバックが
+実行されるところである)の\emph{前に}実行されていることに注意する.
+したがって,上記ソース中で5\,ptは \texttt{unsave()} のところで捨てられ,
+\texttt{hpack\_filter} コールバックからはアクセスすることができない.
+%</ja>
+
+%<en>\paragraph{Implementation}
+%<ja>\paragraph{解決法}
+
+%<*en>
+The code of stack system is based on that in a post of Dev-luatex mailing list\footnote{%
+\texttt{[Dev-luatex] tex.currentgrouplevel}, a post at 2008/8/19 by Jonathan Sauer.}.
+%</en>
+%<*ja>
+スタックシステムのコードはDev-luatexメーリングリストのある投稿\footnote{%
+\texttt{[Dev-luatex] tex.currentgrouplevel}: Jonathan Sauerによる2008/8/19の投稿.}を
+ベースにしている.
+%</ja>
+
+%<*en>
+These are two \TeX\ count registers for maintaining information:
+\verb+\ltj@@stack+ for the stack level, and \verb+\ltj@@group@level+ for
+the \TeX's group level when the last assignment was done.  Parameters
+are stored in one big table named \texttt{charprop\_stack\_table}, where
+\texttt{charprop\_stack\_table[$i$]} stores data of stack level~$i$. If
+a new stack level is created by \cs{ltjsetparameter}, all data of the
+previous level is copied.
+%</en>
+%<*ja>
+情報を保持するために,2つの\TeX の整数レジスタを用いている:
+\verb+\ltj@@stack+ にスタックレベル,\verb+\ltj@@group@level+ に最後の代入が
+なされた時点での\TeX のグループレベルを保持している.
+パラメータは\texttt{charprop\_stack\_table}という名前のひとつの大きなテーブルに
+格納される.ここで,\texttt{charprop\_stack\_table[$i$]}はスタックレベル$i$の
+データを格納している.もし新しいスタックレベルが \cs{ltjsetparameter} によって
+生成されたら,前のレベルの全てのデータがコピーされる.
+%</ja>
+
+%<*en>
+To resolve the problem mentioned in above paragraph ``Background'', \LuaTeX-ja uses
+another trick. When the stack level is about to be increased, a whatsit
+node whose type, subtype and value are 44~(\textit{user\_defined}),
+\textit{stack\_marker} and the current group level respectively is appended to the current
+list (we refer this node by \textit{stack\_flag}). This enables us to
+know whether assignment is done just inside a hbox. Suppose that the
+stack level is~$s$ and the \TeX's group level is~$t$ just after the hbox
+group, then:
+%</en>
+%<*ja>
+上の「背景」で述べた問題を解決するために,\LuaTeX-jaでは次の手法を用いる:
+スタックレベルが増加するするとき,type, subtype, valueがそれぞれ
+44~(\textit{user\_defined}), \textit{stack\_marker},そして現在のグループレベルであるwhatsitノード
+を現在のリストに付け加える(このノードを\textit{stack\_flag}とする).
+これにより,あるhboxの中で代入がなされたかどうかを知ることが可能
+となる.スタックレベルを$s$,そのhbox groupの直後の\TeX のグループレベルを
+$t$とすると:
+%</ja>
+\begin{itemize}
+%<*en>
+\item If there is no \textit{stack\_flag} node in the list of the contents of the hbox, then
+      no assignment was occurred inside the hbox. Hence values of
+      parameters at the end of the hbox are stored in the stack
+      level~$s$.
+%</en>
+%<*ja>
+\item もしそのhboxの中身を表すリストの中に\textit{stack\_flag}ノードがなければ,
+  hboxの中では代入は起こらなかったということになる.
+  したがって,そのhboxの終わりにおけるパラメータの値はスタックレベル$s$に
+  格納されている.
+%</ja>
+
+%<*en>
+\item If there is a \textit{stack\_flag} node whose value is~$t+1$, then
+      an assignment was occurred just inside the hbox group. Hence
+      values of parameters at the end of the hbox are stored in the
+      stack level~$s+1$.
+%</en>
+%<*ja>
+\item もし値が$t+1$の\textit{stack\_flag}ノードがあれば,その
+  hboxの中で代入が起こったことになる.
+  したがって,hboxの終わりにおけるパラメータの値はスタックレベル$s+1$に
+  格納されている.
+%</ja>
+
+%<*en>
+\item If there are \textit{stack\_flag} nodes but all of their values
+      are more than~$t+1$, then an assignment was occurred in the box,
+      but it is done in more internal group. Hence values of
+      parameters at the end of the hbox are stored in the stack
+      level~$s$.
+%</en>
+%<*ja>
+\item もし\textit{stack\_flag}ノードがあるがそれらの値が全て$t+1$より大きい
+  場合,そのボックスの中で代入が起こったが,それは「より内部の」グループで
+  起こったということになる.したがって,hboxの終わりでのパラメータの
+  値はスタックレベル$s$に格納されている.
+%</ja>
+\end{itemize}
+
+%<*en>
+Note that to work this trick correctly, assignments to
+\verb+\ltj@@stack+ and \verb+\ltj@@group@level+ have to be local always,
+regardless the value of \cs{globaldefs}.
+To solve this problem, we use another trick: the assignment
+\hbox{\verb+\directlua{tex.globaldefs=0}+} is always local.
+%</en>
+%<*ja>
+このトリックを正しく働かせるためには,\verb+\ltj@@stack+ と \verb+\ltj@@group@level+ への
+代入は \cs{globaldefs} の値によらず常にローカルでなければならないことに注意する.
+この問題は \hbox{\verb+\directlua{tex.globaldefs=0}+}(この代入は常にローカル)を
+用いることで解決している.
+%</ja>
+
+%<*en>
+\subsection{Lua functions of the stack system}
+In this subsection, we will see how a user use \LuaTeX-ja's stack system to
+store some data which obeys the grouping of \TeX.
+%</en>
+%<*ja>
+\subsection{スタックシステムで使用される関数}
+本節では,ユーザが\LuaTeX-jaのスタックシステムを使用して,
+\TeX のグルーピングに従うような
+独自のデータを取り扱う方法を述べる.
+%</ja>
+
+%<*en>
+The following function can be used to store data into a stack:
+\begin{lstlisting}
+luatexja.stack.set_stack_table(index, <any> data)
+\end{lstlisting}
+Any values which except \texttt{nil}~and~NaN are usable as \textit{index}.
+However, a user should use only negative integers or strings as \textit{index},
+since natural numbers are used by \LuaTeX-ja itself.
+Also, whether \textit{data} is stored locally or globally
+is determined by \texttt{luatexja.isglobal}
+(stored globally if and only if \texttt{luatexja.isglobal == 'global'}).
+%</en>
+%<*ja>
+スタックに値を設定するには,以下のLua関数を呼び出せば良い:
+\begin{lstlisting}
+luatexja.stack.set_stack_table(<any> index, <any> data)
+\end{lstlisting}
+直感的には,スタックテーブル中のインデックス\textit{index}の値を\textit{data}にする,という意味である.
+\textit{index}の値としては \texttt{nil} とNaN以外の任意の値を使えるが,
+自然数は\LuaTeX-jaが使用する(将来の拡張用も含む)ので,
+ユーザが使用する場合は負の整数値か文字列の値にすることが望ましい.
+また,ローカルに設定されるかグローバルに設定されるかは,\texttt{luatexja.isglobal} の値に依存する
+(グローバルに設定されるのは,\texttt{luatexja.isglobal == 'global'} であるちょうどその時).
+%</ja>
+
+%<*en>
+Stored data can be obtained as the return value of
+\begin{lstlisting}
+luatexja.stack.get_stack_table(index, <any> default, <number> level)
+\end{lstlisting}
+where \textit{level} is the stack level, which is usually the value of \verb+\ltj@@stack+,
+and \textit{default} is the default value which will be returned if no values are stored
+in the stack table whose level is \textit{level}.
+%</en>
+%<*ja>
+スタックの値は,
+\begin{lstlisting}
+luatexja.stack.get_stack_table(<any> index, <any> default, <number> level)
+\end{lstlisting}
+の戻り値で取得できる.\textit{level}はスタックレベルであり,
+通常は \verb+\ltj@@stack+ の値を指定することになるだろう.
+\textit{default}はレベル\textit{level}のスタックに値が設定されていなかった場合に
+返すデフォルト値である.
+%</ja>
+
+\begin{figure}[tb]
+\begin{lstlisting}[numbers=left, firstnumber=380]
+\protected\def\ltj@setpar@global{%
+  \relax\ifnum\globaldefs>0\directlua{luatexja.isglobal='global'}%
+    \else\directlua{luatexja.isglobal=''}\fi
+}
+\protected\def\ltjsetparameter#1{%
+  \ltj@setpar@global\setkeys[ltj]{japaram}{#1}\ignorespaces}
+\protected\def\ltjglobalsetparameter#1{%
+  \relax\ifnum\globaldefs<0\directlua{luatexja.isglobal=''}%
+    \else\directlua{luatexja.isglobal='global'}\fi%
+  \setkeys[ltj]{japaram}{#1}\ignorespaces}
+\end{lstlisting}
+%<ja>\caption{パラメータ設定命令の定義}
+%<en>\caption{Definiton of parameter setting commands}
+\label{fig:setpar-def}
+\end{figure}
+
+%<*en>
+\subsection{Extending Parameters}
+Keys for \cs{ltjsetparameter}~and~\cs{ltjgetparameter} can be extended,
+as in \Pkg{luatexja-adjust}.
+%</en>
+%<*ja>
+\subsection{パラメータの拡張}
+ここでは,\Pkg{luatexja-adjust}で行なっているように,
+\cs{ltjsetparameter},~\cs{ltjgetparameter}に指定可能なキーを追加する方法
+を述べる.
+%</ja>
+
+%<*en>
+\paragraph{Setting parameters}
+Figure~\ref{fig:setpar-def} shows the \emph{most outer} definition of
+two commands,
+\cs{ltjsetparameter} and \cs{ltjglobalsetparameter}.
+Most important part is the last \cs{setkeys},
+which is offered by the \Pkg{xkeyval} package.
+
+Hence, to add a key in \cs{ltjsetparameter}, one only have to add a key
+whose prefix is \texttt{ltj} and whose family is \texttt{japaram}, as the following.
+\begin{lstlisting}
+\define@key[ltj]{japaram}{...}{...}
+\end{lstlisting}
+
+\cs{ltjsetparameter}~and~\cs{ltjglobalsetparameter} automatically sets
+\texttt{luatexja.isglobal}. Its meaning is the following.
+\begin{align}
+ \texttt{luatexja.isglobal} =
+\begin{cases}
+ \texttt{'global'}&\text{global}\\
+ \texttt{''}&\text{local}
+\end{cases}
+\end{align}
+This is determined not only by command name
+(\cs{ltjsetparameter}~or~\cs{ltjglobalsetparameter}),
+but also by the value of \cs{globaldefs}.
+%</en>
+%<*ja>
+\paragraph{パラメータの設定}
+\cs{ltjsetparameter} と,\cs{ltjglobalsetparameter} の定義は図\ref{fig:setpar-def}の
+のようになっている.
+本質的なのは最後の \cs{setkeys} で,これは\Pkg{xkeyval}パッケージの提供する命令である.
+
+このため,\cs{ltjsetparameter} に指定可能なパラメータを追加するには,
+<prefix>を \texttt{ltj},<family>を \texttt{japaram} としたキーを
+\begin{lstlisting}
+\define@key[ltj]{japaram}{...}{...}
+\end{lstlisting}
+のように定義すれば良いだけである.
+なお,パラメータ指定がグローバルかローカルかどうかを示す \texttt{luatexja.isglobal} が,
+\begin{align}
+ \texttt{luatexja.isglobal} =
+\begin{cases}
+ \texttt{'global'}&\text{パラメータ設定はグローバル}\\
+ \texttt{''}&\text{パラメータ設定はローカル}
+\end{cases}
+\end{align}
+として自動的にセットされる\footnote{命令が \cs{ltjglobalsetparameter} かどうかだけでは
+なく,実行時の \cs{globaldefs} の値にも依存して定まる.}.
+%</ja>
+
+%<*en>
+\paragraph{Getting parameters}
+\cs{ltjgetparameter} is implemented by a Lua script.
+
+For parameters that do not need additional arguments, one only have to
+define a function in the table \verb+luatexja.unary_pars+.
+For example, with the following function,
+\verb+\ltjgetparameter{hoge}+ returns a \emph{string} \texttt{42}.
+\begin{lstlisting}[numbers=left]
+function luatexja.unary_pars.hoge (t)
+  return 42
+end
+\end{lstlisting}
+Here the argument of \verb+luatexja.unary_pars.hoge+ is
+the stack level of \LuaTeX-ja's stack system (see Subsection~\ref{ssec-stack}).
+
+On the other hand, for parameters that need an additional argument
+(this must be an integer), one have to define a function in
+\verb+luatexja.binary_pars+ first. For example,
+\begin{lstlisting}[numbers=left]
+function luatexja.binary_pars.fuga (c, t)
+  return tostring(c) .. ', ' .. tostring(42)
+end
+\end{lstlisting}
+Here the first argument $t$ is the stack level, as before.
+The second argument $c$ is just the second argument of \cs{ltjgetparameter}.
+
+For parameters that need an additional argument, one also have to
+execute the \TeX\ code like
+\begin{lstlisting}
+\ltj@@decl@array@param{fuga}
+\end{lstlisting}
+to indicate that ``the parameter \texttt{fuga} needs an additional argument''.
+%</en>
+%<*ja>
+\paragraph{パラメータの取得}
+一方,\cs{ltjgetparameter} はLuaスクリプトによって実装されている.
+値を取得するのに追加引数の要らないパラメータについては,\verb+luatexja.unary_pars+\
+内に処理内容を記述した関数を定義すれば良い.例えば,Luaスクリプトで
+\begin{lstlisting}[numbers=left]
+function luatexja.unary_pars.hoge (t)
+  return 42
+end
+\end{lstlisting}
+を実行すると,\verb+\ltjgetparameter{hoge}+ は \texttt{42} という\emph{文字列}を返す.
+関数 \verb+luatexja.unary_pars.hoge+ の引数$t$は,\ref{ssec-stack}節で述べた
+\LuaTeX-jaのスタックシステムにおけるスタックレベルである.
+戻り値はいかなる値であっても,最終的には文字列として出力されることに注意.
+
+一方,追加引数(\emph{数値しか許容しない})が必要なパラメータについては,
+まずLuaスクリプトで処理内容の本体を記述しておく:
+\begin{lstlisting}[numbers=left]
+function luatexja.binary_pars.fuga (c, t)
+  return tostring(c) .. ', ' .. tostring(42)
+end
+\end{lstlisting}
+引数$t$は,先に述べた通りのスタックレベルである.一方,引数$c$は\
+\cs{ltjgetparameter} の第2引数を表す数値である.
+しかしこれだけでは駄目で,
+\begin{lstlisting}
+\ltj@@decl@array@param{fuga}
+\end{lstlisting}
+を実行し,\TeX インターフェース側に
+「\verb+\ltjgetparameter{fuga}+ は追加引数が必要」ということを通知する必要がある.
+%</ja>
+
+%<en>\section{Linebreak after a Japanese Character}
+%<ja>\section{和文文字直後の改行}
+\label{sec-lbreak}
+%<en>\subsection{Reference: behavior in \pTeX}
+%<ja>\subsection{参考:\pTeX の動作}
+%<*en>
+In~\pTeX, a line break after a Japanese character doesn't emit a space,
+since words are not separated by spaces in Japanese writings. However,
+this feature isn't fully implemented in \LuaTeX-ja due to the
+specification of callbacks in~\LuaTeX. To clarify the difference between
+\pTeX~and~\LuaTeX, We briefly describe the handling of a line break in~\pTeX, in
+this subsection.
+
+\pTeX's input processor can be described in terms of a finite state
+automaton, as that of~\TeX\ in~Section~2.5 of~\cite{texbytopic}. The
+internal states are as follows:
+\begin{itemize}
+\item State~$N$: new line
+\item State~$S$: skipping spaces
+\item State~$M$: middle of line
+\item State~$K$: after a Japanese character
+\end{itemize}
+The first three states---$N$,~$S$, and~$M$---are as same as \TeX's input
+processor.  State~$K$ is similar to state~$M$, and is entered after
+Japanese characters.  The diagram of state transitions are indicated in
+Figure~\ref{fig-ptexipro}.  Note that \pTeX\ doesn't leave state~$K$
+after ``beginning/ending of a group'' characters.
+%</en>
+
+%<*ja>
+欧文では文章の改行は単語間でしか行わない.そのため,\TeX では,(文字の直後の)改行は
+空白文字と同じ扱いとして扱われる.一方,和文ではほとんどどこでも改行が可能なため,
+\pTeX では和文文字の直後の改行は単純に無視されるようになっている.
+
+このような動作は,\pTeX が\TeX からエンジンとして拡張されたことによって可能になったことである.
+\pTeX の入力処理部は,\TeX におけるそれと同じように,有限オートマトンとして記述することができ,
+以下に述べるような4状態を持っている.
+
+\begin{itemize}
+\item State~$N$: 行の開始.
+\item State~$S$: 空白読み飛ばし.
+\item State~$M$: 行中.
+\item State~$K$: 行中(和文文字の後).
+\end{itemize}
+また,状態遷移は,図\ref{fig-ptexipro}のようになっており,図中の数字は
+カテゴリーコードを表している.最初の3状態は\TeX の入力処理部と同じであり,
+図中から状態$K$と「$j$」と書かれた矢印を取り除けば,\TeX の入力処理部と同
+じものになる.
+
+この図から分かることは,
+\begin{quote}
+行が和文文字(とグループ境界文字)で終わっていれば,改行は無視される
+\end{quote}
+ということである.
+%</ja>
+
+\begin{figure}[!tb]
+\let\sp\textvisiblespace\small
+\begin{minipage}{.6\textwidth}%
+\begin{center}
+\unitlength=6.5mm\sf\mathversion{bold}
+\begin{tikzpicture}[
+  ->, auto, shorten >=1pt
+]
+\node [shape=rectangle, font=\scriptsize] (init) at (2,7) {start};
+\node [shape=circle,draw, fill=b_cyan] (newline) at (4,7) {$N$};
+\node [shape=circle,draw, fill=b_cyan] (midline) at (4,4) {$M$};
+\node [shape=circle,draw, fill=b_cyan] (skipspc) at (8,7) {$S$};
+\node [shape=circle,draw, fill=b_pink]  (kanji) at (8,4) {$K$};
+\node [shape=rectangle,draw, fill=b_green] (scanacs) at (6,8) {scan a c.s.};
+\node (endk) at (8,2.5) {} ;
+\node (endm) at (4,2.5) {} ;
+\node (ends) at (8,8.5) {} ;
+\node (endn) at (4,8.5) {} ;
+\begin{scope}[font=\scriptsize]
+\path (newline) edge [bend right]    node [left]{G, O} (midline)
+      (init)    edge                 node {} (newline)
+      (midline) edge [bend right=10] node {10} (skipspc)
+      (skipspc) edge [bend right]    node [left,right=10,above=7]{G, O} (midline)
+      (skipspc) edge [loop right]    node {10} (skipspc)
+      (newline) edge [loop right]    node {10} (newline)
+      (scanacs) edge [bend left]     node [left=3,below]{$(*)$} (skipspc)
+      (scanacs) edge [bend right]    node [right=30,above=20]{$(*)$} (midline)
+      (midline) edge                 node {5\ [\sp]} (endm)
+      (midline) edge [loop left]     node {G, O} (midline)
+      (skipspc) edge                 node [right] {5} (ends)
+      (newline) edge                 node {5 [\cs{par}]} (endn);
+\begin{scope}[red]
+\path (newline) edge [bend right]    node [right=25,below=3]{J} (kanji)
+      (midline) edge                 node [below]{J} (kanji)
+      (kanji)   edge [bend left]     node {O} (midline)
+      (kanji)   edge                 node {10} (skipspc)
+      (kanji)   edge [loop right]    node {G, J} (kanji)
+      (skipspc) edge [bend left]     node {J} (kanji)
+      (kanji)   edge                 node {5} (endk)
+;
+\end{scope}
+\end{scope}
+\end{tikzpicture}
+\end{center}
+\end{minipage}%
+\begin{minipage}{.4\textwidth}
+\begin{description}
+\item[\textsf{G}] Beginning of group (usually \verb+{+)\\
+ and ending of group (usually \verb+}+).
+\item[\textsf{J}] Japanese characters.
+\item[\textsf{5}] \textit{end-of-line} (usually \verb+^+\verb+^J+).
+\item[\textsf{10}] space (usually \sp).
+\item[\textsf{O}] other characters, whose category code is in $\{3,4,6,7,8,11,12,13\}$.
+\item[\textsf{[\sp]}, \textsf{[\cs{par}]}]
+emits a space, or~\cs{par}.
+\end{description}
+\end{minipage}
+\begin{itemize}
+\item We omitted about category codes
+9~(\textit{ignored}), 14~(\textit{comment}), and~15~(\textit{invalid})
+from the above diagram. We also ignored the input like ``\verb+^+\verb+^A+'' or ``\verb+^+\verb+^df+''.
+\item When a character whose category code is 0 (\textit{escape character}) is seen by \TeX,
+the input processor scans a control sequence (\textsf{scan a c.s.}).
+These paths are not shown in the above diagram.
+
+After that, the state is changed to State~$S$ (skipping blanks) in most cases, but
+to State~$M$ (middle of line) sometimes.
+\end{itemize}
+%<en>\caption{State transitions of \pTeX's input processor}
+%<ja>\caption{\pTeX の入力処理部の状態遷移}
+\label{fig-ptexipro}
+\end{figure}
+
+
+%<en>\subsection{Behavior in \LuaTeX-ja}
+%<ja>\subsection{\LuaTeX-jaの動作}
+%<*en>
+States in the input processor of \LuaTeX\ is the same as that of \TeX,
+and they can't be customized by any callbacks. Hence, we can only use
+\verb+process_input_buffer+ and \verb+token_filter+ callbacks for to
+suppress a space by a line break which is after Japanese characters.
+
+However, \verb+token_filter+ callback cannot be used either, since a
+character in category code 5~(\textit{end-of-line}) is converted into an space
+token \emph{in the input processor}.  So we can use only the
+\verb+process_input_buffer+ callback.  This means that suppressing a
+space must be done \emph{just before} an input line is read.
+
+Considering these situations, handling of an end-of-line in \LuaTeX-ja are as follows:
+\begin{quote}
+A character \texttt{U+FFFFF} (its category code is set to 14~(\textit{comment}) by
+\LuaTeX-ja) is appended to an input line, \emph{before \LuaTeX\ actually
+process it}, if and only if the following three conditions are satisfied:
+\begin{enumerate}
+\item The category code of \cs{endlinechar}%
+\footnote{Usually, it is $\langle$\textit{return}$\rangle$
+      (whose character code is 13).} is 5~(\textit{end-of-line}).
+\item The category code of \texttt{U+FFFFF} itself is 14~(\textit{comment}).
+\item The input line matches the following ``regular expression'':
+\[
+  (\text{any char})^*(\textbf{JAchar})
+  \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
+\]
+\end{enumerate}
+\end{quote}
+
+\paragraph{Remark}
+The following example shows the major difference from the behavior of \pTeX.
+\begin{LTXexample}
+\fontspec[Ligatures=TeX]{Linux Libertine O}
+\ltjsetparameter{autoxspacing=false}
+\ltjsetparameter{jacharrange={-6}}xあ
+y\ltjsetparameter{jacharrange={+6}}zい
+u
+\end{LTXexample}
+It is not strange that ``あ'' does not printed in the above output.
+This is because \TeX\ Gyre\ Termes does not contain ``あ'', and because
+``あ'' in line~3 is considered as an \textbf{ALchar}.
+
+Note that there is no space before ``y'' in the output, but
+there is a space before ``u''. This follows from following reasons:
+\begin{itemize}
+\item When line~3 is processed by \texttt{process\_input\_buffer} callback,
+``あ'' is considered as an \textbf{JAchar}.
+Since  line~3 ends with an \textbf{JAchar},
+the comment character \texttt{U+FFFFF} is appended to this line,
+and hence the linebreak immediately after this line is ignored.
+\item When line~4 is processed by \texttt{process\_input\_buffer} callback,
+``い'' is considered as an \textbf{ALchar}.
+Since  line~4 ends with an \textbf{ALchar}, the linebreak immediately after this line
+emits a space.
+\end{itemize}
+%</en>
+
+%<*ja>
+\LuaTeX の入力処理部は\TeX のそれと全く同じであり,コールバックによりユーザが
+カスタマイズすることはできない.このため,改行抑制の目的でユーザが利用で
+きそうなコールバックとしては,\verb+process_input_buffer+や
+\verb+token_filter+に限られてしまう.しかし,\TeX の入力処理部をよく見る
+と,後者も役には経たないことが分かる:改行文字は,入力処理部によってトー
+クン化される時に,カテゴリーコード10の32番文字へと置き換えられてしまうた
+め,\verb+token_filter+で非標準なトークン読み出しを行おうとしても,空白文
+字由来のトークンと,改行文字由来のトークンは区別できないのだ.
+
+すると,我々のとれる道は,\verb+process_input_buffer+を用いて
+\LuaTeX の入力処理部に引き渡される前に入力文字列を編集するというものしかない.
+以上を踏まえ,\LuaTeX-jaにおける「和文文字直後の改行抑制」の処理は,次のようになっている:
+
+\begin{quote}
+各入力行に対し,\emph{その入力行が読まれる前の内部状態で}
+以下の3条件が満たされている場合,\LuaTeX-jaは\texttt{U+FFFFF}の文字
+\footnote{この文字はコメント文字として扱われるように\LuaTeX-ja内部で設定をしている.}
+を末尾に追加する.よって,その場合に改行は空白とは見做されないこととなる.
+\begin{enumerate}
+\item \cs{endlinechar}の文字\footnote{普通は,改行文字(文字コード13番)である.}
+のカテゴリーコードが5~(\textit{end-of-line})である.
+\item \texttt{U+FFFFF}のカテゴリーコードが14~(\textit{comment})である.
+\item 入力行は次の「正規表現」にマッチしている:
+\[
+  (\text{any char})^*(\textbf{JAchar})
+  \bigl(\{\text{catcode}=1\}\cup\{\text{catcode}=2\}\bigr)^*
+\]
+\end{enumerate}
+\end{quote}
+
+この仕様は,前節で述べた\pTeX の仕様にできるだけ近づけたものとなっている.条件1.は,
+\texttt{lstlisting}系環境などの日本語対応マクロを書かなくてすませるためのものである.
+
+しかしながら,\pTeX と完全に同じ挙動が実現できたわけではない.
+次のように,\textbf{JAchar}の範囲を変更したちょうどその行においては挙動が異なる:
+\begin{LTXexample}
+\fontspec[Ligatures=TeX]{TeX Gyre Termes}
+\ltjsetparameter{autoxspacing=false}
+\ltjsetparameter{jacharrange={-6}}xあ
+y\ltjsetparameter{jacharrange={+6}}zい
+u
+\end{LTXexample}
+上ソース中の「あ」は\textbf{ALchar}(欧文扱い)であり.
+ここで使用している欧文フォント\TeX\ Gyre Termesは「あ」を含まない.
+よって,出力に「あ」は現れないことは不思議ではない.
+それでも,\pTeX とまったく同じ挙動を示すならば,出力は
+「\hbox{\ltjsetparameter{autoxspacing=false}x yzいu}」となるはずである.しかし,実際には
+上のように異なる挙動となっているが,それは以下の理由による:
+\begin{itemize}
+\item 3行目を \texttt{process\_input\_buffer} で処理する時点では,
+      「あ」は\textbf{JAchar}(和文扱い)である.よって3行目は\textbf{JAchar}で終わることになり,
+      コメント文字 \texttt{U+FFFFF} が追加される.
+      よって,直後の改行文字は無視されることになり,空白は入らない.
+\item 4行目を \texttt{process\_input\_buffer} で処理する時点では,
+      「い」は\textbf{ALchar}である.よって4行目は\textbf{ALchar}で終わることになり,
+      直後の改行文字は空白に置き換わる.
+\end{itemize}
+このため,トラブルを避けるために,\textbf{JAchar}の範囲を\cs{ltjsetparameter}で編集した場合,
+その行はそこで改行するようにした方がいいだろう.
+%</ja>
+
+%<*ja>
+
+%<en>\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}}
+%<ja>\section{JFMグルーの挿入,\Param{kanjiskip}と\Param{xkanjiskip}}
+\label{sec-jfmglue}
+%<en>\subsection{Overview}
+%<ja>\subsection{概要}
+
+\LuaTeX-jaにおける \textbf{JAglue} の挿入方法は,\pTeX のそれとは全く異なる.
+\pTeX では次のような仕様であった:
+\begin{itemize}
+\item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
+追加する過程で行われる.
+\item \Param{xkanjiskip}の挿入は,hboxへのパッケージングや行分割前に行われる.
+\item \Param{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に
+「和文文字を表す2つの<char\_node>の間には\Param{kanjiskip}がある」ものとみなされる.
+\end{itemize}
+しかし,\LuaTeX-jaでは,hboxへのパッケージングや行分割前に全ての
+\textbf{JAglue},即ちJFMグルー・\Param{xkanjiskip}・\Param{kanjiskip}の
+3種類を一度に挿入することになっている.これは,\LuaTeX において欧文の合字・
+カーニング処理がノードベースになったことに対応する変更である.
+
+\LuaTeX-jaにおける\textbf{JAglue}挿入処理では,次節で定義する
+「クラスタ」を単位にして行われる.大雑把にいうと,「クラスタ」は文字とそれに付随す
+るノード達(アクセント位置補正用のカーンや,イタリック補正)をまとめたもの
+であり,2つのクラスタの間には,ペナルティ,\cs{vadjust},whatsitなど,行組版
+には関係しないものがある.
+
+
+%<en>\subsection{Definition of a Cluster}
+%<ja>\subsection{「クラスタ」の定義}
+
+\def\OA{$\text{\sf O}_{\text{\sf A}}$}
+\def\OB{$\text{\sf O}_{\text{\sf B}}$}
+\begin{defn}
+%<*en>
+A \emph{cluster} is consecutive nodes in one of the following forms,
+with the \textit{id} of it:
+%</en>
+%<*ja>
+\emph{クラスタ}は以下の形のうちのどれかひとつをとるノードのリストである:
+%</ja>
+\begin{enumerate}
+%<*en>
+\item Nodes whose value of\ \verb+\ltj@icflag+ is in $[3,15)$.  These
+      nodes come from a hbox which is already packaged, by unpackaging
+      (\cs{unhbox}).
+      The \textit{id} of the cluster is \textit{id\_pbox}.
+%</en>
+%<*ja>
+\item その \verb+\ltj@icflag+ の値が$[3,15)$に入るノードのリスト.
+  これらのノードはある既にパッケージングされたhboxから \cs{unhbox} で
+  アンパックされたものである.
+  この場合,クラスタの\textit{id}は\textit{id\_pbox}である.
+%</ja>
+
+%<*en>
+\item A inline math formula, including two \textit{math\_node}s at the boundary of it.
+      The \textit{id} of the cluster is \textit{id\_math}.
+%</en>
+%<*ja>
+\item インライン数式でその境界に2つの\textit{math\_node}を含むもの.
+  この場合,クラスタの\textit{id}は\textit{id\_math}である.
+%</ja>
+
+%<*en>
+\item A \textit{glyph\_node}~$p$, which represents a \textbf{JAchar}, with nodes which relate with it:
+%</en>
+%<*ja>
+\item \textbf{JAchar}を表す\textit{glyph\_node}~$p$とそれに関係するノード:
+%</ja>
+\begin{enumerate}
+%<*en>
+\item[(a)] A kern for the italic correction of~$p$.
+%</en>
+%<*ja>
+\item[(a)] $p$のイタリック補正のためのカーン.
+%</ja>
+
+%<*en>
+\item[(b)] An accent attached to $p$ by \cs{accent}.
+%</en>
+%<*ja>
+\item[(b)] \cs{accent} による$p$に付随したアクセント.
+%</ja>
+\end{enumerate}
+\[
+\overbrace{%
+ \Node{kern}{$\mathit{subtype}=2$}\longrightarrow
+\left\{\begin{array}{c}
+\Node{glyph}{accent}\\\noalign{\medskip}
+\Node{hbox}{accent (shifted vert.)}
+\end{array}\right\}\longrightarrow
+\Node{kern}{$\mathit{subtype}=2$}}^{\text{(a)}}
+\longrightarrow
+\Node{glyph}{$p$}\longrightarrow
+\overbrace{%
+\Node{kern}{italic corr.}}^{\text{(b)}}
+\]
+
+%<*en>
+In this case, the \textit{id} is \textit{id\_jglyph}.
+%</en>
+%<*ja>
+この場合の\textit{id}は\textit{id\_jglyph}である.
+%</ja>
+
+%<*en>
+\item A list which begins from a \textit{glyph\_node} which represents a \textbf{ALchar},
+      and consists of \textbf{ALchar} \textit{glyph\_node}s,
+      kerns for adjusting accents~(its subtype is 2), kerns for italic corrections and
+      kerns which are automatically inserted by \LuaTeX~or~luaotfload.
+      In this case, the \textit{id} is \textit{id\_glyph}.
+%</en>
+%<*ja>
+\item \textbf{ALchar}を表す\textit{glyph\_node},\cs{accent} によるアクセント位置補正用の
+      カーン(subtypeが2),そしてイタリック補正・カーニングによって挿入されたカーン達が連続
+      したもの.この場合の\textit{id}は\textit{id\_glyph}である.
+%</ja>
+
+%<*en>
+\item An box-like node, that is, an hbox, a vbox, a rule (\cs{vrule}) and an \textit{unset\_node}.
+The \textit{id} of the cluster is \textit{id\_hlist} if the node is an
+      hbox which is not shifted vertically, or \textit{id\_box\_like}
+      otherwise.
+%</en>
+%<*ja>
+\item 水平ボックス(hbox),垂直ボックス,罫線 (\cs{vrule}),
+  そして\textit{unset\_node}.
+  クラスタの\textit{id}は垂直に移動していないhboxならば\textit{id\_hlist},
+  そうでなければ\textit{id\_box\_like}となる.
+%</ja>
+
+%<*en>
+\item A glue, a kern whose subtype is not 2~(\textit{accent}), and a discretionary break.
+The \textit{id} of the cluster is \textit{id\_glue}, \textit{id\_kern}
+      and \textit{id\_disc}, respectively.
+%</en>
+%<*ja>
+\item グルー,subtypeが 2~(\textit{accent})ではないカーン,そしてdiscretionary break.
+  その\textit{id} of the clusterはそれぞれ\textit{id\_glue}, \textit{id\_kern},そして
+  \textit{id\_disc}である.
+%</ja>
+\end{enumerate}
+%<*en>
+We use \textit{Np}, \textit{Nq} and \textit{Nr} to denote a cluster.
+%</en>
+%<*ja>
+以下では\textit{Np}, \textit{Nq}, \textit{Nr}でクラスタを表す.
+%</ja>
+\end{defn}
+
+\paragraph{\textit{id}の意味}
+$\mathit{Np}.\mathit{id}$の意味を述べるとともに,
+「先頭の文字」を表す\textit{glyph\_node}~$\mathit{Np}.\mathit{head}$と,
+「最後の文字」を表す\textit{glyph\_node}~$\mathit{Np}.\mathit{tail}$を次のように定義する.
+直感的に言うと,\textit{Np}は$\mathit{Np}.\mathit{head}$で始まり$\mathit{Np}.\mathit{tail}$で終わるような単語,
+と見做すことができる.これら$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は
+説明用に準備した概念であって,実際のLuaコード中にそのように書かれているわけではないことに注意.
+
+\begin{description}
+\item[\textit{id\_jglyph}] \textbf{JAchar}(和文文字).\\
+$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は,その\textbf{JAchar}を表している
+\textit{glyph\_node}そのものである.
+\item[\textit{id\_glyph}] \textbf{JAchar}(和文文字)以外のものを表す\textit{glyph\_node}~$p$.\\
+多くの場合,$p$は\textbf{ALchar}(欧文文字)を格納しているが,「ffi」などの合字によって作られた
+\textit{glyph\_node}である可能性もある.
+前者の場合,$\mathit{Np}.\mathit{head}$,~$\mathit{Np}.\mathit{tail} = p$である.
+一方,後者の場合,
+\begin{itemize}
+\item $\mathit{Np}.\mathit{head}$は,
+合字の構成要素の先頭→(その\textit{glyph\_node}における)合字の構成要素の先頭→……
+と再帰的に検索していってたどり着いた\textit{glyph\_node}である.
+\item $\mathit{Np}.\mathit{last}$は,同様に末尾→末尾→と検索してたどり着いた\textit{glyph\_node}である.
+\end{itemize}
+\item[\textit{id\_math}] インライン数式.\\
+便宜的に,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$ともに
+「文字コード$-1$の欧文文字」とおく.
+\item[\textit{id\_hlist}] 縦方向にシフトされていないhbox.\\
+この場合,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$はそれぞれ$p$の内容を表すリストの,
+先頭・末尾のノードである.
+\medskip
+\begin{itemize}
+\item 状況によっては,\TeX ソースで言うと
+\begin{lstlisting}
+\hbox{\hbox{abc}...\hbox{\lower1pt\hbox{xyz}}}
+\end{lstlisting}
+のように,$p$の内容が別のhboxで開始・終了している可能性も十分あり得る.そのような場合,
+$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,
+\emph{垂直方向にシフトされていない}hboxの
+場合だけ内部を再帰的に探索する.例えば上の例では,$\mathit{Np}.\mathit{head}$は文字「a」を表すノードであり,
+一方$\mathit{Np}.\mathit{tail}$は垂直方向にシフトされたhbox,
+\verb+\lower1pt\hbox{xyz}+ に対応するノードである.
+\item また,先頭にアクセント付きの文字がきたり,末尾にイタリック補正用のカーンが
+来ることもあり得る.この場合は,クラスタの定義のところにもあったように,それらは無視して算出を行う.
+\item 最初・最後のノードが合字によって作られた\textit{glyph\_node}のときは,それぞれに対して\textit{id\_glyph}%
+と同様に再帰的に構成要素をたどっていく.
+\end{itemize}
+\item[\textit{id\_pbox}] 「既に処理された」ノードのリストであり,これらのノードが二度処理を受けないために
+まとめて1つのクラスタとして取り扱うだけである.
+\textit{id\_hlist}と同じ方法で$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$を算出する,
+\item[\textit{id\_disc}] discretionary break (\verb+\discretionary{pre}{post}{nobreak}+).\\
+\textit{id\_hlist}と同じ方法で$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$を算出するが,
+第3引数の \texttt{nobreak}(行分割が行われない時の内容)を使う.言い換えれば,ここで行分割が発生した時の状況は
+全く考慮に入れない.
+\item[\textit{id\_box\_like}] \textit{id\_hlist}とならないboxや,rule.\\
+この場合は,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$のデータは利用されないので,2つの算出は無意味である.
+敢えて明示するならば,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$は共にnil値である.
+\item[他] 以上にない\textit{id}に対しても,$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は無意味.
+\end{description}
+
+\paragraph{クラスタの別の分類}
+さらに,JFMグルー挿入処理の実際の説明により便利なように,\textit{id}とは別のクラスタの分類を行っておく.
+挿入処理では2つの隣り合ったクラスタの間に
+空白等の実際の挿入を行うことは前に書いたが,ここでの説明では,問題にしているクラスタ\textit{Np}は「後ろ側」のクラスタである
+とする.「前側」のクラスタについては,以下の説明で\textit{head}が\textit{last}に置き換わることに注意すること.
+\begin{description}
+\item[和文A] リスト中に直接出現している\textbf{JAchar}.
+\textit{id}が\textit{id\_jglyph}であるか,\\
+\textit{id}が\textit{id\_pbox}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+
+\item[和文B] リスト中のhboxの中身の先頭として出現した\textbf{JAchar}.和文Aとの違いは,これの前に
+JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip}は入り得る)ことである.\\
+\textit{id}が\textit{id\_hlist}か\textit{id\_disc}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+
+\item[欧文] リスト中に直接/hboxの中身として出現している「\textbf{JAchar}以外の文字」.次の3つの場合が該当:
+\begin{itemize}
+\item \textit{id}が\textit{id\_glyph}である.
+\item \textit{id}が\textit{id\_math}である.
+\item \textit{id}が\textit{id\_pbox}か\textit{id\_hlist}か\textit{id\_disc}であって,$\mathit{Np}.\mathit{head}$が\textbf{ALchar}.
+\end{itemize}
+\item[箱] box,またはそれに類似するもの.次の2つが該当:
+\begin{itemize}
+\item \textit{id}が\textit{id\_pbox}か\textit{id\_hlist}か\textit{id\_disc}であって,$\mathit{Np}.\mathit{head}$が\textit{glyph\_node}でない.
+\item \textit{id}が\textit{id\_box\_like}である.
+\end{itemize}
+
+\end{description}
+
+\subsection{段落/hboxの先頭や末尾}
+\paragraph{先頭部の処理}
+まず,段落/hboxの一番最初にあるクラスタ\textit{Np}を探索する.
+hboxの場合は何の問題もないが,段落の場合では以下のノード達を事前に読み飛ばしておく:
+\begin{itemize}
+\item \cs{parindent} 由来のhbox($\mathit{subtype}=3$)
+\item \textit{subtype}が44~(\textit{user\_defined})でないようなwhatsit
+\end{itemize}
+これは,\cs{parindent}由来のhboxがクラスタを構成しないようにするためである.
+
+次に,\textit{Np}の直前に空白$g$を必要なら挿入する:
+\begin{enumerate}
+\item この処理が働くような\textit{Np}は\textsf{和文A}である.
+\item 問題のリストが字下げありの段落(\cs{parindent} 由来のhboxあり)の場合は,
+この空白$g$は「文字コード \texttt{'parbdd'} の文字」と\textit{Np}の間に入るグルー/カーンである.
+\item そうでないとき(\verb+noindent+ で開始された段落やhbox)は,
+$g$は「文字コード \texttt{'boxbdd'} の文字」と\textit{Np}の間に入るグルー/カーンである.
+\end{enumerate}
+ただし,もし$g$がglueであった場合,この挿入によって\textit{Np}による行分割が新たに可能になるべきではない.
+そこで,以下の場合には,$g$の直前に \cs{penalty10000} を挿入する:
+\begin{itemize}
+\item 問題にしているリストが段落であり,かつ
+\item \textit{Np}の前には予めペナルティがなく,$g$はglue.
+\end{itemize}
+
+\paragraph{末尾の処理}
+末尾の処理は,問題のリストが段落のものかhboxのものかによって異なる.
+後者の場合は容易い:最後のクラスタを\textit{Nq}とおくと,\textit{Nq}と「文字コード\
+\texttt{'boxbdd'} の文字」の間に入るグルー/カーンを,
+\textit{Nq}の直後に挿入するのみである.
+
+一方.前者(段落)の場合は,リストの末尾は常に \cs{penalty10000} と,
+\cs{parfillskip} 由来のグルーが存在する.%よって,最後のクラスタ\textit{Np}は
+%この \cs{parfillskip} 由来のグルーとなり,実質的な中身の最後はその1つ前のクラスタ\textit{Nq}となる.
+段落の最後の「通常の\textbf{JAchar}${}+{}$句点」が独立した行となるのを防ぐために,
+\Param{jcharwidowpenalty}の値の分だけ適切な場所のペナルティを増やす.
+
+ペナルティ量を増やす場所は,\textit{head}が\textbf{JAchar}であり,
+かつその文字の\Param{kcatcode}が偶数であるような
+最後のクラスタの直前にあるものたちである%
+\footnote{大雑把に言えば,\Param{kcatcode}が奇数であるような\textbf{JAchar}%
+を約物として考えていることになる.
+\Param{kcatcode}の最下位ビットはこの\Param{jcharwidowpenalty}用にのみ利用される.}.
+
+\subsection{概観と典型例:2つの「和文A」の場合}
+\label{ssec-cluster-wa}
+先に述べたように,2つの隣り合ったクラスタ,\textit{Nq}と\textit{Np}の間には,
+ペナルティ,\cs{vadjust},whatsitなど,行組版には関係しないものがある.模式的に表すと,
+\[
+ \Node{cluster}{\textit{Nq}}\longrightarrow
+\overbrace{
+\Node{penalty}{$p$}\longrightarrow \cdots\longrightarrow \Node{whatsit}{}}^{\textrm{(a)}}
+\longrightarrow \Node{cluster}{\textit{Np}}
+\]
+のようになっている.間の(a)に相当する部分には,何のノードもない場合ももちろんあり得る.
+そうして,JFMグルー挿入後には,この2クラスタ間は次のようになる:
+\[
+ \Node{cluster}{\textit{Nq}}\longrightarrow%\Node{kern}{左空白}\longrightarrow
+\overbrace{
+\Node{penalty}{$p+x$}\longrightarrow \cdots\longrightarrow
+\Node{whatsit}{}}^{\textrm{(a)}}\longrightarrow
+\Node{glue or kern}{\raisebox{-.2\zw}{右空白}}\longrightarrow
+\Node{cluster}{\textit{Np}}
+\]
+
+以後,\emph{典型的な例として,クラスタ\textit{Nq}と\textit{Np}が共に\textsf{\textmd{和文A}}である場合を見ていこう,}
+この場合が全ての場合の基本となる.
 
 \paragraph{「右空白」の算出}
-まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの和文文字間に入る空白量となる.
+まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの\textbf{JAchar}間に入る空白量となる.
 \begin{description}
 \item[JFM由来{[M]}] JFMの文字クラス指定によって入る空白を以下によって求める.この段階で空白量が未定義(未指定)だった場合,
       デフォルト値\Param{kanjiskip}を採用することとなるので,次へ.
 \begin{enumerate}
-\item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される),
+\item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合(証としてwhatsitノードが自動挿入される),
       代わりに\Param{kanjiskip}が挿入されることとなる.次へ.
 \item \textit{Nq}と\textit{Np}が同じJFM・同じ\texttt{jfmvar}キー・同じサイズの和文フォントであったならば,
-      共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べ
-\item 1.でも2.でもない場合は,\textit{Nq}と\textit{Np}が違うJFM/\texttt{jfmvar}/サイズである.
+      共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べ,決まっていればそれを採用
+\item 1.でも2.でもない場合は,JFM・\texttt{jfmvar}・サイズの3つ組は\textit{Nq}と\textit{Np}で異なる.
 この場合,まず
 \[
-\vcenter{\halign{\hfil$#:={}$&(\inhibitglue#\inhibitglue)\cr
-gb&\textit{Nq}と「文字コードが{\tt'diffmet'}の文字」との間に入るグルー/カーン\cr
-ga&「文字コードが{\tt'diffmet'}の文字」と\textit{Np}との間に入るグルー/カーン\cr
+\vcenter{\halign{\hfil$#:={}$&\inhibitglue#\inhibitglue\cr
+gb&(\textit{Nq}と「使用フォントが\textit{Nq}のそれと同じで,\hfil\cr
+\omit&\quad 文字コードが\textit{Np}のそれの文字」との間に入るグルー/カーン)\hfil\cr
+ga&(\inhibitglue 「使用フォントが\textit{Np}のそれと同じで,\hfil\cr
+\omit&\quad 文字コードが\textit{Nq}のそれの文字」と\textit{Np}との間に入るグルー/カーン)\hfil\cr
 }}
 \]
-として,左側由来・右側由来の空白(グルー/カーン)を(それぞれのJFMから)求める.
-$\mathit{ga}$と$\mathit{gb}$のどちらか片方が未定義であるならば,定義されている側の値をそのまま採用する.
-もし$\mathit{ga}$と$\mathit{gb}$が両方決まっているならば,両者の値を平均\footnote{\Param{differentjfm}パラメタの
-値によって,「大きい方」「小さい方」「合計」に変えることができる.}した値を採用する.
+として,前側の文字のJFMを使った時の空白(グルー/カーン)と,後側の文字のJFMを使った時のそれを求める.
+
+$\mathit{gb}$,~$\mathit{ga}$それぞれに対する<ratio>の値を$d_b$,~$d_a$とする.
+\begin{itemize}
+\item
+$\mathit{ga}$と$\mathit{gb}$の両方が未定義であるならば,JFM由来のグルーは挿入されず,
+\Param{kanjiskip}を採用することとなる.
+どちらか片方のみが未定義であるならば,次のステップでその未定義の方は長さ0のkernで,<ratio>の値は0であるかのように扱われる.
+\item
+\Param{diffrentjfm}の値が \texttt{pleft}, \texttt{pright},
+      \texttt{paverage} のとき,
+<ratio>の指定に従って比例配分を行う.
+JFM由来のグルー/カーンは以下の値となる:
+\[
+ f\left(\frac{1-d_b}2\textit{gb} + \frac{1+d_b}2\textit{ga},
+\frac{1-d_a}2\textit{gb} + \frac{1+d_a}2\textit{ga}\right)
+\]
+ここで.$f(x,y)$は
+\[
+ f(x,y)=\begin{cases}
+x&\text{if\ }\Param{diffrentjfm}=\texttt{pleft};\\
+y&\text{if\ }\Param{diffrentjfm}=\texttt{pright};\\
+(x+y)/2&\text{if\ }\Param{diffrentjfm}=\texttt{paverage};
+\end{cases}.
+\]
+\item
+\Param{differentjfm}がそれ以外の値の時は,<ratio>の値は無視され,JFM由来のグルー/カーンは以下の値となる:
+\[
+ f(\textit{gb},\textit{ga})
+\]
+ここで.$f(x,y)$は
+\[
+ f(x,y)=\begin{cases}
+\min(x,y)&\text{if\ }\Param{diffrentjfm}=\texttt{small};\\
+\max(x,y)&\text{if\ }\Param{diffrentjfm}=\texttt{large};\\
+(x+y)/2&\text{if\ }\Param{diffrentjfm}=\texttt{average};\\
+x+y&\text{if\ }\Param{diffrentjfm}=\texttt{both};
+\end{cases}.
+\]
+\end{itemize}
+\end{enumerate}
+
+例えば,
+\begin{lstlisting}
+\jfont\foo=psft:Ryumin-Light:jfm=ujis;-kern
+\jfont\bar=psft:GothicBBB-Medium:jfm=ujis;-kern
+\jfont\baz=psft:GothicBBB-Medium:jfm=ujis;jfmvar=piyo;-kern
+\end{lstlisting}
+という3フォントを考え,
+\[
+ \overbrace{\Node{glyph}{\cs{ foo}, `あ'}}^{p}
+\longrightarrow \overbrace{\Node{glyph}{\cs{bar}, `い'}}^{q}
+\longrightarrow \overbrace{\Node{glyph}{\cs{baz}, `う'}}^{r}
+\]
+という3ノードを考える(それぞれ単独でクラスタをなす).
+この場合,$p$と$q$の間は,実フォントが異なるにもかかわらず2.の状況となる一方で,
+$q$と$r$の間は(実フォントが同じなのに)\texttt{jfmvar} キーの内容が異なるので3.の状況となる.
+\item[\Param{kanjiskip}~{[K]}] 上の[M]において空白が定まらなかった場合,
+以下で定めた量「右空白」として採用する.
+この段階においては,\cs{inhibitglue} は効力を持たないため,
+結果として,2つの\textbf{JAchar}間には常に何らかのグルー/カーンが挿入されることとなる.
+\begin{enumerate}
+\item 両クラスタ(厳密には$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$)の中身の文字コードに対する
+\Param{autospacing}パラメタが両方ともfalseだった場合は,長さ0のglueとする.
+\item ユーザ側から見た\Param{kanjiskip}パラメタの自然長が$\cs{maxdimen}=(2^{30}-1)\,{\rm sp}$で
+なければ,\Param{kanjiskip}パラメタの値を持つglueを採用する.
+\item 2.でない場合は,\textit{Nq}, \textit{Np}で使われているJFMに指定されている\Param{kanjiskip}の値を用いる.
+どちらか片方のクラスタだけが\textbf{JAchar}(\textsf{和文A}・\textsf{和文B})のときは,そちらのクラスタで使われている
+JFM由来の値だけを用いる.もし両者で使われているJFMが異なった場合は,上の[M]~3.と同様の方法を用いて調整する.
+\end{enumerate}
+\end{description}
+%\paragraph{「左空白」の算出とそれに伴う補正}
+%「左空白」は過去のバージョンでは定義していたが,このバージョンでは
+%挿入は一切行われない(機能自体削除している).
+%しかし,仕様は流動的であり,将来復活する可能性もあるため,マニュアル中の記述は今のところ極力変更しない.
+\paragraph{禁則用ペナルティの挿入}
+まず,
+\[
+ a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{postbreakpenalty}の値})
++(\text{\textit{Np}{\footnotemark}の文字に対する\Param{prebreakpenalty}の値})
+\]
+とおく\footnotetext{厳密にはそれぞれ$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$.}.
+ペナルティは通常$[-10000,10000]$の整数値をとり,また$\pm 10000$は正負の無限大を意味することになっているが,この$a$の
+算出では単純な整数の加減算を行う.
+
+$a$は禁則処理用に\textit{Nq}と\textit{Np}の間に加えられるべきペナルティ量である.
+\begin{description}
+\item[P-normal~{[PN]}]
+\textit{Nq}と\textit{Np}の間の(a)部分にペナルティ(\textit{penalty\_node})があれば処理は簡単である:
+それらの各ノードにおいて,ペナルティ値を($\pm 10000$を無限大として扱いつつ)$a$だけ増加させればよい.
+また,$10000 + (-10000) = 0$としている.
+
+少々困るのは,(a)部分にペナルティが存在していない場合である.
+直感的に,補正すべき量$a$が0でないとき,その値をもつ\textit{penalty\_node}を作って
+「右空白」の(もし未定義なら\textit{Np}の)直前に挿入……
+ということになるが,実際には僅かにこれより複雑である.
+\begin{itemize}
+\item 「右空白」がカーンであるとき,
+それは「\textit{Nq}と\textit{Np}の間で改行は許されない」ことを意図している.そのため,
+この場合は$a\neq 0$であってもペナルティの挿入はしない.
+\item そうでないないときは,$a\neq 0$ならば\textit{penalty\_node}を作って挿入する.
+%\item 「左空白」がカーンとしてきっちり定義されている時(このとき,「右空白」はカーンでない),
+%この「左空白」の直後での行分割を許容しないといけないので,$a=0$であっても
+%\textit{penalty\_node}を作って挿入する.
+%\item 以上のどれでもないときは,$a\neq 0$ならば\textit{penalty\_node}を作って挿入する.
+\end{itemize}
+\end{description}
+
+\def\gkf#1#2#3{\sf$\displaystyle\vphantom{\Bigg(}%
+  \frac{\hbox to 4\zw{\hss#2\hss}}{\hbox{#3}}$}
+\begin{table}[t]
+%<en>\caption{Summary of JFM glues}
+%<ja>\caption{JFM グルーの概要}
+\label{tab-jfmglue}
+%<en>\medskip
+\begin{center}
+\small
+\begin{tabular}{c|cccccc}
+\toprule
+{\bf\textit{Np}}↓&\sf 和文A&\sf 和文B&\sf 欧文&\sf 箱&\sf glue&\sf kern\\\midrule
+\sf 和文A&
+\gkf{E}{M→K}{PN}&
+\gkf{---}{\OA →K}{PN}&
+\gkf{---}{\OA →X}{PN}&
+\gkf{---}{\OA}{PA}&
+\gkf{---}{\OA}{PN}&
+\gkf{---}{\OA}{PS}\\
+\sf 和文B&
+\gkf{E}{\OB→K}{PA}&
+\gkf{---}{K}{PS}&
+\gkf{---}{X}{PS}\\
+\sf 欧文&
+\gkf{E}{\OB →X}{PA}&
+\gkf{---}{X}{PS}\cr
+\sf 箱&\gkf{E}{\OB}{PA}\\
+\sf glue&\gkf{E}{\OB}{PN}\\
+\sf kern&\gkf{E}{\OB}{PS}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\begin{quote}
+%<*en>
+In the table above, {\small\gkf{E}{M→K}{PN}} means that
+%</en>
+%<*ja>
+上の表において,{\small\gkf{E}{M→K}{PN}}は次の意味である:
+%</ja>
+\begin{enumerate}
+%<*en>
+\item To determine the ``right-space'', \LuaTeX-ja first attempts by the method ``\textsf{JFM-origin~[M]}''.
+If this attempt fails, \LuaTeX-ja use the method ``\textsf{\Param{kanjiskip}~[K]}''.
+%</en>
+%<*ja>
+\item 「右空白」を決めるために,\LuaTeX-ja はまず「JFM由来{[M]}」の方法を試みる.
+  これが失敗したら,\LuaTeX-ja は「\Param{kanjiskip}~{[K]}」の方法を試みる.
+%</ja>
+
+% %<*en>
+% \item The ``left space'' between \textit{Nq}~and~\textit{Np} is
+%   determined by the method ``\textsf{line-end~[E]}''.
+% %</en>
+% %<*ja>
+% \item \textit{Nq} と \textit{Np} の間の「左空白」は「\textsf{line-end~[E]}」の
+%   方法で決定される.
+% %</ja>
+
+%<*en>
+\item \LuaTeX-ja adopts the method ``\textsf{P-normal~[PN]}'' to adjust the penalty
+  between two clusters for \emph{kinsoku shori}.
+%</en>
+%<*ja>
+\item \LuaTeX-jaは2つのクラスタの間の禁則処理用のペナルティを設定するために「\textsf{P-normal~[PN]}」の方法を採用する.
+%</ja>
+\end{enumerate}
+\end{quote}
+\end{table}
+
+\subsection{その他の場合}
+本節の内容は表\ref{tab-jfmglue}にまとめてある.
+
+\paragraph{和文Aと欧文の間}
+\textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{欧文}の場合,JFMグルー挿入処理は次のようにして行われる.
+\begin{itemize}
+\item 「右空白」については,まず以下に述べる\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる.
+それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める.
+%\item 「左空白」については,既に述べた\textsf{line-end~[E]}をそのまま採用する.それに伴う「右空白」の補正も%同じ.
+\item 禁則用ペナルティも,以前述べた\textsf{P-normal~[PN]}と同じである.
+\end{itemize}
+\begin{description}
+\item[Boundary-B~{[\OB]}] \textbf{JAchar}と「\textbf{JAchar}でないもの」との間に入る空白を以下によって求め,
+未定義でなければそれを「右空白」として採用する.
+\textsf{JFM-origin~[M]}の変種と考えて良い.
+これによって定まる空白の典型例は,和文の閉じ括弧と欧文文字の間に入る半角アキである.
+\begin{enumerate}
+\item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合%
+(証としてwhatsitノードが自動挿入される),「右空白」は未定義.
+\item そうでなければ,
+\textit{Nq}と「文字コードが {\tt'jcharbdd'} の文字」との間に入るグルー/カーンとして定まる.
 \end{enumerate}
-
-例えば,
-\begin{verbatim}
-\jfont\foo=psft:Ryumin-Light:jfm=ujis
-\jfont\bar=psft:GothicBBB-Medium:jfm=ujis
-\jfont\baz=psft:GothicBBB-Medium:jfm=ujis;jfmvar=piyo
-\end{verbatim}
-という3フォントを考え,
-\[
- \overbrace{\Node{glyph}{{\tt\char92 foo}, `あ'}}^{p}
-\longrightarrow \overbrace{\Node{glyph}{{\tt\char92 bar}, `い'}}^{q}
-\longrightarrow \overbrace{\Node{glyph}{{\tt\char92 baz}, `う'}}^{r}
-\]
-という3ノードを考える(それぞれ単独でクラスタをなす).
-この場合,$p$と$q$の間は,実フォントが異なるにもかかわらず(2)の状況となる一方で,
-$q$と$r$の間は(実フォントが同じなのに)\texttt{jfmvar}キーの内容が異なるので(3)の状況となる.
-\item[\Param{kanjiskip}~{[K]}] 上の[M]において空白が定まらなかった場合,
-\Param{kanjiskip}の値を以下で定め,それを「右空白」として採用する.
-この段階においては,\verb+\inhibitglue+は効力を持たないため,
-結果として,2つの和文文字間には常に何らかのグルー/カーンが挿入されることとなる.
+\item[\Param{xkanjiskip}~{[X]}]
+この段階では,\textsf{\Param{kanjiskip}~[K]}のときと同じように,
+以下で定めた量を「右空白」として採用する.
+\cs{inhibitglue} は効力を持たない.
 \begin{enumerate}
-\item 両クラスタ(厳密には$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$)の中身の文字コードに対する
-\Param{autospacing}パラメタが両方ともfalseだった場合は,長さ0のglueとする.
-\item ユーザ側から見た\Param{kanjiskip}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で
-なければ,\Param{kanjiskip}パラメタの値を持つglueを採用する.
-\item 2.でない場合は,\textit{Nq}, \textit{Np}で使われているJFMに指定されている\Param{kanjiskip}の値を用いる.
-どちらか片方のクラスタだけが和文文字(\textsf{和文A}・\textsf{和文B})のときは,そちらのクラスタで使われている
-JFM由来の値だけを用いる.もし両者で使われているJFMが異なった場合は,上の[M]~3.と同様の方法を用いて調整する.
+\item 以下のいずれかの場合は,\Param{xkanjiskip}の挿入は抑止される.しかし,実際には行分割を許容するために,長さ0のglueを採用する:
+\begin{itemize}
+\item 両クラスタにおいて,それらの中身の文字コードに対する\Param{autoxspacing}パラメタが共にfalseである.
+\item \textit{Nq}の中身の文字コードについて,「直後への\Param{xkanjiskip}の挿入」が禁止されている
+(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが2以上).
+\item \textit{Np}の中身の文字コードについて,「直前への\Param{xkanjiskip}の挿入」が禁止されている
+(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが偶数).
+\end{itemize}
+\item ユーザ側から見た\Param{xkanjiskip}パラメタの自然長が$\cs{maxdimen}=(2^{30}-1)\,{\rm sp}$で
+なければ,\Param{xkanjiskip}パラメタの値を持つglueを採用する.
+\item 2.でない場合は,\textit{Nq}, \textit{Np}(\textsf{和文A}/\textsf{和文B}なのは片方だけ)
+で使われているJFMに指定されている\Param{xkanjiskip}の値を用いる.
 \end{enumerate}
 \end{description}
-\paragraph{「左空白」の算出とそれに伴う補正}
-次に,「左空白」にあたる量を算出する:
+
+\paragraph{欧文と和文Aの間}
+\textit{Nq}が\textsf{欧文}で,\textit{Np}が\textsf{和文A}の場合,JFMグルー挿入処理は上の場合とほぼ同じである.
+\textsf{和文A}のクラスタが逆になるので,\textsf{Boundary-A~[\OA]}の部分が変わるだけ.
+\begin{itemize}
+\item 「右空白」については,まず以下に述べる\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる.
+それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める.
+%\item \textit{Nq}が和文でないので,「左空白」は算出されない.
+\item 禁則用ペナルティは,以前述べた\textsf{P-normal~[PN]}と同じである.
+\end{itemize}
 \begin{description}
-\item[line-end~{[E]}]
-\textit{Nq}と\textit{Np}の間で行分割が起きたときに,
-\textit{Nq}と行末の間に入る空白である.ぶら下げ組の組版などに用いられることを期待している.
+\item[Boundary-A~{[\OA]}] 「\textbf{JAchar}でないもの」と\textbf{JAchar}との間に入る空白を以下によって求め,
+未定義でなければそれを「右空白」として採用する.
+\textsf{JFM-origin~[M]}の変種と考えて良い.
+これによって定まる空白の典型例は,欧文文字と和文の開き括弧との間に入る半角アキである.
 \begin{enumerate}
-\item 既に算出した「右空白」がカーンである場合は,「左空白」は挿入されない.
-\item 「右空白」がglueか未定義(長さ0のglueとみなす)の場合は,「左空白」は
-\textit{Nq}と「文字コード\texttt{'lineend'}の文字」との間に入るカーンとして,JFMから決定される.
-\item 2.で決まった「左空白」の長さが0でなければ,その分だけ先ほど算出した「右空白」の自然長を引く.
+\item もし両クラスタの間で \cs{inhibitglue} が実行されていた場合(証としてwhatsitノードが自動挿入される),次へ.
+\item そうでなければ,
+「文字コードが {\tt'jcharbdd'} の文字」と\textit{Np}との間に入るグルー/カーンとして定まる.
 \end{enumerate}
 \end{description}
-\paragraph{禁則用ペナルティの挿入}
-まず,
+
+\paragraph{和文Aと箱・グルー・カーンの間}
+\textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{箱}・グルー・カーンのいずれかであった場合,
+両者の間に挿入されるJFMグルーについては同じ処理である.しかし,そこでの行分割に対する仕様が異なるので,
+ペナルティの挿入処理は若干異なったものとなっている.
+
+\begin{itemize}
+\item 「右空白」については,既に述べた\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる.
+それが失敗した場合は,「右空白」は挿入されない.
+%\item 「左空白」については,既に述べた\textsf{line-end~[E]}の算出方法をそのまま採用する.それに伴う「右空白」の補正も同じ.
+\item 禁則用ペナルティの処理は,後ろのクラスタ\textit{Np}の種類によって異なる.
+なお,$\mathit{Np}.\mathit{head}$は無意味であるから,
+「$\mathit{Np}.\mathit{head}$に対する\Param{prebreakpenalty}の値」は0とみなされる.言い換えれば,
 \[
- a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{postbreakpenalty}の値})
-+(\text{\textit{Np}{\footnotemark}の文字に対する\Param{prebreakpenalty}の値})
+ a:=(\text{\textit{Nq}の文字に対する\Param{postbreakpenalty}の値}).
 \]
-とおく\footnotetext{厳密にはそれぞれ$\mathit{Nq}.\mathit{tail}$,$\mathit{Np}.\mathit{head}$.}.
-ペナルティは通常$[-10000,10000]$の整数値をとり,また$\pm 10000$は正負の無限大を意味することになっているが,この$a$の
-算出では単純な整数の加減算を行う.
+\begin{description}
+\item[箱] \textit{Np}が\textsf{箱}であった場合は,両クラスタの間での行分割は
+(明示的に両クラスタの間に \cs{penalty10000} があった場合を除き)いつも許容される.そのため,
+ペナルティ処理は,後に述べる\textsf{P-allow~[PA]}が\textsf{P-normal~[PN]}の代わりに用いられる.
+\item[グルー] \textit{Np}がグルーの場合,ペナルティ処理は\textsf{P-normal~[PN]}を用いる.
+\item[カーン] \textit{Np}がカーンであった場合は,両クラスタの間での行分割は
+(明示的に両クラスタの間にペナルティがあった場合を除き)許容されない.
+ペナルティ処理は,後に述べる\textsf{P-suppress~[PS]}を使う.
+\end{description}
+これらの\textsf{P-normal~[PN]},\textsf{P-allow~[PA]},\textsf{P-suppress~[PS]}の違いは,
+\textit{Nq}と\textit{Np}の間(以前の図だと(a)の部分)にペナルティが存在しない場合にのみ存在する.
+\end{itemize}
 
-$a$は禁則処理用に\textit{Nq}と\textit{Np}の間に加えられるべきペナルティ量である.
 \begin{description}
-\item[P-normal~{[PN]}]
-\textit{Nq}と\textit{Np}の間の(a)部分にペナルティ(\textit{penalty\_node})があれば処理は簡単である:
-それらの各ノードにおいて,ペナルティ値を($\pm 10000$を無限大として扱いつつ)$a$だけ増加させればよい.
-また,$10000 + (-10000) = 0$としている.
+\item[P-allow~{[PA]}]
+\textit{Nq}と\textit{Np}の間の(a)部分にペナルティがあれば,\textsf{P-normal~[PN]}と同様に,
+それらの各ノードにおいてペナルティ値を$a$だけ増加させる.
 
-少々困るのは,(a)部分にペナルティが存在していない場合である.
-直感的に,補正すべき量$a$が0でないとき,その値をもつ\textit{penalty\_node}を作って
\80\8cå\8f³ç©ºç\99½ã\80\8dã\81®ï¼\88ã\82\82ã\81\97æ\9cªå®\9a義ã\81ªã\82\89\textit{Np}ã\81®ï¼\89ç\9b´å\89\8dã\81«æ\8c¿å\85¥â\80¦â\80¦
\81¨ã\81\84ã\81\86ã\81\93ã\81¨ã\81«ã\81ªã\82\8bã\81\8cï¼\8cå®\9fé\9a\9bã\81«ã\81¯å\83\85ã\81\8bã\81«ã\81\93ã\82\8cã\82\88ã\82\8aè¤\87é\9b\91ã\81§ã\81\82ã\82\8bï¼\8e
+(a)部分にペナルティが存在していない場合,
+\LuaTeX-ja は\textit{Nq}と\textit{Np}の間の行分割を可能にしようとする.
\81\9dã\81®ã\81\9fã\82\81ã\81«ï¼\8c以ä¸\8bã\81®ã\81\84ã\81\9aã\82\8cã\81\8bã\81®å ´å\90\88ã\81«$a$ã\82\92ã\82\82ã\81¤\textit{penalty\_node}ã\82\92ä½\9cã\81£ã\81¦
\80\8cå\8f³ç©ºç\99½ã\80\8dã\81®ï¼\88ã\82\82ã\81\97æ\9cªå®\9a義ã\81ªã\82\89\textit{Np}ã\81®ï¼\89ç\9b´å\89\8dã\81«æ\8c¿å\85¥ã\81\99ã\82\8bï¼\9a
 \begin{itemize}
-\item 「右空白」がカーンであるとき,
-それは「\textit{Nq}と\textit{Np}の間で改行は許されない」ことを意図している.そのため,
-この場合は$a\neq 0$であってもペナルティの挿入はしない.
-\item 「左空白」がカーンとしてきっちり定義されている時(このとき,「右空白」はカーンでない),
-この「左空白」の直後での行分割を許容しないといけないので,$a=0$であっても
-\textit{penalty\_node}を作って挿入する.
-\item 以上のどれでもないときは,$a\neq 0$ならば\textit{penalty\_node}を作って挿入する.
+\item 「右空白」がグルーでない(カーンか未定義)であるとき.
+\item $a\neq 0$のときは,「右空白」がグルーであっても\textit{penalty\_node}を作る.
+\end{itemize}
+
+\item[P-suppress~{[PS]}]
+\textit{Nq}と\textit{Np}の間の(a)部分にペナルティがあれば,\textsf{P-normal~[PN]}と同様に,
+それらの各ノードにおいてペナルティ値を$a$だけ増加させる.
+
+(a)部分にペナルティが存在していない場合,
+\textit{Nq}と\textit{Np}の間の行分割は元々不可能のはずだったのであるが,
+\LuaTeX-ja はそれをわざわざ行分割可能にはしない.
+そのため,「右空白」がglueであれば,その直前に \cs{penalty10000} を挿入する.
+\end{description}
+
+\paragraph{箱・グルー・カーンと和文Aの間}
+\textit{Np}が\textsf{箱}・グルー・カーンのいずれかで,\textit{Np}が\textsf{和文A}であった場合は,
+すぐ上の(\textit{Nq}と\textit{Np}の順序が逆になっている)場合と同じである.
+%が,「左空白」がなくなることにのみ注意.
+\begin{itemize}
+\item 「右空白」については,既に述べた\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる.
+それが失敗した場合は,「右空白」は挿入されない.
+%\item \textit{Nq}が和文でないので,「左空白」は算出されない.
+\item 禁則用ペナルティの処理は,\textit{Nq}の種類によって異なる.
+$\mathit{Nq}.\mathit{tail}$は無意味なので,
+\[
+ a:=(\text{\textit{Np}の文字に対する\Param{prebreakpenalty}の値}).
+\]
+\begin{description}
+\item[箱] \textit{Nq}が\textsf{箱}の場合は,\textsf{P-allow~[PA]}を用いる.
+\item[グルー] \textit{Nq}がグルーの場合は,\textsf{P-normal~[PN]}を用いる.
+\item[カーン] \textit{Nq}がカーンの場合は,\textsf{P-suppress~[PS]}を用いる.
+\end{description}
+\end{itemize}
+
+\paragraph{和文Aと和文Bの違い}
+先に述べたように,\textsf{和文B}はhboxの中身の先頭(or 末尾)として出現している
+\textbf{JAchar}である.リスト内に直接ノードとして現れている\textbf{JAchar}(\textsf{和文A})との違いは,
+\begin{itemize}
+\item \textsf{和文B}に対しては,JFMの文字クラス指定から定まる空白
+\textsf{JFM-origin~[M]},\textsf{Boundary-A~[\OA]},\textsf{Boundary-B~[\OB]})の挿入は行われない.
+%「左空白」の算出も行われない.
+例えば,
+\begin{itemize}
+\item 片方が\textsf{和文A},もう片方が\textsf{和文B}のクラスタの場合,
+\textsf{Boundary-A~[\OA]}または\textsf{Boundary-B~[\OB]}の挿入を試み,それがダメなら
+\Param{kanjiskip}~\textsf{[K]}の挿入を行う.
+\item \textsf{和文B}の2つのクラスタの間には,\Param{kanjiskip}~\textsf{[K]}が自動的に入る.
 \end{itemize}
+\item \textsf{和文B}と箱・グルー・カーンが隣接したとき(どちらが前かは関係ない),間にJFMグルー・ペナルティの挿入は一切しない.
+\item \textsf{和文B}と\textsf{和文B},また\textsf{和文B}と\textsf{欧文}とが隣接した時は,禁則用ペナルティ挿入処理は
+\textsf{P-suppress~[PS]}が用いられる.
+\item \textsf{和文B}の文字に対する\Param{prebreakpenalty},~\Param{postbreakpenalty}の値は使われず,0として計算される.
+\end{itemize}
+
+
+次が具体例である:
+\begin{LTXexample}
+あ.\inhibitglue A\\
+\hbox{あ.}A\\
+あ.A
+\end{LTXexample}
+\begin{itemize}
+\item 1行目の\cs{inhibitglue}は\textsf{Boundary-B~[\OB]}の処理のみを抑止するので,ピリオドと「A」の間には
+\Param{xkanjiskip}(四分アキ)が入ることに注意.
+\item 2行目のピリオドと「A」の間においては,前者が\textsf{和文B}となる(hboxの中身の末尾として登場しているから)ので,
+そもそも\textsf{Boundary-B~[\OB]}の処理は行われない.よって,\Param{xkanjiskip}が入ることとなる.
+\item 3行目では,ピリオドの属するクラスタは\textsf{和文A}である.これによって,
+ピリオドと「A」の間には\textsf{Boundary-B~[\OB]}由来の半角アキが入ることになる.
+\end{itemize}
+%</ja>
+
+%<*ja>
+\section{ベースライン補正の方法}
+\subsection{\texttt{yoffset} フィールド}
+\Param{yalbaselineshift}等のベースライン補正は,基本的には対象となっている
+\textit{glyph\_node}の \texttt{yoffset} フィールドの値を増減することによって
+実装されている.なお,\texttt{yoffset} の値は上方向への移動量であるのに対し,
+\Param{yalbaselineshift}などは下方向への移動量である.
+
+さて,\texttt{yoffset} の増減によって見かけのグリフ位置は上下に移動するが,
+仮想ボディの高さ$h$,深さ$d$については
+\begin{description}
+\catcode`\<=12\catcode`\>=12
+ \item[$\texttt{yoffset}\geq 0$のとき]
+$h = \max(\texttt{height} + \texttt{yoffset}, 0)$,
+$d = \max(\texttt{depth} - \texttt{yoffset}, 0)$,
+ \item[$\texttt{yoffset}<0$のとき]
+$h = \max(\texttt{height} + \texttt{yoffset}, 0)$, $d=\texttt{depth}$.
 \end{description}
+という仕様になっている.つまり,\texttt{yoffset} が負(グリフを下ける)の場合に深さは増加しな
+い(表\ref{tab:yoffset_and_im}参照).
+
+\begin{table}[t]
+\caption{\texttt{yoffset} and imaginary body}
+\label{tab:yoffset_and_im}
+\centering\small
+\fboxsep0pt
+\def\T#1#2{\fcolorbox{blue}{white}{%
+  \setbox0=\hbox{\LARGE #1%
+    \directlua{
+      local p = tex.nest[tex.nest.ptr].tail
+      p.yoffset = #2 * 65536
+    }%
+  }%
+  \copy0\kern-\wd0\smash{\color{red}\vrule width \wd0 height 0.2pt depth 0.2pt}%
+}}
+\begin{tabular}{>{\bfseries}lccccc}
+\toprule
+\texttt{yoffset}&10\,pt&5\,pt&0&$-5$\,pt&$-10$\,pt\\
+\midrule
+仮想ボディ&\T{y}{10}, \T{H}{10}&\T{y}{5}, \T{H}{5}&\T{y}{0}, \T{H}{0}%
+&\T{y}{-5}, \T{H}{-5}&\T{y}{-10}, \T{H}{-10}\\[10pt]
+\bottomrule
+\end{tabular}
+\end{table}
+
+\subsection{\textbf{ALchar}の補正}
+上記の問題について,\textbf{ALchar}のベースライン補正では
+「正しい深さ」を持った罫線(rule)を補うという対応策をとった.
+この罫線による補正は,\textit{id}が\textit{id\_glyph}であるクラスタ単位,
+大雑把に言えば音節単位で行われる.
+文字列``Typeset''を
+\begin{itemize}
+ \item フォントはLatin Modern Roman (\texttt{lmroman10-regular.otf}) 10\,pt
+ \item \Param{yalbaselineshift}は5\,pt
+\end{itemize}
+という状況で組んだ場合を例にとって説明しよう.
+
+\LuaTeX・\Pkg{luaotfload}によるカーニング・ハイフネーションが終わった段階では,……
+
+
+
+%</ja>
+
+%<en>\section{Patch for the \Pkg{listings} Package}
+%<ja>\section{\Pkg{listings} パッケージへの対応}
+
+%<*en>
+It is well-known that the \Pkg{listings} package outputs weird results
+for Japanese input.
+The \Pkg{listings} package makes most of letters active and assigns
+output command for each letter~(\cite{listings}).
+But Japanese characters are not included in these activated letters.
+For \pTeX{} series, there is no method to make Japanese characters active;
+a patch \Pkg{jlisting.sty}~(\cite{jlisting}) resolves the problem forcibly.
+%</en>
+%<*ja>
+\Pkg{listings} パッケージが,そのままでは日本語をまともに出力できないこと
+はよく知られている.きちんと整形して出力するために,\Pkg{listings}パッケー
+ジは内部で「ほとんどの文字」をアクティブにし,各文字に対してその文字の出
+力命令を割り当てている(\cite{listings}).
+しかし,そこでアクティブにする文字の中に,和文文
+字がないためである.\pTeX 系列では,和文文字をアクティブにする手法がなく,
+\Pkg{jlisting.sty} というパッチ(\cite{jlisting})を用いることで無理やり解決していた.
+%</ja>
+
+%<*en>
+In \LuaTeX-ja, the problem is resolved by using the \verb+process_input_buffer+ callback.
+The callback function inserts the output command (active character \texttt{U+FFFFF})
+before each letter above \texttt{U+0080}.
+This method can omits the process to make all Japanese characters active
+(most of the activated characters are not used in many cases).
+%</en>
+%<*ja>
+\LuaTeX-jaでは,\verb+process_input_buffer+ コールバックを利用することで,
+「各行に出現する\texttt{U+0080}以降の文字に対して,それらの出力命令を前置する」
+という方法をとっている.出力命令としては,アクティブ文字化した \texttt{U+FFFFF} を用いている.
+これにより,(入力には使用されていないかもしれない)和文文字をもすべてアクティブ化する手間もなく,
+見通しが良い実装になっている.
+%</ja>
+
+
+%<*en>
+If the \Pkg{listings} package  and \LuaTeX-ja were loaded,
+then the patch \Pkg{lltjp-listings} is loaded automatically at \verb+\begin{document}+.
+%</en>
+%<*ja>
+\LuaTeX-ja で利用される \Pkg{listings} パッケージへのパッチ \Pkg{lltjp-listings} は,
+\Pkg{listings} と\LuaTeX-jaを読み込んでおけば,
+\verb+\begin{document}+ の箇所において自動的に読み込まれるので,通常はあまり
+意識する必要はない.
+%</ja>
+
+%<en>\subsection{Notes and additional keys}
+%<ja>\subsection{注意}
+%<*en>
+\paragraph{Escaping to \LaTeX}
+We used the \verb+process_input_buffer+ callback to output \textbf{JAchar}s.
+But it has a drawback; any commands whose name contains a \textbf{JAchar}
+cannot be used in any ``escape to \LaTeX''.
+
+Consider the following input:
+%</en>
+%<*ja>
+\paragraph{\LaTeX へのエスケープ}
+日本語対応を行うために \verb+process_input_buffer+ を使用したことで,
+\texttt{texcl},~\texttt{escapeinside}といった\emph{「\LaTeX へのエスケープ」中では,
+\textbf{JAchar}を名称の一部に含む制御綴は使用不可能}である.
+例えば次のような入力を考えよう:
+%</ja>
+\begin{verbatim*}
+\begin{lstlisting}[escapechar=\#]
+#\ほげ xぴよ#
+\end{lstlisting}
+\end{verbatim*}
+%<en>The line~2 is transformed by the callback to
+%<ja>ここで,2行目は \verb+process_input_buffer+ の作用により,
+\begin{lstlisting}[showspaces, escapechar=\!]
+#\!\IVSA FFFFF!ほ!\IVSA FFFFF!げ x!\IVSA FFFFF!ぴ!\IVSA FFFFF!よ#
+\end{lstlisting}
+%<*en>
+before the line is actually processed.
+In the escape (between the character ``\verb+#+''),
+the category code of \texttt{U+FFFFF} is set to 9~(\emph{ignored}).
+Hence the control symbol ``\cs{}\IVSA FFFFF'' will be executed,
+instead of ``\verb+\ほげ+''.
+%</en>
+%<*ja>
+と変換されてから,実際の処理に回される.
+「\verb+#+」で挟まれた「\LaTeX へのエスケープ」中では\
+\texttt{U+FFFFF} のカテゴリーコードは9~(\textit{ignored})となるので,
+結局「\verb+\ほげ+」の代わりに
+「\cs{}\IVSA FFFFF」というcontrol symbolが実行されることになる.
+%</ja>
+
+%<*en>
+\paragraph{Variation selectors}
+\Pkg{lltjp-listings} add two keys, namely \texttt{vsraw}~and~\texttt{vscmd},
+which specify how variation selectors are treated in
+\texttt{lstlisting} or other enviroments.
+Note that these additional keys are not usable in the preamble,
+since \Pkg{lltjp-listings} is loaded at \verb+\begin{document}+.
+
+\texttt{vsraw} is a key which takes a boolean value, and its default value is
+false.
+\begin{itemize}
+ \item If the \texttt{vsraw} key is true, then
+variation selectors are ``combined'' with the previous character.
+%</en>
+%<*ja>
+\paragraph{異体字セレクタの扱い}
+\texttt{lstlisting} 環境などの内部にある異体字セレクタを扱うため,
+\Pkg{lltjp-listings} では \texttt{vsraw} と \texttt{vscmd} という2つのキーを追加した.
+しかし,\Pkg{lltjp-listings} が実際に読み込まれるのは \verb+\begin{document}+\
+のところであるので,プリアンブル内ではこれらの追加キーは使用できない.
+
+\texttt{vsraw}は,ブール値の値をとるキーであり,標準ではfalseである.
+\begin{itemize}
+ \item trueの場合は,異体字セレクタは「直前の文字に続けて」出力される.
+もしもIVSサポート(\ref{ssec-ltjotf}節)が有効になっていた場合は,
+以下の例(左側は入力,右側はその出力)のようになる.
+%</ja>
+\begin{LTXexample}
+\begin{lstlisting}[vsraw=true]
+葛󠄀城市,葛󠄁飾区,葛西
+\end{lstlisting}
+\end{LTXexample}
+%<*en>
+\item If the \texttt{vsraw} key is false, then
+variation selectors are typeset by an appropriate command, which is specified by
+      the \texttt{vscmd} key.
+The default setting of the \texttt{vscmd} key produces the following.
+%</en>
+%<*ja>
+\item falseの場合は,異体字セレクタは適当な命令によって「見える形で」出力される.
+どのような形で出力されるかを規定するのが \texttt{vscmd} キーであり,
+\Pkg{lltjp-listings} の標準設定では以下の例の右側のように出力される.
+%</ja>
+\begin{LTXexample}
+\begin{lstlisting}[vsraw=false,
+   vscmd=\ltjlistingsvsstdcmd]
+葛󠄀城市,葛󠄁飾区,葛西
+\end{lstlisting}
+\end{LTXexample}
+%<ja> ちなみに,本ドキュメントでは次のようにしている:
+%<en> For example, the following code is the setting of the \texttt{vscmd} key in this document.
+\begin{lstlisting}[numbers=left]
+\def\IVSA#1#2#3#4#5{%
+  \textcolor{blue}{\raisebox{3.5pt}{\tt%
+    \fboxsep=0.5pt\fbox{\tiny \oalign{0#1#2\crcr#3#4#5\crcr}}}}%
+}
+{\catcode`\%=11
+  \gdef\IVSB#1{\expandafter\IVSA\directlua{
+    local cat_str = luatexbase.catcodetables['string']
+    tex.sprint(cat_str, string.format('%X', 0xE00EF+#1))
+}}}
+\lstset{vscmd=\IVSB}
+\end{lstlisting}
+\end{itemize}
+%<*en>
+The default output command of variation selectors is stored in \verb+\ltjlistingsvsstdcmd+.
+%</en>
+%<*ja>
+既定の出力命令を復活させたい場合は\ \verb+vscmd=\ltjlistingsvsstdcmd+\
+とすれば良い.
+%</ja>
+
+%<*en>
+\paragraph{The \texttt{doubleletterspace} key}
+Even the column format is \texttt{[c]fixed}, sometimes characters are not vertically aligned.
+The following example  is typeset with \texttt{basewidth=2em}, and
+you'll see the leftmost ``\texttt{H}'' are not vertically aligned.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left]
+:H:
+:HHHH:
+\end{lstlisting}
+
+\Pkg{lltjp-listing} adds the \texttt{doubleletterspace} key (not activated by default, for
+compatibility) to
+improve the situation, namely doubles inter-character space in each output unit.
+With this key, the above input now produces better output.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left, doubleletterspace]
+:H:
+:HHHH:
+\end{lstlisting}
+%</en>
+%<*ja>
+\paragraph{\texttt{doubleletterspace}キー}
+\Pkg{listings}パッケージで列揃えが \texttt{[c]fixed} となっている場合でも,
+場合によっては文字が縦に揃わない場合もある.
+例を以下に示そう.これは強調するために \texttt{basewidth=2em} を設定している.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left]
+:H:
+:HHHH:
+\end{lstlisting}
+1行目と2行目の「\texttt{H}」の位置が揃っていないが,
+これは出力単位ごとに,先頭・末尾・各文字間に同じ量の空白を挿入することによる.
+
+\Pkg{lltjp-listing}では,このような症状を改善させるために \texttt{doubleletterspace} キー
+を追加した(標準では互換性のために無効になっている).このキーを有効にすると,
+出力単位中の各文字間の空白を2倍にすることで文字を揃いやすくしている.
+上と同じものを \texttt{doubleletterspace} キーを有効にして組んだものが以下であり,
+きちんと「\texttt{H}」の位置が揃っていることが分かる.
+\begin{lstlisting}[basewidth=2em, basicstyle=\tt,numbers=left, doubleletterspace]
+:H:
+:HHHH:
+\end{lstlisting}
+%</ja>
+
+%<en>\subsection{Class of characters}
+%<ja>\subsection{文字種}
+
+%<en>Roughly speaking, the \Pkg{listings} package processes input as follows:
+%<ja>\Pkg{listings} パッケージの内部では,大雑把に言うと
+\begin{enumerate}
+%<en>\item Collects \textit{letters} and \textit{digits}, which can be used for the name of identifiers.
+%<ja>\item 識別子として使える文字 (``letter'',~``digit'') たちを集める.
+%<en>\item When reading an \textit{other}, outputs the collected character string (with modification, if needed).
+%<ja>\item letterでもdigitでもない文字が現れた時に,収集した文字列を(必要なら修飾して)出力する.
+%<en>\item Collects \textit{others}.
+%<ja>\item 今度は逆に,letterでない文字たちをletterが現れるまで集める.
+%<en>\item When reading a \textit{letter} or a \textit{digit}, outputs the collected character string.
+%<ja>\item letterが出現したら集めた文字列を出力する.
+%<en>\item Turns back to 1.
+%<ja>\item 1.に戻る.
+\end{enumerate}
+%<*en>
+By the above process, line breaks inside of an identifier are blocked.
+A flag \verb+\lst@ifletter+ indicates whether the previous character can be used
+for the name of identifiers or not.
+%</en>
+%<*ja>
+という処理が行われている.これにより,識別子の途中では行分割が行われないようになっている.
+直前の文字が識別子として使えるか否かは \verb+\lst@ifletter+ というフラグに格納されている.
+%</ja>
+
+%<*en>
+For Japanese characters, line breaks are permitted on both sides
+except for brackets, dashes, etc.
+Hence the patch \Pkg{lltjp-listings} introduces
+a new flag \verb+\lst@ifkanji+, which indicates
+whether the previous character is a Japanese character or not.
+For illustration, we introduce following classes of characters:
+%</en>
+%<*ja>
+さて,日本語の処理である.殆どの和文文字の前後では行分割が可能であるが,その一方で
+括弧類や音引きなどでは禁則処理が必要なことから,\Pkg{lltjp-listings} では,
+直前が和文文字であるかを示すフラグ \verb+\lst@ifkanji+ を新たに導入した.
+以降,説明のために以下のように文字を分類する:
+%</ja>
+\begin{center}
+\small
+\begin{tabular}{lccccc}
+\toprule
+&Letter&Other&Kanji&Open&Close\\\midrule
+\verb+\lst@ifletter+&T&F&T&F&T\\
+\verb+\lst@ifkanji+&F&F&T&T&F\\
+%<en>Meaning&char in an identifier&other alphabet&%
+%<en>most of Japanese char&opening brackets&closing brackets\\
+%<ja>意図&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\
+\bottomrule
+\end{tabular}
+\end{center}
+%<*en>
+Note that \textit{digits} in the \Pkg{listings} package can be Letter or
+Other according to circumstances.
+%</en>
+%<*ja>
+なお,本来の\Pkg{listings} パッケージでの分類``digit''は,
+出現状況によって,上の表のLetterとOtherのどちらにもなりうる.
+また,KanjiとCloseは \verb+\lst@ifletter+ と \verb+\lst@ifkanji+ の値が一致しているが,
+これは間違いではない.
+%</ja>
 
-\def\gkf#1#2#3{\sf$\displaystyle\vphantom{\Bigg(}%
-  \frac{\hbox to 1\zw{#1}\hbox to 4.5\zw{\hss #2}}{\hbox{#3}}$}
-\begin{table}[t]
-%<en>\caption{Summary of JFM glues.}
-%<ja>\caption{JFM グルーの概要.}
-\label{tab-jfmglue}
+%<*en>
+For example, let us consider the case an Open comes after a Letter.
+Since an Open represents Japanese open brackets,
+it is preferred to be permitted to insert line break after the Letter.
+Therefore, the collected character string is output in this case.
+%</en>
+%<*ja>
+例えば,Letterの直後にOpenが来た場合を考える.
+文字種Openは和文開き括弧類を想定しているので,Letterの直後では行分割が可能であることが望ましい.
+そのため,この場合では,すでに収集されている文字列を出力することで行分割を許容するようにした.
+%</ja>
+
+%<*en>
+The following table summarizes $5\times 5=25$ cases:
+%</en>
+%<*ja>
+同じように,$5\times 5=25$通り全てについて書くと,次のようになる:
+%</ja>
 \begin{center}
 \small
-\begin{tabular}{>{\sf}c|cccccc}
+\begin{tabular}{llccccc}
 \toprule
-{\bf\textit{Np}}↓&\sf 和文A&\sf 和文B&\sf 欧文&\sf 箱&\sf glue&\sf kern\\\midrule
-和文A&
-\gkf{E}{M→K}{PN}&
-\gkf{---}{\OA →K}{PN}&
-\gkf{---}{\OA →X}{PN}&
-\gkf{---}{\OA}{PA}&
-\gkf{---}{\OA}{PN}&
-\gkf{---}{\OA}{PS}\\
-和文B&
-\gkf{E}{\OB→K}{PA}&
-\gkf{---}{K}{PS}&
-\gkf{---}{X}{PS}\\
-欧文&
-\gkf{E}{\OB →X}{PA}&
-\gkf{---}{X}{PS}\cr
-箱&\gkf{E}{\OB}{PA}\\
-glue&\gkf{E}{\OB}{PN}\\
-kern&\gkf{E}{\OB}{PS}\\
+%<*en>
+&&\multicolumn{4}{c}{Next}\\\cmidrule(lr){3-7}
+&&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss}
+&\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule
+&Letter&collects&\multicolumn{3}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\
+&Other&outputs&collects&\multicolumn{2}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\
+Prev&Kanji&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\
+&Open&\multicolumn{5}{c}{\hrulefill \ collects\ \hrulefill}\\
+&Close&\multicolumn{4}{c}{\hrulefill \ outputs\ \hrulefill}&collects\\
+%</en>
+%<*ja>
+&&\multicolumn{4}{c}{後ろ側の文字}\\\cmidrule(lr){3-7}
+&&\hbox to 4em{\hss Letter\hss}&\hbox to 4em{\hss Other\hss}
+&\hbox to 4em{\hss Kanji\hss}&\hbox to 4em{\hss Open\hss}&Close\\\midrule
+直&Letter&収集&\multicolumn{3}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
+前&Other&出力&収集&\multicolumn{2}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
+文&Kanji&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
+字&Open&\multicolumn{5}{c}{\hrulefill \ 収集\ \hrulefill}\\
+種&Close&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
+%</ja>
 \bottomrule
 \end{tabular}
 \end{center}
-\begin{quote}
+%<en>In the above table,
+%<ja>上の表において,
+\begin{itemize}
+%<en>\item ``outputs'' means to output the collected character string (i.e., line breaking is permitted there).
+%<ja>\item 「出力」は,それまでに集めた文字列を出力(≒ここで行分割可能)を意味する.
+
+%<en>\item ``collects'' means to append the next character to the collected character string (i.e., line breaking is prohibited there).
+%<ja>\item 「収集」は,後側の文字を,現在収集された文字列に追加(行分割不可)を意味する.
+\end{itemize}
+
 %<*en>
-Here {\small\gkf{E}{M→K}{PN}} means that
+Characters above or equal to~\texttt{U+0080} \emph{except Variation Selectors}
+are classified into above 5~classes by the following rules:
 %</en>
 %<*ja>
-ここで {\small\gkf{E}{M→K}{PN}} は次の意味である:
+\texttt{U+0080}以降の\emph{異体字セレクタ以外の}各文字が
+Letter, Other, Kanji, Open, Closeのどれに属するかは次によって決まる:
 %</ja>
+\begin{itemize}
+%<en>\item \textbf{ALchar}s above or equal to~\texttt{U+0080} are classified as Letter.
+%<ja>\item (\texttt{U+0080}以降の)\textbf{ALchar}は,すべてLetter扱いである.
+
+%<en>\item \textbf{JAchar}s are classified in the order as follows:
+%<ja>\item \textbf{JAchar}については,以下の順序に従って文字種を決める:
 \begin{enumerate}
+%<en>\item Characters whose \Param{prebreakpenalty} is greater than or equal to 0 are classified as Open.
+%<ja>\item \Param{prebreakpenalty}が0以上の文字はOpen扱いである.
+
+%<en>\item Characters whose \Param{postbreakpenalty} is greater than or equal to 0 are classified as Close.
+%<ja>\item \Param{postbreakpenalty}が0以上の文字はClose扱いである.
+
+%<en>\item Characters that don't satisfy the above two conditions are classified as Kanji.
+%<ja>\item 上の3条件のどちらにも当てはまらなかった文字は,Kanji扱いである.
+\end{enumerate}
+\end{itemize}
+
 %<*en>
-\item To determine the `right-space', \LuaTeX-ja first attempts by the method `\textsf{JFM-origin~[M]}'.
-If this attempt fails, \LuaTeX-ja use the method `\textsf{\Param{kanjiskip}~[K]}'.
+The width of halfwidth kana (\texttt{U+FF61}--\texttt{U+FF9F})
+is same as the width of \textbf{ALchar};
+the width of the other \textbf{JAchar}s is double the width of \textbf{ALchar}.
 %</en>
 %<*ja>
-\item 「右空白」を決めるために,\LuaTeX-ja はまず「JFM由来{[M]}」の方法を試みる.
-  これが失敗したら,\LuaTeX-ja は「\Param{kanjiskip}~{[K]}」の方法を試みる.
+なお,半角カナ(U+FF61--U+FF9F)以外の\textbf{JAchar}は欧文文字2文字分の幅をとるものとみなされる.
+半角カナは欧文文字1文字分の幅となる.
 %</ja>
 
 %<*en>
-\item The `left space' between \textit{Nq}~and~\textit{Np} is determined by the method `\textsf{line-end~[E]}'.
+This classification process is executed every time a character appears in
+the \texttt{lstlisting} environment or other environments/commands.
 %</en>
 %<*ja>
-\item \textit{Nq} と \textit{Np} の間の「左空白」は「\textsf{line-end~[E]}」の
-  方法で決定される.
+これらの文字種決定は,実際に \texttt{lstlisting} 環境などの内部で文字が出てくるたびに行われる.
 %</ja>
 
-%<*en>
-\item \LuaTeX-ja adopts the method `\textsf{P-normal~[PN]}' to adjust the penalty between two clusters for \emph{kinsoku shori}.
-%</en>
 %<*ja>
-\item \LuaTeX-jaは2つのクラスタの間の禁則処理用のペナルティを調節するために「\textsf{P-normal~[PN]}」の方法を採用する.
-%</ja>
-\end{enumerate}
-\end{quote}
-\end{table}
+\section{和文の行長補正方法}
+\label{sec-adjspec}
+\Pkg{luatexja-adjust} で提供される優先順位付きの行長調整の詳細を述
+べる.大まかに述べると,次のようになる.
+\begin{itemize}
+\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行
+      長に半端が出た場合,その半端分は\textbf{JAglue}(\Param{xkanjiskip},
+      \Param{kanjiskip},JFMグルー)と
+      それ以外のグルーの全てで(優先順位なく)負担される.
+\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\emph{段
+      落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整
+      を実現するためにグルーの伸縮度を調整する.
+      その処理においては,グルーの自然長と\textbf{JAglue}以外の
+      グルーの伸び量・縮み量は変更せず,必要に応じて\textbf{JAglue}の伸び量・縮み量のみを
+      変更する設計とした.
+
+\Pkg{luatexja-adjust} の作用は,この処理を行うcallbackを追加するだけであり,
+      この章の残りではcallbackでの処理について解説する.
+\end{itemize}
 
-\subsection{その他の場合}
-本節の内容は表 \ref{tab-jfmglue} にまとめてある.
+\paragraph{準備:合計伸縮量の計算}
+グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には,
+有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と
+いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に
+\texttt{fi} などの\emph{無限大レベルの伸縮度が用いられている場合は,そ
+の行に対しての処理を中止}する.
 
-\paragraph{和文Aと欧文の間}
-\textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{欧文}の場合,JFMグルー挿入処理は次のようにして行われる.
+よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて
+行われているとして良い.さらに,簡単のため,この行はグルーが広げられている
+(自然長で組むと望ましい行長よりの短い)場合しか扱わない.
+
+まず,段落中の行中のグルーを
 \begin{itemize}
-\item 「右空白」については,まず以下に述べる\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる.
-それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める.
-\item 「左空白」については,既に述べた\textsf{line-end~[E]}をそのまま採用する.それに伴う「右空白」の補正も同じ.
-\item 禁則用ペナルティも,以前述べた\textsf{P-normal~[PN]}と同じである.
+\item \textbf{JAglue}ではないグルー
+\item JFMグルー(優先度\footnote{%
+  \ref{ssec-jfm-str}節にあるように,
+  各JFMグルーには$-2$から2までの優先度がついている.}%
+別にまとめられる)
+\item 和欧文間空白(\Param{xkanjiskip})
+\item 和文間空白(\Param{kanjiskip})
 \end{itemize}
-\begin{description}
-\item[Boundary-B~{[\OB]}] 和文文字と「和文でないもの」との間に入る空白を以下によって求め,
-未定義でなければそれを「右空白」として採用する.
-\textsf{JFM-origin~[M]}の変種と考えて良い.
-これによって定まる空白の典型例は,和文の閉じ括弧と欧文文字の間に入る半角アキである.
-\begin{enumerate}
-\item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される),次へ.
-\item そうでなければ,
-\textit{Nq}と「文字コードが{\tt'jcharbdd'}の文字」との間に入るグルー/カーンとして定まる.
+の$1+1+5+1=8$つに類別し,それぞれの種別ごとに
+許容されている伸び量(\texttt{stretch}の値)の合計を計算する.
+また,行長と自然長との差を\textit{total}とおく.
+
+
+\subsection{行末文字の位置調整}
+行末が文字クラス$n$の\textbf{JAchar}であった場合,
+それを動かすことによって,\textit{total}のうち
+\textbf{JAglue}が負担する分を少なくしようとする.
+この行末文字の左右の移動可能量は,
+JFM中にある文字クラス$n$の定義の
+\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに
+全角単位の値として記述されている.
+
+例えば,行末文字が句点「。」であり,そこで用いられているJFM中に
+\begin{lstlisting}
+  [2] = {
+    chars = { '。', ... }, width = 0.5, ...,
+    end_stretch = 0.5, end_shrink = 0.5,
+  },
+\end{lstlisting}
+という指定があった場合,この行末の句点は
+\begin{itemize}
+\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合,
+この行中の\textbf{JAglue}の負担を軽減するため,
+行末の句点を半角だけ右に移動する(ぶら下げ組を行う).
+\item 通常の\TeX の行分割処理で「半角以上の空き」が行われていた場合,
+逆に行末句点を半角左に移動させる(見た目的に全角取りとなる).
+\item 以上のどちらでもない場合,行末句点の位置調整は行わない.
+\end{itemize}
+となる.
+
+行末文字を移動した場合,その分だけ\textit{total}の値を引いておく.
+
+\subsection{グルーの調整}
+\textit{total}の分だけが,行中のグルーの伸び量に応じて負担されることになる.
+負担するグルーの優先度は以下の順であり,
+できるだけ\Param{kanjiskip}を自然長のままにすることを
+試みている.
+\begin{enumerate}\def\labelenumi{(\Alph{enumi})}
+ \item \textbf{JAglue}以外のグルー
+ \item 優先度2のJFMグルー
+ \item 優先度1のJFMグルー
+ \item 優先度0のJFMグルー
+ \item 優先度$-1$のJFMグルー
+ \item 優先度$-2$のJFMグルー
+ \item \Param{xkanjiskip}
+ \item \Param{kanjiskip}
 \end{enumerate}
-\item[\Param{xkanjiskip}~{[X]}]
-この段階では,\textsf{\Param{kanjiskip}~[K]}のときと同じように,
-\Param{xkanjiskip}の値を以下で定め,それを「右空白」として採用する.
-この段階で\verb+\inhibitglue+は効力を持たないのも同じである.
 \begin{enumerate}
-\item 以下のいずれかの場合は,\Param{xkanjiskip}の挿入は抑止される.しかし,実際には行分割を許容するために,長さ0のglueを採用する:
+ \item 行末の\textbf{JAchar}を移動したことで$\textit{total}=0$となれば,
+調整の必要はなく,行が格納されているhboxの
+\texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算すればよい.
+以降,$\textit{total}\neq 0$と仮定する.
+ \item \textit{total}が「\textbf{JAglue}以外のグルーの伸び量の合計」(以下,(A)の伸び量の
+       合計,と称す)よりも小さければ,
+それらのグルーに\textit{total}を負担させ,\textbf{JAglue}達自身は自然長で組むことができる.
+よって,以下の処理を行う:
+\begin{enumerate}
+\item 各\textbf{JAglue}の伸び量を0とする.
+\item 行が格納されているhboxの
+\texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算する.
+これによって,\textit{total}は\textbf{JAglue}以外のグルーによって負担される.
+\end{enumerate}
+\item \textit{total}が「(A)の伸び量の合計」以上ならば,(A)--(H)のどこまで負担すれば
+\textit{total}以上になるかを計算する.
+例えば,
+\[\catcode`\<=12
+ \textit{total} = (\text{(A)--(B)の伸び量の合計}) + p\cdot (\text{(C)の伸び量の合計}),
+ \qquad 0\le p<1
+\]
+であった場合,各グルーは次のように組まれる:
 \begin{itemize}
-\item 両クラスタにおいて,それらの中身の文字コードに対する\Param{autoxspacing}パラメタが共にfalseである.
-\item \textit{Nq}の中身の文字コードについて,「直後への\Param{xkanjiskip}の挿入」が禁止されている
-(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが2以上).
-\item \textit{Np}の中身の文字コードについて,「直前への\Param{xkanjiskip}の挿入」が禁止されている
-(つまり,\Param{jaxspmode}~(or \Param{alxspmode})パラメタが偶数).
+ \item (A),~(B)に属するグルーは各グルーで許された伸び量まで伸ばす.
+ \item (C)に属するグルーはそれぞれ$p\times (\text{伸び量})$だけ伸びる.
+ \item (D)--(H)に属するグルーは自然長のまま.
 \end{itemize}
-\item ユーザ側から見た\Param{xkanjiskip}パラメタの自然長が${\tt \char92 maxdimen}=(2^{30}-1)\,{\rm sp}$で
-なければ,\Param{xkanjiskip}パラメタの値を持つglueを採用する.
-\item 2.でない場合は,\textit{Nq}, \textit{Np}(\textsf{和文A}/\textsf{和文B}なのは片方だけ)
-で使われているJFMに指定されている\Param{xkanjiskip}の値を用いる.
+実際には,前に述べた「設計」に従い,次のように処理している:
+\begin{enumerate}
+\item (C)に属するグルーの伸び量を$p$倍する.
+\item (D)--(H)に属するグルーの伸び量を0とする.
+\item 行が格納されているhboxの
+\texttt{glue\_set}, \texttt{glue\_sign}, \texttt{glue\_order}を再計算する.
+これによって,\textit{total}は\textbf{JAglue}以外のグルーによって負担される.
+\end{enumerate}
+\item \textit{total}が(A)--(H)の伸び量の合計よりも大きい場合,どうしようもないので
+      \verb+^^;+何もしない.
 \end{enumerate}
+
+%</ja>
+
+%<*ja>
+\section{IVS対応}
+\verb+luatexja.otf.enable_ivs()+ を実行し,IVS対応を有効にした状態では,
+\verb+pre_linebreak_filter+ や \verb+hpack_filter+ コールバックには
+次の4つが順に実行される状態となっている:
+\begin{description}
+\item[\tt ltj.do\_ivs] \textit{glyph\_node}~$p$の直後に,異体字セレクタ(を表す\textit{glyph\_node})
+が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える.
+
+しかし,単に$p.\textit{char}$を変更するだけでは,後から
+OpenType機能の適用(すぐ下)により置換される可能性がある.そのため,
+\cs{CID} や \cs{UTF} と同じように,\textit{glyph\_node}~$p$の代わりに
+\texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを用いている.
+\item[(\Pkg{luaotfload} によるfont featureの適用)]
+\item[\tt ltj.otf] \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを
+きちんと\textit{glyph\_node}に変換する.この処理は,\cs{CID}, \cs{UTF}やIVSによる置換が,
+OpenType機能の適用で上書きされてしまうのを防止するためである.
+\item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と,
+JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う.
 \end{description}
 
-\paragraph{欧文と和文Aの間}
-\textit{Nq}が\textsf{欧文}で,\textit{Np}が\textsf{和文A}の場合,JFMグルー挿入処理は上の場合とほぼ同じである.
-\textsf{和文A}のクラスタが逆になるので,\textsf{Boundary-A~[\OA]}の部分が変わるだけ.
+問題は各フォントの持っているIVS情報をどのように取得するか,である.
+\Pkg{luaotfload} はフォント番号<font\_number>の情報を\
+\texttt{fonts.hashes.identifiers[<font\_number>]} 以下に格納している.
+しかし,OpenTypeフォントのIVS情報は格納されていないようである%
+\footnote{TrueTypeフォントに関しては,
+\begin{center}
+\texttt{fonts.hashes.idenfiers[<font\_number>]%
+  .resources.variants[<selector>][<base\_char>]}
+\end{center}
+に,<base\_char>番の文字の後に異体字セレクタ<selector>が続いた場合に
+出力すべきグリフが書かれてある.}.
+%例えば,小塚明朝Pr6N~Rでは,
+
+一方,\LuaTeX 内部の \texttt{fontloader} の返すテーブルには
+OpenTypeフォントでもTrueTypeフォントでもIVS情報が格納されている.
+具体的には……
+
+そのため,\LuaTeX-jaのIVS対応においては,\LuaTeX 内部の\
+\texttt{fontloader} を直接用いることで,フォントのIVS情報を取得している.
+20140114.0以降でキャッシュを用いるようにした要因はここにあり,
+\texttt{fontloader} の呼び出しでかなり時間を消費することから,
+%%% to_table を使わなくしたことで,メモリ使用量は減った
+IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している.
+%</ja>
+
+
+%<*ja>
+\section{複数フォントの「合成」(未完)}
+\section{\LuaTeX-jaにおけるキャッシュ}
+\Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を
+キャッシュとして保存しているのと同様の方法で,
+\LuaTeX-jaもいくつかのキャッシュファイルを作成するようになった.
 \begin{itemize}
-\item 「右空白」については,まず以下に述べる\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる.
-それが失敗した場合は,\textsf{\Param{xkanjiskip}~[X]}によって定める.
-\item \textit{Nq}が和文でないので,「左空白」は算出されない.
-\item 禁則用ペナルティは,以前述べた\textsf{P-normal~[PN]}と同じである.
+ \item 通常,キャッシュは\texttt{\$TEXMFVAR/luatexja/}以下に保存され,
+そこから読み込みが行われる.
+ \item 「通常の」テキスト形式のキャッシュ(拡張子は \texttt{.lua})以外にも,
+それをバイナリ形式(バイトコード)に変換したものもサポートしている.
+\begin{itemize}
+ \item \LuaTeX とLuaJIT\TeX ではバイトコードの形式が異なるため,バイナリ形式の
+キャッシュは共有できない.\LuaTeX 用のバイナリキャッシュは \texttt{.luc},
+LuaJIT\TeX 用のは \texttt{.lub} と拡張子を変えることで対応している.
+ \item キャッシュを読み込む時,同名のバイナリキャッシュがあれば,
+テキスト形式のものよりそちらを優先して読み込む.
+ \item テキスト形式のキャッシュが更新/作成される際は,そのバイナリ版も
+同時に更新される.
+また,(バイナリ版が見つからず)テキスト形式のキャッシュ側が読み込まれたときは,
+\LuaTeX-jaはバイナリキャッシュを作成する.
 \end{itemize}
-\begin{description}
-\item[Boundary-A~{[\OA]}] 「和文でないもの」と和文文字との間に入る空白を以下によって求め,
-未定義でなければそれを「右空白」として採用する.
-\textsf{JFM-origin~[M]}の変種と考えて良い.
-これによって定まる空白の典型例は,欧文文字と和文の開き括弧との間に入る半角アキである.
-\begin{enumerate}
-\item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される),次へ.
-\item そうでなければ,
-「文字コードが{\tt'jcharbdd'}の文字」と\textit{Np}との間に入るグルー/カーンとして定まる.
-\end{enumerate}
-\end{description}
+\end{itemize}
+%</ja>
+%<*en>
+\section{Cache Management of \LuaTeX-ja}
+\LuaTeX-ja creates some cache files to reduce the loading time.
+in a similar way to the \Pkg{luaotfload} package:
+\begin{itemize}
+ \item Cache files are usually stored in (and loaded from)
+\texttt{\$TEXMFVAR/luatexja/}.
+ \item In addition to caches of the text form (the extension is ``\texttt{.lua}''),
+caches of the \emph{binary}, precompiled form are supported.
+\begin{itemize}
+ \item We cannot share same binary cache for \LuaTeX\ and LuaJIT\TeX.
+Hence we distinguish them by their extension, ``\texttt{.luc}'' for \LuaTeX\
+and ``\texttt{.lub}'' for LuaJIT\TeX.
+ \item In loading a cache, the binary cache precedes
+the text form.
+ \item When \LuaTeX-ja updates a cache \texttt{hoge.lua},
+its binary version is also updated.
+\end{itemize}
+\end{itemize}
+%</en>
 
-\paragraph{和文Aと箱・グルー・カーンの間}
-\textit{Nq}が\textsf{和文A}で,\textit{Np}が\textsf{箱}・グルー・カーンのいずれかであった場合,
-両者の間に挿入されるJFMグルーについては同じ処理である.しかし,そこでの行分割に対する仕様が異なるので,
-ペナルティの挿入処理は若干異なったものとなっている.
+%<*ja>
+\subsection{キャッシュの使用箇所}
+
+\LuaTeX-ja では以下の3種類のキャッシュを使用している:
+\begin{cslist}
+\item[ltj-cid-auto-adobe-japan1.lua]
+Ryumin-Lightのような非埋め込みフォントの情報を格納しており,
+(それらが\LuaTeX-jaの標準和文フォントなので)\LuaTeX-jaの読み込み時に自動で読まれる.
+生成には\texttt{UniJIS2004-UTF32-\{H, V\}}, \texttt{Adobe-Japan1-UCS2}という3つの
+CMapが必要である.
 
+\pageref{para-cid}ページで述べたように,\texttt{cid}キーを使って
+非埋め込みの中国語・韓国語フォントを定義する場合,同様のキャッシュが生成される.
+キャッシュの名称,必要となるCMapについては表\ref{tab:cid-cache}を参照して欲しい.
+
+\item[extra\_***.lua]
+フォント``\texttt{***}''における異体字セレクタの情報,縦組用字形への変換テーブル,そして
+縦組時における幅を格納している.構造は以下の通り:
+%</ja>
+%<*en>
+\subsection{Use of cache}
+
+\LuaTeX-ja uses the following cache:
+\begin{cslist}
+\item[ltj-cid-auto-adobe-japan1.lua]
+The font table of a CID-keyed non-embedded Japanese font.
+This is loaded in every run.
+It is created from three CMaps, \texttt{UniJIS2004-UTF32-\{H,V\}} and
+            \texttt{Adobe-Japan1-UCS2},
+and this is why these two CMaps are needed in the first run of \LuaTeX-ja.
+
+Similar caches are created as Table~\ref{tab:cid-cache},
+if you specified \texttt{cid} key in \cs{jfont}
+to use other CID-keyed non-embedded fonts for Chinese or Korean,
+as in Page~\pageref{para-cid}.
+
+\item[extra\_***.lua]
+This file stores the table which stores the following.
 \begin{itemize}
-\item 「右空白」については,既に述べた\textsf{Boundary-B~[\OB]}により空白を決定しようと試みる.
-それが失敗した場合は,「右空白」は挿入されない.
-\item 「左空白」については,既に述べた\textsf{line-end~[E]}の算出方法をそのまま採用する.それに伴う「右空白」の補正も同じ.
-\item 禁則用ペナルティの処理は,後ろのクラスタ\textit{Np}の種類によって異なる.
-なお,$\mathit{Np}.\mathit{head}$は無意味であるから,
-「$\mathit{Np}.\mathit{head}$に対する\Param{prebreakpenalty}の値」は0とみなされる.言い換えれば,
-\[
- a:=(\text{\textit{Nq}{\footnotemark}の文字に対する\Param{postbreakpenalty}の値}).
-\]
-\begin{description}
-\item[箱] \textit{Np}が\textsf{箱}であった場合は,両クラスタの間での行分割は
-(明示的に両クラスタの間に\verb+\penalty10000+があった場合を除き)いつも許容される.そのため,
-ペナルティ処理は,後に述べる\textsf{P-allow~[PA]}が\textsf{P-normal~[PN]}の代わりに用いられる.
-\item[グルー] \textit{Np}がグルーの場合,ペナルティ処理は\textsf{P-normal~[PN]}を用いる.
-\item[カーン] \textit{Np}がカーンであった場合は,両クラスタの間での行分割は
-(明示的に両クラスタの間にペナルティがあった場合を除き)許容されない.
-ペナルティ処理は,後に述べる\textsf{P-suppress~[PS]}を使う.
-\end{description}
-これらの\textsf{P-normal~[PN]},\textsf{P-allow~[PA]},\textsf{P-suppress~[PS]}の違いは,
-\textit{Nq}と\textit{Np}の間(以前の図だと(a)の部分)にペナルティが存在しない場合にのみ存在する.
+ \item unicode variants in a font ``\texttt{***}''
+ \item vertical width of glyphs, if it is not equal to the sum of
+the height of ascender and the depth of descender
+ \item vertical variants
 \end{itemize}
+The following is the structure of the that table.
+%</en>
 
-\begin{description}
-\item[P-allow~{[PA]}]
-\textit{Nq}と\textit{Np}の間の(a)部分にペナルティがあれば,\textsf{P-normal~[PN]}と同様に,
-それらの各ノードにおいてペナルティ値を$a$だけ増加させる.
+\begin{table}[!tb]
+ \centering\small
+\caption{\texttt{cid} key and corresponding files}
+\label{tab:cid-cache}
+\vspace*{\medskipamount}
+\begin{tabular}{>{\tt}l>{\tt}l>{\tt}l>{\tt}l}
+\toprule
+\bf \texttt{cid} key&\bf name of the cache &
+\multicolumn{2}{c}{\bf used CMaps}\\
+\midrule
+Adobe-Japan1-*&ltj-cid-auto-adobe-japan1.lua&UniJIS2004-UTF32-*&Adobe-Japan1-UCS2\\
+Adobe-Korea1-*&ltj-cid-auto-adobe-korea1.lua&UniKS-UTF32-*&Adobe-Korea1-UCS2\\
+Adobe-GB1-*&ltj-cid-auto-adobe-gb1.lua&UniGB-UTF32-*&Adobe-GB1-UCS2\\
+Adobe-CNS1-*&ltj-cid-auto-adobe-cns1.lua&UniCNS-UTF32-*&Adobe-CNS1-UCS2\\
+\bottomrule
+\end{tabular}
+\end{table}
 
-(a)部分にペナルティが存在していない場合,
-\LuaTeX-ja は\textit{Nq}と\textit{Np}の間の行分割を可能にしようとする.
-そのために,以下の場合に$a$をもつ\textit{penalty\_node}を作って
-「右空白」の(もし未定義なら\textit{Np}の)直前に挿入する:
+\begin{lstlisting}
+return {
+ {
+  [10955]={    -- U+2ACB "Subset Of Above Not Equal To"
+   [65024]=983879, -- <2ACB FE00>
+   ["vwidth"]=0.98, -- vertical width
+  },
+  [37001]={    -- U+9089 "邉"
+   [0]=37001,  --   <9089 E0100>
+   991049,     --   <9089 E0101>
+   ...
+   ["vert"]=995025, -- vertical variant
+  },
+  ...
+ },
+ ["chksum"]="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", -- checksum of the fontfile
+ ["version"]=2, -- version of the cache
+}
+\end{lstlisting}
+%<*ja>
+\item[ltj-jisx0208.\{luc|lub\}]
+\LuaTeX-ja配布中の\texttt{ltj-jisx0208.lua}をバイナリ化したものである.
+これはJIS~X~0208とUnicodeとの変換テーブルであり,
+\pTeX との互換目的の文字コード変換命令で用いられる.
+%</ja>
+%<*en>
+\item[ltj-jisx0208.\{luc|lub\}]
+The binary version of \texttt{ltj-jisx0208.lua}.
+This is the conversion table between JIS~X~0208 and Unicode
+which is used in Kanji-code conversion commands for compatibility with \pTeX.
+%</en>
+\end{cslist}
+
+%<*en>
+\subsection{Internal}
+Cache management system of \LuaTeX-ja is stored in \texttt{luatexja.base}
+(\texttt{ltj-base.lua}).
+There are three public functions for cache management in \texttt{luatexja.base},
+where <filename> stands for the file name \emph{without suffix}:
+\begin{cslist}
+\item[save\_cache(<filename>, <data>)]
+Save a non-nil table <data> into a cache <filename>.
+Both the text form <filename>\texttt{.lua} and its binary version
+are created or updated.
+
+\item[save\_cache\_luc(<filename>, <data>{[, <serialized\_data>]})]
+
+Same as \texttt{save\_cache}, except that only the binary cache is updated.
+The third argument <serialized\_data> is not usually given.
+But if this is given, it is treated as a string representation of <data>.
+
+\item[load\_cache(<filename>, <outdate>)]
+Load the cache <filename>.
+<outdate> is a function which takes one argument (the contents of the cache),
+and its return value is whether the cache is outdated.
+
+\texttt{load\_cache} first tries to
+read the binary cache <filename>\texttt{.\{luc|lub\}}.
+If its contents is up-to-date, \texttt{load\_cache} returns the contents.
+If the binary cache is not found or
+its contents is outdated, \texttt{load\_cache} tries to
+read the text form <filename>\texttt{.lua}.
+Hence, the return value of \texttt{load\_cache} is non-nil,
+if and only if the updated cache is found.
+\end{cslist}
+%</en>
+%<*ja>
+\subsection{内部命令}
+\LuaTeX-jaにおけるキャッシュ管理は,\texttt{luatexja.base}~(\texttt{ltj-base.lua})に
+実装しており,以下の3関数が公開されている.
+ここで,<filename>は保存するキャッシュのファイル名を\emph{拡張子なしで}指定する.
+\begin{cslist}
+\item[save\_cache(<filename>, <data>)]
+nilでない<data>をキャッシュ<filename>に保存する.
+テキスト形式の<filename>\texttt{.lua}のみならず,
+そのバイナリ版も作成/更新される.
+
+\item[save\_cache\_luc(<filename>, <data>{[, <serialized\_data>]})]
+
+\texttt{save\_cache}と同様だが,バイナリキャッシュのみが更新される.
+第3引数<serialized\_data>が与えられた場合,それを
+<data>の文字列化表現として使用する.
+そのため,<serialized\_data>は普通は指定しないことになるだろう.
+
+\item[load\_cache(<filename>, <outdate>)]
+キャッシュ<filename>を読み込む.
+<outdate>は1引数(キャッシュの中身)をとる関数であり,
+その戻り値は「キャッシュの更新が必要」かどうかを示すブール値でないといけない.
+
+\texttt{load\_cache}は,まずバイナリキャッシュ<filename>\texttt{.\{luc|lub\}}を
+読みこむ.もしその内容が「新しい」,つまり<outdate>の評価結果が \texttt{false} なら
+\texttt{load\_cache}はこのバイナリキャッシュの中身を返す.
+もしバイナリキャッシュが見つからなかったか,「古すぎる」ならばテキスト版
+            <filename>\texttt{.lua}を読み込み,その値を返す.
+
+以上より,\texttt{load\_cache}自体がnilでない値を返すのは,ちょうど「新しい」キャッシュが
+見つかった場合である.
+\end{cslist}
+%</ja>
+
+
+%<*ja>
+\section{縦組の実装}
+\label{sec-dir-imp}
+\ref{sec-direction}章の最初でも述べたように,
+\LuaTeX-jaは横組(\texttt{TLT})で組んだボックスを回転させる方式で
+縦組を実装している.
+
+\LuaTeX-jaにおける縦組の実装は
+\pTeX における実装(\cite{ptexdoc,ptextug})をベースにしている.
+
+\subsection{direction~whatsit}
+\textit{direction}~whatsitとは,\textit{direction}という特定の \verb+user_id+ を持つ
+whatsitのことであり,以下のタイミングで作られる.
 \begin{itemize}
-\item 「右空白」がグルーでない(カーンか未定義)であるとき.
-\item 「左空白」がカーンとしてきっちり定義されている時.
+ \item 組方向を \cs{tate} 等で変更したとき.
+ \item \cs{hbox}, \cs{vbox}, \cs{vtop} による明示的なボックスの開始時.\\
+\verb+\hbox{}+, \verb+\vbox{}+ といった,
+\begin{itemize}
+ \item \cs{tate} 等によりボックス内部の組方向を変更していない
+ \item ボックスの中身のリストが空である
+\end{itemize}
+場合は,\LuaTeX の \verb+hpack_filter+, \verb+vpack_filter+ といった
+callbackに処理が回らない.そこで,\LuaTeX-ja では,\cs{everyhbox}, \cs{everyvbox} を利用す
+       ることで各ボックスの先頭に確実に追加するようにしている\footnote{%
+  問題は \cs{hbox to 25pt\{\}} という状況である.実際のこのボックスの中身は空でない(少な
+       くともdirection whatsitがある)ため,何も対策をしなければhpack時にUnderfill警告が発
+       生してしまうことになる.\LuaTeX-jaではそうならないように「\cs{hbadness},
+       \cs{vbadness} を一時的に10000に変更し,hpack, vpack後に元の値に戻す」処理を行ってい
+       る.
+}.
+ \item \cs{vsplit}によってvboxを分割した時の「残り」の先頭.
+ \item \LuaTeX-ja読み込み前に作成したボックスの寸法を \cs{ltjsetwd} 等によって変更した時.
+ \item \cs{insert} によるinsertionでは,中身の先頭に\textit{direction}~whatsitは作られず,
+その代わりに中身の各ボックス・罫線の直前に作られる\footnote{%
+ これは,ページ分割の過程でinsertionが分割される時,「現在のページで出力される部分」が空と
+       なることがあることによる.先頭にwhatsitを置くと,最悪でも「現在のページにwhatsitが
+       残る」ことになってしまう.}.
 \end{itemize}
+なお,\verb+\vtop{...}+ の場合は,先頭にdirection whatsitを置くと
+ボックスの高さが常に0\,ptになるという問題が発生する.そのため,この場合に限っては
+vpack時にdirection whatsitをリストの2番目に移動させている.
 
-\item[P-suppress~{[PS]}]
-\textit{Nq}と\textit{Np}の間の(a)部分にペナルティがあれば,\textsf{P-normal~[PN]}と同様に,
-それらの各ノードにおいてペナルティ値を$a$だけ増加させる.
+direction whatsitはあくまでも組方向処理のための補助的なノードであるので,
+\cs{unhbox}, \cs{unhcopy} によってボックスの中身が展開される時には展開直前に削除される.
+これは
+\begin{lstlisting}
+ % yoko direction
+\setbox0=\hbox{\tate B}
+\noindent % 水平モードに入る.この時点でのリストの中身は空
+\unhbox0 A
+\end{lstlisting}
+といった場合に,段落が縦組で組まれたり,あるいは
+\begin{lstlisting}
+\setbox0=\hbox{}
+\leavevmode \hbox{A}\unhbox0
+\setbox1=\lastbox % \box1 はどうなる?
+\end{lstlisting}
+で \cs{box1} が \cs{hbox\{A\}} でなく空になってしまうことを防ぐためである.
 
-(a)部分にペナルティが存在していない場合,
-\textit{Nq}と\textit{Np}の間の行分割は元々不可能のはずだったのであるが,
-\LuaTeX-ja はそれをわざわざ行分割可能にはしない.
-そのため,「右空白」がglueであれば,その直前に\verb+\penalty10000+を挿入する.
-\end{description}
 
-なお,「右空白」はカーン,「左空白」は未定義の
+\subsection{\textit{dir\_box}}
+縦中横など異方向のボックスを配置する場合に,周囲の組方向と大きさを整合させるため,
+\LuaTeX-jaでは \verb+\ltj@dir+ が128以降の\textit{hlist\_node}, \textit{vlist\_node}を
+用いる.これらは\pTeX における\textit{dir\_node}の役割と同じ果たしており,
+この文章中では\textit{dir\_box}と呼称する.
+
+\subsubsection{異方向のボックスの整合}
+\textit{dir\_box}の第一の使用目的は,異方向のボックスの大きさを整合させることである.
+例えば,
+\begin{lstlisting}
+ % yoko direction
+平成\hbox{\tate 26}年
+\end{lstlisting}
+は段落中で
 \[
- \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}}
+ \xymatrix{
+   {}\Node{glyph}{`平'}\ar[r]&{}\Node{glyph}{`成'}\ar[r]&
+   {}\HNode{hbox}{10.00003}{3.02779}{0.0}\ar[r]\ar[d]^{\text{中身}}&{}\Node{glyph}{`年'}\\
+   &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'}
+ }
 \]
-のような状況を考える.
-このとき,$a$,即ち「あ」の\Param{postbreakpenalty}がいかなる値であっても,
-この2クラスタ間は最終的に
-\begin{equation}
- \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow
-\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}}
-\label{eq-gref}
-\end{equation}
-となり,$a$分のペナルティは挿入されないことに注意して欲しい.
-\Param{postbreakpenalty}は($a$は)殆どの場合が非負の値と考えられ,そのような場合では
-\eqref{eq-gref}と
+というリストを作る.その後,この段落が終了したときに,
+\LuaTeX-jaの\textbf{JAglue}挿入処理が行われ
 \[
- \overbrace{\Node{glyph}{`あ'}}^{\mathit{Nq}}\longrightarrow
-\Node{penalty}{$a$}\longrightarrow
-\Node{kern}{右空白}\longrightarrow \overbrace{\Node{glue}{1\,pt}}^{\mathit{Np}}
+ \xymatrix{
+   {}\Node{glyph}{`平'}\ar[r]
+  &{}\textcolor{blue}{\Node{glue}{\Param{xkanjiskip}}}\ar[r]
+  &{}\Node{glyph}{`成'}\ar[r]
+  &{}\textcolor{blue}{\Node{penalty}{0}}
+    \ar`r[d] `[l] `[ddll] `[dl] [dl]
+  \\
+  &&{}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{yoko})}{3.02779}{10.00003}{0.0}}\ar[r]\ar[d]^{\text{中身}}
+  &{}\textcolor{blue}{\Node{penalty}{0}}\ar[r]
+  &{}\Node{glyph}{`年'}\\
+  &&{}\HNode{hbox}{10.00003}{3.02779}{0.0}\ar[d]^{\text{中身}}\\
+  &&{}\Node{whatsit}{\cs{tate}}\ar[r]&{}\Node{glyph}{`2'}\ar[r]&{}\Node{glyph}{`6'}
+ }
 \]
-との間に差異は生じない%
-\footnote{kern$\rightarrow$glueが1つの行分割可能点(行分割に伴うペナルティは0)
-であるため,たとえ$a=10000$であっても,\textit{Nq}と\textit{Np}の間で行分割を禁止することはできない.}.
-
-\paragraph{箱・グルー・カーンと和文Aの間}
-\textit{Np}が\textsf{箱}・グルー・カーンのいずれかで,\textit{Np}が\textsf{和文A}であった場合は,
-すぐ上の(\textit{Nq}と\textit{Np}の順序が逆になっている)場合とほぼ同じであるが,「左空白」がなくなることにのみ注意.
+のようになる(青字は\textbf{JAglue},赤字が整合処理のための\textit{dir\_box}である).
+\TeX の \cs{showbox} 形式で書けば
+
+\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt
+\catcode`\@=0 @catcode`@\=12
+.\tenmin 平
+@textcolor{blue}{.\glue 0.0 plus 0.4 minus 0.4}
+.\tenmin 成
+@textcolor{blue}{.\penalty 0}
+@textcolor{red}{.\hbox(10.00003+0.0)x3.02779, direction TLT}
+..\hbox(3.02779+0.0)x10.00003, direction TLT
+...\whatsit4=[]
+...\tenrm 2
+...\tenrm 6
+@textcolor{blue}{.\penalty 0}
+.\tenmin 年
+}\medskip
+
+\noindent である.
+
+なお,\cs{raise},~\cs{lower}, \cs{moveleft},~\cs{moveright} といったボックス移動命令では.
+移動を正しく表現するために段落やボックスの途中でも異方向のボックスは\textit{dir\_box}にカ
+プセル化している.
+例えば
+\begin{lstlisting}
+ % yoko direction
+平成\raise1pt\hbox{\tate 26}年\showlists
+\end{lstlisting}
+は以下のような結果を得る.
+
+\medskip{\narrowbaselines\ttfamily\obeylines\parindent0pt
+\catcode`\@=0 @catcode`@\=12
+(前略)
+\tenrm 平
+\tenrm 成
+@textcolor{red}{\hbox(10.00003+0.0)x3.02779, shifted -1.0, direction TLT}
+.\hbox(3.02779+0.0)x10.00003, direction TLT
+..\whatsit4=[]
+..\tenrm 2
+..\tenrm 6
+\tenrm 年
+}\medskip
+
+また,メインの垂直リストに異方向のボックスが追加される場合にも同様に即座に
+\textit{dir\_box}にカプセル化している.ページ分割のタイミングを正
+しく\TeX が判断するためである.
+\cs{lastbox} によるボックスの取得では,\textit{dir\_box}は削除される.
+
+\subsubsection{異方向のボックス寸法の格納}
+第二の使用目的は,現在の組方向がボックス本来の組方向とは異なる状況で,
+\cs{ltjsetwd} によってボックス寸法を設定されたことを記録することである.
+
+例えば
+\begin{lstlisting}[numbers=left]
+\setbox0=\hbox{\vrule width 10pt height 5pt depth 2pt}
+\setbox1=\hbox{\tate\ltjsetwd0=20pt}
+\wd0=9pt
+\setbox1=\hbox{\dtou\ltjsetwd0=20pt}
+\setbox0=\hbox{\dtou a\box0}
+\end{lstlisting}
+というコードを考える.1行目で \cs{box0} には横組の
+幅10\,pt,高さ5\,pt,深さ2\,ptのボックスが代入される.
+よって,
 \begin{itemize}
-\item 「右空白」については,既に述べた\textsf{Boundary-A~[\OA]}により空白を決定しようと試みる.
-それが失敗した場合は,「右空白」は挿入されない.
-\item \textit{Nq}が和文でないので,「左空白」は算出されない.
-\item 禁則用ペナルティの処理は,\textit{Nq}の種類によって異なる.
-$\mathit{Nq}.\mathit{tail}$は無意味なので,
+ \item 縦組下では \cs{box0} は幅7\,pt,高さ・深さ5\,ptのボックスとして扱われる.
+ \item \cs{dtou} 下では \cs{box0} は幅7\,pt,高さ10\,pt,深さ0\,ptのボックスとして扱われる.
+\end{itemize}
+このとき,\cs{box0} の\emph{中身}は
 \[
- a:=(\text{\textit{Np}{\footnotemark}の文字に対する\Param{prebreakpenalty}の値}).
+ \xymatrix{
+   {}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{}
+ }
 \]
-\begin{description}
-\item[箱] \textit{Nq}が\textsf{箱}の場合は,\textsf{P-allow~[PA]}を用いる.
-\item[グルー] \textit{Nq}がグルーの場合は,\textsf{P-normal~[PN]}を用いる.
-\item[カーン] \textit{Nq}がカーンの場合は,\textsf{P-suppress~[PS]}を用いる.
-\end{description}
-\end{itemize}
-
-\paragraph{和文Aと和文Bの違い}
-先に述べたように,\textsf{和文B}は水平ボックスの中身の先頭(or 末尾)として出現している
-和文文字である.リスト内に直接ノードとして現れている和文文字(\textsf{和文A})との違いは,
-\begin{itemize}
-\item \textsf{和文B}に対しては,JFMの文字クラス指定から定まる空白
-\textsf{JFM-origin~[M]},\textsf{Boundary-A~[\OA]},\textsf{Boundary-B~[\OB]})の挿入は行われない.
-「左空白」の算出も行われない.例えば,
-\begin{itemize}
-\item 片方が\textsf{和文A},もう片方が\textsf{和文B}のクラスタの場合,
-\textsf{Boundary-A~[\OA]}または\textsf{Boundary-B~[\OB]}の挿入を試み,それがダメなら
-\Param{kanjiskip}~\textsf{[K]}の挿入を行う.
-\item \textsf{和文B}の2つのクラスタの間には,\Param{kanjiskip}~\textsf{[K]}が自動的に入る.
-\end{itemize}
-\item \textsf{和文B}と箱・グルー・カーンが隣接したとき(どちらが前かは関係ない),間にJFMグルー・ペナルティの挿入は一切しない.
-\item \textsf{和文B}と\textsf{和文B},また\textsf{和文B}と\textsf{欧文}とが隣接した時は,禁則用ペナルティ挿入処理は
-\textsf{P-suppress~[PS]}が用いられる.
-\item \textsf{和文B}の文字に対する\Param{prebreakpenalty},~\Param{postbreakpenalty}の値は使われず,0として計算される.
-\end{itemize}
+である.
 
+さて,2行目で縦組時の \cs{box0} の幅が20\,ptに設定される.この情報が
+direction~whatsit内部のノードリストに,\textit{dir\_box}として格納される:
+\[
+ \xymatrix{
+   {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\
+   {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0}}
+ }
+\]
 
-次が具体例である:
-\begin{LTXexample}
-あ.\inhibitglue A\\
-\hbox{あ.}A\\
-あ.A
-\end{LTXexample}
+次に,3行目では横組時の,つまり \cs{box0} 本来の組方向での深さが9\,ptに変更される.
+このとき,\cs{box0} は
 \begin{itemize}
-\item 1行目の\verb+\inhibitglue+は\textsf{Boundary-B~[\OB]}の処理のみを抑止するので,ピリオドと「A」の間には
-\Param{xkanjiskip}(四分アキ)が入ることに注意.
-\item 2行目のピリオドと「A」の間においては,前者が\textsf{和文B}となる(水平ボックスの中身の末尾として登場しているから)ので,
-そもそも\textsf{Boundary-B~[\OB]}の処理は行われない.よって,\Param{xkanjiskip}が入ることとなる.
-\item 3行目では,ピリオドの属するクラスタは\textsf{和文A}である.これによって,
-ピリオドと「A」の間には\textsf{Boundary-B~[\OB]}由来の半角アキが入ることになる.
+ \item 縦組下では寸法代入が既に行われているので,2行目で作成された\textit{dir\_box}の通り
+       に幅20\,pt,高さ・深さ5\,ptのボックスとして扱われる.
+ \item \cs{dtou} 下ではまだ寸法代入が行われていないので,
+\cs{box0} の寸法変更に追従し,幅7\,pt,高さ9\,pt,深さ0\,ptのボックスとして扱われる.
 \end{itemize}
 
-\section{psft}
+4行目では \cs{dtou} 下での\cs{box0} の幅が20\,ptに設定されるので,2行目と同じように
+\[
+ \xymatrix{
+   {}\Node{whatsit}{\cs{yoko}}\ar[r]\ar[d]_{\text{中身}}&{}\Node{rule}{}\\
+   {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[r]&
+   {}\HNode{\textit{dir\_box} (\cs{tate})}{20.0}{5.0}{5.0}
+ }
+\]
+と\textit{dir\_box}が作成される.
+
+このように寸法代入によってつくられた\textit{dir\_box}は,前節の整合過程のときに再利用され
+る.上記の例でいえば,5行目を実行した後の \cs{box0} の内容は
+\[
+ \xymatrix{
+   {}\Node{whatsit}{\cs{dtou}}\ar[r]&
+   {}\Node{glyph}{`a'}\ar[r]&
+   {}\textcolor{red}{\HNode{\textit{dir\_box} (\cs{dtou})}{20.0}{9.0}{0.0}}\ar[d]_{\text{中身}}\\
+   &&{}\HNode{hbox}{9.0}{5.0}{2.0}\ar[d]_{\text{中身}}\\
+   &&{}\Node{whatsit}{\cs{yoko}}\ar[r]&{}\Node{rule}{}
+ }
+\]
+のようになる.
+%</ja>
 
+\newpage
 \begin{thebibliography}{99}
   \addcontentsline{toc}{section}{\refname}
 \bibitem{texbytopic}
-Victor Eijkhout,  \emph{\TeX\ by Topic, A \TeX nician's Reference}, Addison-Wesley, 1992.
+Victor Eijkhout. \newblock \textit{\TeX\ by Topic, A \TeX nician's Reference}, Addison-Wesley, 1992.
+\bibitem{listings} C.\ Heinz, B.\ Moses. \newblock The \textsf{Listings} Package.
+\bibitem{uptex} Takuji Tanaka. \newblock
+upTeX---Unicode version of pTeX with CJK extensions,
+TUG 2013, October 2013.
+%<ja>\newblock
+%<en>\\\null\hfill
+\url{http://tug.org/tug2013/slides/TUG2013_upTeX.pdf}
+\bibitem{jlisting} Thor Watanabe. \newblock Listings\ -\ MyTeXpert.
+%<en>\newblock
+%<ja>\\\null\hfill
+\url{http://mytexpert.osdn.jp/index.php?Listings}
+\bibitem{jlreq}  W3C Japanese Layout Task Force~(ed). \newblock
+Requirements for Japanese Text Layout (W3C Working Group Note), 2011, 2012. \newblock
+\url{http://www.w3.org/TR/jlreq/}%
+%<ja> \\日本語訳の書籍版:W3C日本語組版タスクフォース(編),『W3C技術ノート 日本語組版処理の要件』,東京電機大学出版局,2012.
+\bibitem{min10} 乙部厳己.min10フォントについて.\\\null\hfill
+\url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf}
+\bibitem{x4051} 日本工業規格(Japanese Industrial Standard). JIS~X~4051,
+日本語文書の組版方法(Formatting rules for Japanese documents), 1993, 1995, 2004.
+\bibitem{ptexdoc} 濱野尚人,田村明史,倉沢良一.\TeX の出版への応用—縦組み機能の組み込み—.
+\\\null\hfill\texttt{.../texmf-dist/doc/ptex/base/ptexdoc.pdf}
+\bibitem{ptextug} Hisato Hamano. \newblock
+\textit{Vertical Typesetting with \TeX}, TUGBoat~\textbf{11}(3), 346--352, 1990.
+\bibitem{pdfstd} International Organization for Standardization. \newblock
+ISO 32000-1:2008, \textit{Document management -- Portable document format -- Part 1: PDF
+      1.7}, 2008. \newblock
+\\\null\hfill
+\url{http://www.iso.org/iso/iso\_catalogue/catalogue_tc/catalogue\_detail.htm?csnumber=51502}
 \end{thebibliography}
+
 \end{document}
+%</!showexpl>
+%<*showexpl>
+%%
+%% config file for showexpl.sty
+%%
+%% Copyright The LuaTeX-ja project team, 2012
+%%
+\ProvidesFile{showexpl.cfg}
+  [2012/05/20 v0.01 Definitions for the showexpl package (luatexja)]
+\lstset{}
+\def\SX@Info{}
+\endinput
+%</*showexpl>