OSDN Git Service

Compiled default "kinsoku" parameters into ltj-kinsoku.lua.
[luatex-ja/luatexja.git] / doc / luatexja.dtx
index 5df1d70..d9ecfda 100644 (file)
@@ -1,9 +1,9 @@
 %<*!showexpl>
 %#! lualatex -shell-escape
 
-%<en> \documentclass[a4paper,titlepage]{article}
-%<ja> \documentclass[a4paper,titlepage]{ltjsarticle}
-%<zh> \documentclass[a4paper,titlepage]{ltjsarticle}
+%<en>\documentclass[a4paper,titlepage]{article}
+%<ja>\documentclass[a4paper,titlepage]{ltjsarticle}
+%<zh>\documentclass[a4paper,titlepage]{ltjsarticle}
 
 %%%%%%%%
 \makeatletter
 
 %<*en>
 \usepackage[margin=25mm,footskip=6mm]{geometry}
+\usepackage{luatexja-adjust}\ltjdisableadjust
 \parskip=\smallskipamount
 %</en>
 %<*ja>
 \usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry}
+\usepackage{luatexja-adjust}%\ltjdisableadjust
 \advance\leftmargini-1\zw\advance\leftmarginii-1\zw
 %</ja>
 %<*zh>
 \usepackage[textwidth=45\zw, lines=45, footskip=6mm]{geometry}
+\usepackage{luatexja-adjust}\ltjdisableadjust
 \advance\leftmargini-1\zw\advance\leftmarginii-1\zw
 \def\postpartname{编}
 \DeclareYokoKanjiEncoding{ZH}{}{}
@@ -369,12 +372,12 @@ The followings are major changes from \pTeX:
 %<*en>
 \item 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から書き直されている.
+\item 2つの和文文字の間,和文文字と欧文文字の間に入るグルー/カーン
+      (両者をあわせて\textbf{JAglue}と呼ぶ)の挿入処理が0から書き直されている.
 %</ja>
 %<*zh>
 \item 插在日文字符和其他字符言之间的胶/出格(我们将此称为\textbf{JAglue})是重新实现的。
@@ -1532,25 +1535,25 @@ Use bold gothic as bold mincho.
 %</ja>
 \item[90jis]
 %<*en>
-Use 90JIS glyphs if possible.
+Use fonts with 90JIS glyphs if possible.
 %</en>
 %<*ja>
-出来る限り90JISの字形を使う.
+出来る限り90JISの字形を採用しているフォントを使う.
 %</ja>
 \item[jis2004]
 %<*en>
-Use JIS2004 glyphs if possible.
+Use fonts with JIS2004 glyphs if possible.
 %</en>
 %<*ja>
-出来る限りJIS2004の字形を使う.
+出来る限りJIS2004の字形を採用しているフォントを使う.
 %</ja>
 \item[jis]
 %<*en>
-Use the JFM \texttt{jfm-jis.lua}, instead of the default JFM of
-\LuaTeX-ja, \texttt{jfm-ujis.lua}.
+Use the JFM \texttt{jfm-jis.lua}, instead of \texttt{jfm-ujis.lua}, which is the default JFM of
+\LuaTeX-ja.
 %</en>
 %<*ja>
-用いるJFMを\texttt{jfm-jis.lua}とする.このオプションがない時は
+用いるJFMを(JISフォントメトリック類似の)\texttt{jfm-jis.lua}にする.このオプションがない時は
 \LuaTeX-ja標準の\texttt{jfm-ujis.lua}が用いられる.
 %</ja>
 \end{list}
@@ -1618,7 +1621,6 @@ as a substitute for \textit{rounded gothic}.
 Settings for Hiragino fonts:
 %</en>
 %<*ja>
-モリサワ・ヒラギノ用の設定はそのようなことは行っていない.
 まずヒラギノフォントから:
 %</ja>
 % これらは持っているわけではないので,フォント名が
@@ -2120,7 +2122,7 @@ This range consist of the following Unicode ranges, \emph{except characters in t
 \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+0300}--\texttt{U+036F}: 合成可能な識別記号
 \item \texttt{U+1E00}--\texttt{U+1EFF}: ラテン文字拡張追加
 %</ja>
 %<*zh>
@@ -2140,7 +2142,7 @@ This range consist of the following Unicode ranges, \emph{except characters in t
           fonts) has some of these characters.
 %</en>
 %<*ja>
-\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがって多く
+\item[範囲2${}^{\text{J}}$] ギリシャ文字とキリル文字.JIS~X~0208(したがってほとんど
                              和文フォント)はこれらの文字を持つ.
 %</ja>
 %<*zh>
@@ -3376,22 +3378,45 @@ Furthermore, the glyph is shifted according to values of fields
 \label{fig-pos}
 \end{figure}
 
-\item[kern={\{[$j$]=<kern>, ...\}}]
+\item[kern={\{[$j$]=<kern>, [$j'$]=\{<kern>, [<dir>]\}...\}}]
 
-\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>, [<priority>]\}, ...\}}]
+\item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>, [<priority>], [<dir>]\}, ...\}}]
 %<*ja>
 文字クラス$i$の文字と$j$の文字の間に挿入されるkernやglueの量を指定する.
-             <priority>は省略可能であり,行調整処理におけるこのglueの優先
+
+             <priority>は\texttt{luatexja-adjust.sty} による優先順位付き
+            行長調整(\ref{ssec-adj}節)が有効なときのみ意味を持つ.
+このフィールドは省略可能であり,行調整処理におけるこのglueの優先
              度を$-2$から$+2$の間の整数で指定する.<priority>の省略時の値
              は0であり,範囲外の値が指定されたときの動作は未定義である).
 
+<dir>も省略可能フィールドであり,$-1$から$+1$の実数値をとる.省略時の値は0である.
+\begin{itemize}
+\item $-1$はこのグルーが「前の文字」由来であることを示す.
+\item $+1$はこのグルーが「後の文字」由来であることを示す.
+\item それ以外の値は,「前の文字」由来のグルーと「後の文字」由来の
+グルーが混合されていることを示す.
+\end{itemize}
+なお,このフィールドの値は\Param{differentjfm}の値が\texttt{pleft},~\texttt{pright},~\texttt{paverage}の値のときのみ実際に用いられる.
+
+例えば,\cite{x4051}では,句点と中点の間には,
+句点由来の二分空きと中点由来の四分空きが挿入されるが,この場合には
+\begin{itemize}
+\item <width>には$0.5+0.25=0.75$を指定する.
+\item <dir>には次の値を指定する.
+\[
+ -1\cdot \frac{0.5}{0.5+0.25} + 1 \cdot \frac{0.25}{0.5+0.25} = -\frac13
+\]
+\end{itemize}
+
 %</ja>
 
 \item[end\_stretch=<kern>]
 \item[end\_shrink=<kern>]
 %<*ja>
 これらのフィールドは省略可能である.
-現在の文字クラスの文字が行末に来た時に,行長を詰める調整・伸ばす調整のた
+優先順位付き行長調整が有効であり,かつ現在の文字クラスの文字が行
+            末に来た時に,行長を詰める調整・伸ばす調整のた
              めにこの文字と行末の間に挿入可能なカーンの大きさを指定する.
 %</ja>
 
@@ -3481,10 +3506,10 @@ The following is the list of `imaginary characters':
 %%%<ja>行の終端を表す.
 %%%<zh>行尾结束字符。
 
-\item['diffmet']
-%<en>Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
-%<ja>JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる.
-%<zh>用于两个不同大小或不同JFM的两个\textbf{JAchar}间边界。
+%%\item['diffmet']
+%%<en>Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
+%%<ja>JFMやサイズが異なる2つの\textbf{JAchar}の間の境界として用いられる.
+%%<zh>用于两个不同大小或不同JFM的两个\textbf{JAchar}间边界。
 
 \item['boxbdd']
 %<en>The beginning/ending of a horizontal box, and the beginning of a noindented paragraph.
@@ -4151,6 +4176,9 @@ JFM(もしくはサイズ)が異なる2つの\textbf{JAchar}の間にグル
 \item[\texttt{both}]
 \item[\texttt{large}]
 \item[\texttt{small}]
+\item[\texttt{pleft}]
+\item[\texttt{pright}]
+\item[\texttt{paverage}]
 \end{description}
 
 \item[\Param{jacharrange}\,=<ranges>$^\ast$]
@@ -4494,7 +4522,9 @@ See Subsections~\ref{ssec-jfont} and \ref{ssec-psft} for details.
 これら3つのキーはそれぞれ \verb+\jfont+ プリミティブに対する
 \texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーとそれぞれ対応する.
 \texttt{CID} は下の \texttt{NoEmbed} と合わせて用いられたときのみ有効である.
-詳細は\ref{ssec-jfont}節と\ref{ssec-psft}節を参照.
+\verb+\jfont+ プリミティブに対する
+\texttt{cid}, \texttt{jfm}, \texttt{jfmvar}キーの詳細は\ref{ssec-jfont}節
+            と\ref{ssec-psft}節を参照.
 %</ja>
 
 \item[NoEmbed]
@@ -4588,26 +4618,66 @@ JFMの\texttt{chars}テーブルのエントリとして \verb+'AJ1-xxx'+ の形
 %</ja>
 
 \subsection{\texttt{luatexja-adjust.sty}}
+\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!50!white}{\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{以上の原理は,「包除原理」とよく呼ばれるが}
+%<!ja>\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>
 ...
 %</en>
 %<*ja>
 \pTeX では,行長調整において優先度の概念が存在しなかったため,図
-\ref{fig-adj-input}から半角分の半端は,図\ref{fig-adj-ptex}のように,鍵括
-弧周辺の空白と和文間空白(\Param{kanjiskip}))の両方によって負担される.し
-かし,「日本語組版の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}においては,
\81\93ã\81®å\9b³\ref{fig-adj-input}ã\81®ã\82\88ã\81\86ã\81ªç\8a¶æ³\81ã\81§ã\81¯å\8d\8a端ã\81¯é\8dµæ\8b¬å¼§å\91¨è¾ºã\81®ç©ºç\99½ã\81®ã\81¿ã\81§è² æ\8b\85
-し,その他の和文文字はベタ組で組まれることになっている.この追加パッケー
\82¸ã\81¯\cite{jlreq}ã\82\84\cite{x4051}ã\81«ã\81\8aã\81\91ã\82\8bè¦\8få®\9aã\81®ã\82\88ã\81\86ã\81ªï¼\8cå\84ªå\85\88é \86ä½\8dä»\98ã\81\8dã\81®è¡\8cé\95·èª¿
-整を提供する
+\ref{fig-adj}上段における半角分の半端は,図\ref{fig-adj}中段のように,鍵
+括弧周辺の空白と和文間空白(\Param{kanjiskip})の両方によって負担される.し
+かし,「日本語組版処理の要件」\cite{jlreq}やJIS~X~4051~\cite{x4051}におい
\81¦ã\81¯ï¼\8cã\81\93ã\81®ã\82\88ã\81\86ã\81ªç\8a¶æ³\81ã\81§ã\81¯å\8d\8a端ã\81¯é\8dµæ\8b¬å¼§å\91¨è¾ºã\81®ç©ºç\99½ã\81®ã\81¿ã\81§è² æ\8b\85ã\81\97ï¼\8cã\81\9dã\81®ä»\96ã\81®å\92\8cæ\96\87
+文字はベタ組で組まれる(図\ref{fig-adj}下段)ことになっている.この追加
\83\91ã\83\83ã\82±ã\83¼ã\82¸ã\81¯\cite{jlreq}ã\82\84\cite{x4051}ã\81«ã\81\8aã\81\91ã\82\8bè¦\8få®\9aã\81®ã\82\88ã\81\86ã\81ªï¼\8cå\84ªå\85\88é \86ä½\8dä»\98ã\81\8d
+の行長調整を提供する.詳細な仕様については\ref{sec-adjspec}を参照
 
 
 \texttt{luatexja-adjust.sty}は,以下の命令を提供する.これらはすべてグローバルに効力を発揮する.
 
 \begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}\advance\leftmargin1\zw}
 \item[\char92ltjdisableadjust]
-優先順位付きの行長調整を無効化し,
-\pTeX や\LuaTeX-jaデフォルトのような,優先度なしの行長調整に戻す.
+優先順位付きの行長調整を無効化する.
 
 \item[\char92ltjenableadjust]
 優先順位付きの行長調整を有効化する.
@@ -5329,7 +5399,7 @@ u
 %<ja>\subsection{概要}
 %<zh>\subsection{概要}
 
-\LuaTeX-jaにおける和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる.
+\LuaTeX-jaにおける \textbf{JAglue} の挿入方法は,\pTeX のそれとは全く異なる.
 \pTeX では次のような仕様であった:
 \begin{itemize}
 \item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
@@ -5621,19 +5691,54 @@ $g$は「文字コード\texttt{'boxbdd'}の文字」と\textit{Np}の間に入
 \item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される),
       代わりに\Param{kanjiskip}が挿入されることとなる.次へ.
 \item \textit{Nq}と\textit{Np}が同じJFM・同じ\texttt{jfmvar}キー・同じサイズの和文フォントであったならば,
-      共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べ
+      共通に使っているJFM内で挿入される空白(グルーかカーン)が決まっているか調べ,決まっていればそれを採用
 \item 1.でも2.でもない場合は,\textit{Nq}と\textit{Np}が違うJFM/\texttt{jfmvar}/サイズである.
 この場合,まず
 \[
-\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}$それぞれに対する<dir>の値を$d_b$,~$d_a$とする.
+\begin{itemize}
+\item 
+$\mathit{ga}$と$\mathit{gb}$の両方が未定義であるならば,JFM由来のグルーは挿入されず,\Param{kanjiskip}を採用することとなる.どちらか片方のみが未定義であるならば,次のステップでその未定義の方は長さ0のkernで,<dir>の値は0であるかのように扱われる.
+\item 
+\Param{differentjfm}の値が\texttt{pleft}, \texttt{pright}, \texttt{paverage}のとき,
+<dir>の指定に従って比例配分を行う.
+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{differentjfm}=\texttt{pleft};\\
+y&\text{if\ }\Param{differentjfm}=\texttt{pright};\\
+(x+y)/2&\text{if\ }\Param{differentjfm}=\texttt{paverage};
+\end{cases}.
+\]
+\item 
+\Param{differentmet}がそれ以外の値の時は,<dir>の値は無視され,JFM由来のグルー/カーンは以下の値となる:
+\[
+ f(\textit{gb},\textit{ga})
+\]
+ここで.$f(x,y)$は
+\[
+ f(x,y)=\begin{cases}
+\min(x,y)&\text{if\ }\Param{differentjfm}=\texttt{small};\\
+\max(x,y)&\text{if\ }\Param{differentjfm}=\texttt{large};\\
+(x+y)/2&\text{if\ }\Param{differentjfm}=\texttt{average};\\
+x+y&\text{if\ }\Param{differentjfm}=\texttt{both};
+\end{cases}.
+\]
+\end{itemize}
 \end{enumerate}
 
 例えば,
@@ -5972,43 +6077,122 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので,
 
 \section{psft}
 
+%<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>
-\section{\Pkg{listings} パッケージへの対応}
 \Pkg{listings} パッケージが,そのままでは日本語をまともに出力できないこと
\81¯ã\82\88ã\81\8fç\9f¥ã\82\89ã\82\8cã\81¦ã\81\84ã\82\8bï¼\8cきちんと整形して出力するために,\Pkg{listings}パッケー
\81¯ã\82\88ã\81\8fç\9f¥ã\82\89ã\82\8cã\81¦ã\81\84ã\82\8bï¼\8eきちんと整形して出力するために,\Pkg{listings}パッケー
 ジは内部で「ほとんどの文字」をアクティブにし,各文字に対してその文字の出
-力命令を割り当てている (\cite{listings})
+力命令を割り当てている \cite{listings}
 しかし,そこでアクティブにする文字の中に,和文文
-字がないためである.p\TeX 系列では,和文文字をアクティブにする手法がなく,
+字がないためである.\pTeX 系列では,和文文字をアクティブにする手法がなく,
 \Pkg{jlisting.sty} というパッチ\cite{jlisting}を用いることで無理やり解決していた.
+%</ja>
 
+%<*en>
+In \LuaTeX-ja, the problem is resolved by using \verb+process_input_buffer+ callback.
+The callback function inserts the output command before each letter above 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+ コールバックを利用することで,
 「各行に出現するU+0080以降の文字に対して,それらの出力命令を前置する」という方法をとっている.
 これにより,(入力には使用されていないかもしれない)和文文字をもすべてアクティブ化する手間もなく,
 見通しが良い実装になっている.
+%</ja>
 
+%<*en>
+If \Pkg{listings.sty} and \LuaTeX-ja were loaded,
+then the patch \Pkg{lltjp-listings.sty} is loaded automatically at \verb+\begin{document}+.
+%</en>
+%<*ja>
 \LuaTeX-ja で利用される \Pkg{listings} パッケージへのパッチ \Pkg{lltjp-listings.sty} は,
 \Pkg{listings.sty} と\LuaTeX-jaを読み込んでおけば,
 \verb+\begin{document}+ の箇所において自動的に読み込まれるので,通常はあまり
 意識する必要はない.
+%</ja>
+
+%<en>\paragraph{Class of characters}
+%<ja>\paragraph{文字種}
 
-\paragraph{文字種}
+%<*en>
+Roughly speaking, the \Pkg{listings} package processes input as follows:
+%</en>
+%<*ja>
 \Pkg{listings} パッケージの内部では,大雑把に言うと
+%</ja>
 \begin{enumerate}
+%<*en>
+\item Collects \textit{letters} and \textit{digits}, which can be used for the name of identifiers.
+%</en>
+%<*ja>
 \item 識別子として使える文字 (``letter'',~``digit'') たちを
 集める.
+%</ja>
+
+%<*en>
+\item When reading an \textit{other}, outputs the collected character string (with modification, if needed).
+%</en>
+%<*ja>
 \item letterでもdigitでもない文字が現れた時に,収集した文字列を(必要なら修飾して)出力する.
+%</ja>
+
+%<*en>
+\item Collects \textit{others}.
+%</en>
+%<*ja>
 \item 今度は逆に,letterでない文字たちをletterが現れるまで集める.
+%</ja>
+
+%<*en>
+\item When reading a \textit{letter} or a \textit{digit}, outputs the collected character string.
+%</en>
+%<*ja>
 \item letterが出現したら集めた文字列を出力する.
+%</ja>
+
+%<*en>
+\item Turns back to 1.
+%</en>
+%<*ja>
 \item 1.に戻る.
+%</ja>
 \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 parentheses, dashes, etc.
+To process Japanese characters,
+The pacth \Pkg{lltjp-listings.sty} introduces a new flag \verb+\lst@ifkanji+, which indicates
+whether the previous character is Japanese character or not.
+For illustration, we introduce the following classes of character:
+%</en>
+%<*ja>
 さて,日本語の処理である.殆どの和文文字の前後では行分割が可能であるが,その一方で
 括弧類や音引きなどでは禁則処理が必要なことから,\Pkg{lltjp-listings.sty} では,
-直前が和文文字であるかを示すフラグ \verb+\lst@kanji+ を新たに導入した.
+直前が和文文字であるかを示すフラグ \verb+\lst@ifkanji+ を新たに導入した.
 以降,説明のために以下のように文字を分類する:
+%</ja>
 \begin{center}
 \small
 \begin{tabular}{lccccc}
@@ -6016,23 +6200,55 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので,
 &Letter&Other&Kanji&Open&Close\\\midrule
 \verb+\lst@ifletter+&T&F&T&F&T\\
 \verb+\lst@ifkanji+&F&F&T&T&F\\
-意図&識別子中の文字&その他欧文文字&殆どの和文文字&開き括弧類&閉じ括弧類\\
+%<en>Meaning&identifier char&other alphabet&most of Japanese char&open paren&close paren\\
+%<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>
 
+%<*en>
+For example, let us consider the case an Open comes after a Letter.
+Since an Open represents Japanese open parenthesis,
+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}{llccccc}
 \toprule
+%<*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
@@ -6041,62 +6257,129 @@ $\mathit{Nq}.\mathit{tail}$は無意味なので,
 文&Kanji&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
 字&Open&\multicolumn{5}{c}{\hrulefill \ 収集\ \hrulefill}\\
 種&Close&\multicolumn{4}{c}{\hrulefill \ 出力\ \hrulefill}&収集\\
+%</ja>
 \bottomrule
 \end{tabular}
 \end{center}
-上の表において,
+%<en>In the above table,
+%<ja>上の表において,
 \begin{itemize}
-\item 「出力」は,それまでに集めた文字列を出力(≒ここで行分割可能)を意味する.
-\item 「収集」は,後側の文字を,現在収集された文字列に追加(行分割不可)を意味する.
+%<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}
 
-\paragraph{和文文字扱いとなる文字}
+%<en>\paragraph{Classification of characters}
+%<ja>\paragraph{和文文字扱いとなる文字}
+
+%<*en>
+Characters are classified according to \Param{jacharrange} parameter (see Section \ref{ssec-setrange}):
+%</en>
+%<*ja>
 \Pkg{listings} パッケージにおいて和文文字と扱われる
 (前に述べたKanji, Open,あるいは「閉じ括弧類」分類)か否かは,
-通常の\textbf{JAchar}/\textbf{Alchar}の範囲の設定(\ref{ssec-setrange}節)に従って行われる:
+通常の\textbf{JAchar}/\textbf{Alchar}の範囲の設定(\Param{jacharrange} パラメータ,\ref{ssec-setrange}節を参照)に従って行われる:
+%</ja>
 \begin{itemize}
-\item (U+0080以降の)\textbf{ALchar}は,すべてLetter扱いである.
-\item (U+0080以降の)\textbf{JAchar}については,以下の順序に従って文字種を決める:
+%<en>\item \textbf{ALchars} above U+0080 are Letter.
+%<ja>\item (U+0080以降の)\textbf{ALchar}は,すべてLetter扱いである.
+
+%<en>\item \textbf{JAchars} are classified in the order as follows:
+%<ja>\item (U+0080以降の)\textbf{JAchar}については,以下の順序に従って文字種を決める:
 \begin{enumerate}
-\item \Param{prebreakpenalty} が0以上の文字はOpen扱いである.
-\item \Param{postbreakpenalty} が0以上の文字はClose扱いである.
-\item 上の2条件のどちらにも当てはまらなかった文字は,Kanji扱いである.
+%<en>\item Characters whose \Param{prebreakpenalty} is greater than or equal to 0 are Open.
+%<ja>\item \Param{prebreakpenalty} が0以上の文字はOpen扱いである.
+
+%<en>\item Characters whose \Param{postbreakpenalty} is greater than or equal to 0 are Close.
+%<ja>\item \Param{postbreakpenalty} が0以上の文字はClose扱いである.
+
+%<en>\item Characters that don't satisfy the above two conditions are Kanji.
+%<ja>\item 上の2条件のどちらにも当てはまらなかった文字は,Kanji扱いである.
 \end{enumerate}
-なお,半角カナ(U+FF61--U+FF9F)以外の\textbf{JAchar}は欧文文字2文字分の幅をとるものとみなされる.
-半角カナは欧文文字1文字分の幅となる.
 \end{itemize}
 
-これらの文字種決定は,実際に \texttt{lstlisting} 環境などの内部で文字が出てくるたびに行われる.
+%<*en>
+The width of halfwidth kana (U+FF61--U+FF9F) is same as the width of \textbf{ALchar};
+the width of the other \textbf{JAchars} is double the width of \textbf{ALchar}.
+%</en>
+%<*ja>
+なお,半角カナ(U+FF61--U+FF9F)以外の\textbf{JAchar}は欧文文字2文字分の幅をとるものとみなされる.
+半角カナは欧文文字1文字分の幅となる.
 %</ja>
 
 %<*en>
-\section{Patch for the \Pkg{listings} package}
-\dots
+The classification process is executed every time a character appears in
+listing environments.
 %</en>
-
+%<*ja>
+これらの文字種決定は,実際に \texttt{lstlisting} 環境などの内部で文字が出てくるたびに行われる.
+%</ja>
 
 %<*ja>
 \section{和文の行長補正方法}
+\label{sec-adjspec}
 \texttt{luatexja-adjust.sty} で提供される優先順位付きの行長調整の詳細を述
 べる.大まかに述べると,次のようになる.
 \begin{itemize}
-\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行長に半端が出た場合,その半端分は\Param{xkanjiskip},\Param{kanjiskip},JFMグルーの全てで(優先順位なく)負担される.
-\item その後,\texttt{post\_linebreak\_filter} callbackによって,\textbf{段落中の各行ごとに},
-      行末文字の位置を調整したり,優先度付きの行長調整を実現するためにグルーの伸縮度を調整する.
-\texttt{luatexja-adjust.sty} の作用は,このcallbackを追加するだけである.
+\item 通常の\TeX の行分割方法に従って,段落を行分割する.この段階では,行
+      長に半端が出た場合,その半端分は\Param{xkanjiskip},
+      \Param{kanjiskip},JFMグルーの全てで(優先順位なく)負担される.
+\item その後,\texttt{post\_linebreak\_filter} callbackを使い,\textbf{段
+      落中の各行ごとに},行末文字の位置を調整したり,優先度付きの行長調整
+      を実現するためにグルーの伸縮度を調整する.
+\texttt{luatexja-adjust.sty} の作用は,このcallbackを追加するだけであり,
+      この章の残りではcallbackでの処理について解説する.
 \end{itemize}
 
-段落中の行中のグルーは,
+\paragraph{準備:合計伸縮量の計算}
+グルーの伸縮度(\texttt{plus} や \texttt{minus} で指定されている値)には,
+有限値の他に,\texttt{fi},\texttt{fil},\texttt{fill},\texttt{filll}と
+いう4つの無限大レベル(後ろの方ほど大きい)があり,行の調整に
+\texttt{fi} などの\textbf{無限大レベルの伸縮度が用いられている場合は,そ
+の行に対しての処理を中止}する.
+
+よって,以降,問題にしている行の行長調整は伸縮度が有限長のグルーを用いて
+行われているとして良い.まず,段落中の行中のグルーを
 \begin{itemize}
 \item 下のどれにも該当しないグルー
+\item JFMグルー(優先度別にまとめられる)
 \item 和欧文間空白(\Param{xkanjiskip})
-\item JFMグルー(JFM中で優先度を$-2$--$+2$の整数値で指定できるが,優先度別にまとめられる)
 \item 和文間空白(\Param{kanjiskip})
 \end{itemize}
-の$1+1+5+1=8$つに類別される,
+の$1+1+5+1=8$つに類別し,それぞれの種別ごとに許容されている伸縮度の合計を計算する.
+また,行長と自然長との差の絶対値を計算し,それを\textit{total}とおく.
 
 \subsection{行末文字の位置調整}
-まず,
+まず,行末が文字クラス$n$の\textbf{Jachar}であった場合,
+それを動かすことによって,\textbf{JAglue} が負担する調整量を少なくしようとする.
+この行末文字の左右の移動可能量は,JFM中にある文字クラス$n$の定義の
+\texttt{end\_stretch},~\texttt{end\_shrink}フィールドに全角単位の値として記述されている.
+
+例えば,行末文字が句点「。」であり,そこで用いられているJFM中に
+\begin{verbatim}
+  [2] = {
+    chars = { '。', ... }, width = 0.5, ...,
+    end_stretch = 0.5, end_shrink = 0.5,
+  }, 
+\end{verbatim}
+という指定があった場合,この行末の句点は
+\begin{itemize}
+\item 通常の\TeX の行分割処理で「半角以上の詰め」が行われていた場合,
+この分の行中の\textbf{JAglue}の負担を軽減するため,
+行末の句点を半角だけ右に移動する(ぶら下げ組を行う).
+\item 通常の\TeX の行分割処理で「半角以上の空き」が行われていた場合,
+逆に行末句点を半角左に移動させる(見た目的に全角取りとなる).
+\item 以上のどちらでもない場合,行末句点の位置調整は行わない.
+\end{itemize}
+となる.
+
+行末文字を移動した場合,その分だけ\textit{total}の値を引いておく.
+
+\subsection{グルーの調整}
+\textit{total}の分だけが,行中のグルーの伸縮度に応じて負担されることになる.
+……
 
 %</ja>
 
@@ -6115,36 +6398,98 @@ Victor Eijkhout,  \emph{\TeX\ by Topic, A \TeX nician's Reference}, Addison-Wesl
 \bibitem{listings} C.\ Heinz, B.\ Moses. The \textsf{Listings} Package.
 \bibitem{jlisting} Thor Watanabe. Listings\ -\ MyTeXpert. \newblock
 \url{http://mytexpert.sourceforge.jp/index.php?Listings}
-\bibitem{min10} 乙部厳己,「min10フォントについて」.
-\url{http://argent.shinshu-u.ac.jp/\~{\ }otobe/tex/files/min10.pdf}
+\bibitem{min10} 乙部厳己,min10フォントについて.
+\url{http://argent.shinshu-u.ac.jp/~otobe/tex/files/min10.pdf}
+\bibitem{jlreq}  W3C Japanese Layout Task Force~(ed), Requirements for Japanese Text Layout (W3C Working Group Note), 2011, 2012. \newblock
+\url{http://www.w3.org/TR/jlreq/}%
+%<ja> \\日本語訳の書籍版:W3C日本語組版タスクフォース(編),『W3C技術ノート 日本語組版処理の要件』,東京電機大学出版局,2012.
+\bibitem{x4051} 日本工業規格(Japanese Industrial Standard) JIS~X~4051,
+日本語文書の組版方法(Formatting rules for Japanese documents), 1993, 1995, 2004.
 \end{thebibliography}
 
 \newpage
 \appendix
 
-%<*ja>
-\section{\LuaTeX-jaにおけるJIS~X~0213非漢字のcatcode}
 
+%<en>\section{The category code of non-kanji characters defined in JIS~X~0213}
+%<ja>\section{\LuaTeX-jaにおけるJIS~X~0213非漢字のcatcode}
+
+%<*en>
+In these tables, the default catcode (\LuaTeX-ja) and kcatcode ((u)\pTeX) of non-kanji
+characters defined in JIS~X~0213 from row 1 to row 13 is summarized.
+Each character is printed as follows:
+%</en>
+%<*ja>
 ここでは,JIS~X~0213の非漢字部分(第1区〜第13区)のうち,
 どの文字が(u)\pTeX や\LuaTeX-jaで制御綴内に使用可能かを表にしてまとめる.
 各文字は
+%</ja>
 \begin{center}
 \tt\fboxsep=1pt\fbox{\hbox to \zw{\gt あ\hss}}\,\scriptsize LUP
 \end{center}
+%<*ja>
 のように表示しており,各文字は次の意味を持っている.
-この表の生成は,JIS X 0208の範囲内の文字については\verb+\jis+命令を使って行なっている.
+この表の生成は,JIS~X~0208の範囲内の文字については\verb+\jis+命令を使って行なっている.
+%</ja>
+%<*en>
+The tables are generated by using \verb+\jis+ command for characters included in
+JIS~X~0208.
+Each character in the tables means:
+%</en>
 \begin{itemize}
+%<*en>
+\item The background of a character regarded as \textbf{ALchar} in \LuaTeX-ja
+  is colored light blue.
+%</en>
+%<*ja>
 \item 背景が薄く青く塗られている文字は,
 \LuaTeX-ja の標準で\textbf{ALchar}として認識されている文字である.
+%</ja>
+
+%<*en>
+\item The first letter {\tt L} means that the character is available for
+  the name of a control sequence in \XeTeX{} and \LuaTeX-ja (its catcode is 11).
+%</en>
+%<*ja>
 \item 1文字目の {\tt L} は,\XeTeX や\LuaTeX-jaにおいてこの文字が制御綴内に
 使用可能(catcodeが11)であることを表している.
+%</ja>
+
+%<*en>
+\item The second letter {\tt U} means that the character is available for
+  the name of a control sequence in \upTeX{} (its kcatcode is 16 or 17).
+  \upTeX{} regards these characters as Japanese character.
+%</en>
+%<*ja>
 \item 2文字目の{\tt U} は,\upTeX においてこの文字が制御綴内に使用可能(kcatcodeは16,~17)であることを
 表している.この範囲内では,\upTeX は標準で全文字を和文文字として扱うようである.
+%</ja>
+
+%<*en>
+\item The third letter {\tt P} means that the character is available for
+  the name of a control sequence in \pTeX{} (its kcatcode is 16 or 17).
+%</en>
+%<*ja>
 \item 3文字目の {\tt P} は,\pTeX においてこの文字が制御綴内に使用可能(kcatcodeは16,~17)であることを
 表している.
+%</ja>
+
+%<*en>
+\item If the third letter is {\tt -} (or the character is printed in red),
+  the character is not included in JIS~X~0208.
+  Therefore, you can consider the character is not available in \pTeX.
+%</en>
+%<*ja>
 \item 3文字目が{\tt -}となっているもの(本体の文字も赤身がかっている)は,
-JIS~X~0208にないため使用不能と考えて良いものである.
+JIS~X~0208にないため\pTeX では使用不能と考えて良いものである.
+%</ja>
+
+%<*en>
+\item The kana for bidakuon in row 4 and 5 are omitted.
+%</en>
+%<*ja>
 \item 第4区と第5区にある,鼻濁音の仮名については省略した.
+%</ja>
 \end{itemize}
 
 
@@ -6470,7 +6815,9 @@ JIS~X~0208にないため使用不能と考えて良いものである.
 }
 
 \def\test#1{{%
-\subsection*{第#1区}\tt\small\fboxsep=1pt\centering\tabcolsep=0.25\zw
+%<en>\subsection*{Row #1}
+%<ja>\subsection*{第#1区}
+\tt\small\fboxsep=1pt\centering\tabcolsep=0.25\zw
 \begin{tabular}{ccccccccccccccccc}\toprule&"0&"1&"2&"3&"4&"5&"6&"7&"8&"9&"A&"B&"C&"D&"E&"F\\
 \out{#1}{2}\out{#1}{3}\out{#1}{4}\out{#1}{5}\out{#1}{6}\out{#1}{7}\bottomrule
 \end{tabular}\par}\medskip}
@@ -6478,8 +6825,6 @@ JIS~X~0208にないため使用不能と考えて良いものである.
 \test{1}\test{2}\test{3}\test{4}\test{5}\test{6}\test{7}\test{8}
 \test{9}\test{10}\test{11}\test{12}\test{13}
 
-%</ja>
-
 
 \section{Package versions used in this document}
 This document was typeset using the following packages: