OSDN Git Service

Merge branch 'kmaeda-ltjclasses' into kitagawa_test
[luatex-ja/luatexja.git] / doc / manual.dtx
index c1de47b..da23ecd 100644 (file)
@@ -2,30 +2,40 @@
 
 %<*en>
 \documentclass[a4paper,titlepage]{article}
-\usepackage[margin=20mm]{geometry}
+\usepackage[margin=20mm,footskip=5mm]{geometry}
 %</en>
 %<*ja>
 \documentclass[a4paper,titlepage]{bxjsarticle}
-\setpagelayout*{margin=20mm}
+\setpagelayout*{margin=20mm,footskip=5mm}
 \def\headfont{\normalfont\bfseries}
 % \def\headfont{\sffamily\gtfamily} is needed in ordinal documents
+% This document cannot typeset in ltjsclasses (conflict with showexpl?)
 %</ja>
 
-\usepackage{amsmath,amssymb,xcolor,pict2e}
+\usepackage{amsmath,amssymb,xcolor,pict2e,multienum,amsthm,float}
 \usepackage{booktabs,listings,lltjlisting,showexpl,multicol}
 \usepackage{luatexja-otf}
-\usepackage[unicode=true]{hyperref}
+\usepackage[unicode=false]{hyperref}
 \usepackage[all]{xy}
 \SelectTips{cm}{}
 
 \DeclareRobustCommand\eTeX{\ensuremath{\varepsilon}-\kern-.125em\TeX}
 \DeclareRobustCommand\LuaTeX{Lua\TeX}
+\DeclareRobustCommand\pdfTeX{pdf\TeX}
 \DeclareRobustCommand\pTeX{p\kern-.05em\TeX}
 \DeclareRobustCommand\upTeX{p\kern-.05em\TeX}
 \DeclareRobustCommand\pLaTeX{p\kern-.05em\LaTeX}
 \DeclareRobustCommand\pLaTeXe{p\kern-.05em\LaTeXe}
 \DeclareRobustCommand\epTeX{\ensuremath{\varepsilon}-\kern-.125em\pTeX}
 
+\theoremstyle{definition}
+\newtheorem{defn}{Definition}
+
+\newenvironment{cslist}{%
+  \leftskip2em\parindent=0pt\def\makelabel##1{{\tt\char92##1}}
+  \def\{{\char`\{}\def\}{\char`\}}
+  \def\item[##1]{\par\smallskip\par\hskip-\leftskip\makelabel{##1}\par}
+}{}
 
 \makeatletter
 \long\def\@makecaption#1#2{%
@@ -88,6 +98,7 @@ Japanese documents when using \LuaTeX.
 %</ja>
 
 \subsection{Backgrounds}
+%<*en>
 Traditionally, ASCII \pTeX, an extension of \TeX, and its derivatives
 are used to typeset Japanese documents in \TeX. \pTeX\ is an engine
 extension of \TeX: so it can produce high-quality Japanese documents
@@ -106,13 +117,50 @@ 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>
+従来,「\TeX を用いて日本語組版を行う」といったとき,エンジンとしては
+ASCII \pTeX やそれの拡張物が用いられることが一般的であった.\pTeX は\TeX
+のエンジン拡張であり,(少々仕様上不便な点はあるものの)商業印刷の分野に
+も用いられるほどの高品質な日本語組版を可能としている.だが,それは弱点に
+もなってしまった:\pTeX という(組版的に)満足なものがあったため,海外で
+行われている数々の\TeX の拡張──例えば\eTeX や\pdfTeX ──や,TrueType,
+OpenType, Unicodeといった計算機で日本語を扱う際の状況の変化に追従すること
+を怠ってしまったのだ.
+
+ここ数年,若干状況は改善されてきた.現在手に入る大半の\pTeX バイナリでは
+外部UTF-8入力が利用可能となり,さらにUnicode化を推進し,\pTeX の内部処理
+までUnicode化した\upTeX も開発されている.また,\pTeX に\eTeX 拡張をマー
+ジした\epTeX も登場し,\TeX\ Live\ 2011では\pLaTeX が\epTeX の上で動作す
+るようになった.だが,\pdfTeX 拡張(pdf直接出力やmicro-typesetting)を
+\pTeX に対応させようという動きはなく,海外とのgapは未だにあるのが現状であ
+る.
+
+しかし,\LuaTeX の登場で,状況は大きく変わることになった.Luaコードで
+`callback'を書くことにより,\LuaTeX の内部処理に割り込みをかけることが可
+能となった.これは,エンジン拡張という真似をしなくても,Luaコードとそれに
+関する\TeX マクロを書けば,エンジン拡張とほぼ同程度のことができるようになっ
+たということを意味する.\LuaTeX-jaは,このアプローチによってLuaコード・
+\TeX マクロによって日本語組版を\LuaTeX の上で実現させようという目的で開発
+が始まったパッケージである.
+%</ja>
 
 \subsection{Major Changes from \pTeX}
+%<*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
 specifications/behaviors of \pTeX\ were not adopted}.
+%</en>
+
+%<*ja>
+\LuaTeX-jaは,\pTeX に多大な影響を受けている.初期の開発目標は,\pTeX の機
+能をLuaコードにより実装することであった.しかし,開発が進むにつれ,\pTeX
+の完全な移植は不可能であり,また\pTeX における実装がいささか不可解になっ
+ているような状況も発見された.そのため,\textbf{\LuaTeX-ja は,もはや
+\pTeX の完全な移植は目標とはしない.\pTeX における不自然な仕様・挙動があ
+れば,そこは積極的に改める.}
+%</ja>
 
 The followings are major changes from \pTeX:
 \begin{itemize}
@@ -177,18 +225,23 @@ We say `alphabetic fonts' for fonts used in \textbf{ALchar}, and `Japanese fonts
 This project is hosted by SourceForge.JP.
 
 \paragraph{Members}\ 
-% \begin{multicols}{2}
-% \begin{itemize}
-% \item Hironori KITAGAWA
-% \item Kazuki MAEDA
-% \item Takayuki YATO
-% \item Yusuke KUROKI
-% \item Noriyuki ABE
-% \item Munehiro YAMAMOTO
-% \item Tomoaki HONDA
-% \par\ 
-% \end{itemize}
-% \end{multicols}
+%<*en>
+\begin{multienumerate}
+\def\labelenumi{$\bullet$}
+\mitemxxx{Hironori KITAGAWA}{Kazuki MAEDA}{Takayuki YATO}
+\mitemxxx{Yusuke KUROKI}{Noriyuki ABE}{Munehiro YAMAMOTO}
+\mitemx{Tomoaki HONDA}
+\end{multienumerate}
+%</en>
+%<*ja>
+\begin{multienumerate}
+\def\labelenumi{$\bullet$}
+\mitemxxx{Hironori KITAGAWA}{Kazuki MAEDA}{Takayuki YATO}
+\mitemxxx{Yusuke KUROKI}{Noriyuki ABE}{Munehiro YAMAMOTO}
+\mitemx{Tomoaki HONDA}
+\end{multienumerate}
+%</ja>
+
 
 % \paragraph{Acknowledgments} -- 挿入するならここ
 
@@ -332,7 +385,7 @@ supports some of functions in \texttt{OTF} package.
 %lltjlisting.sty要修正?:↑「森」の直後で改行.
 
 
-\subsection{Changing Fonts}
+\subsection{Changing Fonts}\label{ssub-chgfnt}
 \paragraph{Remark: Japanese Characters in Math Mode}
 Since \pTeX\ supports Japanese characters in math mode, there are
 sources like the following:
@@ -382,18 +435,31 @@ of \pLaTeXe\ (in {\tt plfonts.dtx}).
       \verb+\fontshape+ and \verb+\selectfont+ can be used to change
       attributes of Japanese fonts. 
 \begin{center}
-\begin{tabular}{ccccc}
+\begin{tabular}{cccccc}
 \toprule
-&\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}\\\midrule
+&\textbf{encoding}&\textbf{family}&\textbf{series}&\textbf{shape}&\textbf{selection}\\\midrule
 alphabetic fonts
-&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+\\
+&\verb+\romanencoding+&\verb+\romanfamily+&\verb+\romanseries+&\verb+\romanshape+
+&\verb+\useroman+\\
 Japanese fonts
-&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+\\
-both&---&--&\verb+\fontseries+&\verb+\fontshape+\\
-auto select&\verb+\fontencoding+&\verb+\fontfamily+&---&---\\
+&\verb+\kanjiencoding+&\verb+\kanjifamily+&\verb+\kanjiseries+&\verb+\kanjishape+
+&\verb+\usekanji+\\
+both&---&--&\verb+\fontseries+&\verb+\fontshape+&---\\
+auto select&\verb+\fontencoding+&\verb+\fontfamily+&---&---&\verb+\usefont+\\
 \bottomrule
 \end{tabular}
 \end{center}
+
+%<*ja>
+ここで,\verb+\fontencoding{<encoding>}+は,引数により和文側か欧文側かの
+      どちらかが切り替わる.例えば,次の入力で最初の\verb+\fontencoding+
+      の呼び出しは和文フォントのエンコーディングを\texttt{JT3}に変更し,
+      2回目の呼びだしでは欧文フォント側を\texttt{T1}へと変更する.
+\begin{verbatim}
+\fontencoding{JY3}\fontencoding{T1}
+\end{verbatim}
+%</ja>
+
 \item For defining a Japanese font family, use \verb+\DeclareKanjiFamily+
       instead of \verb+\DeclareFontFamily+.
 \end{itemize}
@@ -464,8 +530,7 @@ setting of \LuaTeX-ja):
 \begin{verbatim}
 \ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, +8}}
 \end{verbatim}
-
-
+The argument to {\sf jacharrange} parameter is a list of integer. Negative interger $-n$ in the list means that `the character range~$n$ is ...'.
 
 \paragraph{Default Setting}
 Lua\TeX-ja predefines eight character ranges for convinience. They are
@@ -522,30 +587,30 @@ This range consist of the following Unicode ranges, \emph{except characters in t
 \end{multicols}
 \item[Range~3${}^{\text{J}}$] Punctuations and Miscellaneous symbols. The block list is
           indicated in Table~\ref{table-rng3}.
-\begin{table}[p]
+\begin{table}[!tb]
 \caption{Unicode blocks in predefined character range~3.}\label{table-rng3}
 \catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"2000--"206F&General Punctuation\\
+\begin{center}\small
+\begin{tabular}{llll}
+"2000--"206F&General Punctuation&
 "2070--"209F&Superscripts and Subscripts\\
-"20A0--"20CF&Currency Symbols\\
-"20D0--"20FF&Combining Diacritical Marks for Symbols\\
-"2100--"214F&Letterlike Symbols\\
+"20A0--"20CF&Currency Symbols&
+"20D0--"20FF&Comb.\ Diacritical Marks for Symbols\\
+"2100--"214F&Letterlike Symbols&
 "2150--"218F&Number Forms\\
-"2190--"21FF&Arrows\\
+"2190--"21FF&Arrows&
 "2200--"22FF&Mathematical Operators\\
-"2300--"23FF&Miscellaneous Technical\\
+"2300--"23FF&Miscellaneous Technical&
 "2400--"243F&Control Pictures\\
-"2500--"257F&Box Drawing\\
+"2500--"257F&Box Drawing&
 "2580--"259F&Block Elements\\
-"25A0--"25FF&Geometric Shapes\\
+"25A0--"25FF&Geometric Shapes&
 "2600--"26FF&Miscellaneous Symbols\\
-"2700--"27BF&Dingbats\\
+"2700--"27BF&Dingbats&
 "2900--"297F&Supplemental Arrows-B\\
-"2980--"29FF&Miscellaneous Mathematical Symbols-B\\
+"2980--"29FF&Misc.\ Mathematical Symbols-B&
 "2B00--"2BFF&Miscellaneous Symbols and Arrows\\
-"E000--"F8FF&Private Use Area\\
+"E000--"F8FF&Private Use Area&
 \end{tabular}
 \end{center}
 \end{table}
@@ -561,48 +626,48 @@ This range consist of the following Unicode ranges, \emph{except characters in t
 \end{lstlisting}
 \item[Range~5${}^{\text{A}}$] Surrogates and Supplementary Private Use Areas.
 \item[Range~6${}^{\text{J}}$] Characters used in Japanese. The block list is indicated in Table~\ref{table-rng6}.
-\begin{table}[p]
+\begin{table}[!tb]
 \caption{Unicode blocks in predefined character range~6.}\label{table-rng6}
 \catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"2460--"24FF&Enclosed Alphanumerics\\
+\begin{center}\small
+\begin{tabular}{llll}
+"2460--"24FF&Enclosed Alphanumerics&
 "2E80--"2EFF&CJK Radicals Supplement\\
-"3000--"303F&CJK Symbols and Punctuation\\
+"3000--"303F&CJK Symbols and Punctuation&
 "3040--"309F&Hiragana\\
-"30A0--"30FF&Katakana\\
+"30A0--"30FF&Katakana&
 "3190--"319F&Kanbun\\
-"31F0--"31FF&Katakana Phonetic Extensions\\
+"31F0--"31FF&Katakana Phonetic Extensions&
 "3200--"32FF&Enclosed CJK Letters and Months\\
-"3300--"33FF&CJK Compatibility\\
+"3300--"33FF&CJK Compatibility&
 "3400--"4DBF&CJK Unified Ideographs Extension A\\
-"4E00--"9FFF&CJK Unified Ideographs\\
+"4E00--"9FFF&CJK Unified Ideographs&
 "F900--"FAFF&CJK Compatibility Ideographs\\
-"FE10--"FE1F&Vertical Forms\\
+"FE10--"FE1F&Vertical Forms&
 "FE30--"FE4F&CJK Compatibility Forms\\
-"FE50--"FE6F&Small Form Variants\\
+"FE50--"FE6F&Small Form Variants&
 "{20}000--"{2F}FFF&(Supplementary Ideographic Plane)
 \end{tabular}
 \end{center}
 \end{table}
 \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}.
-\begin{table}[p]
+\begin{table}[!tb]
 \caption{Unicode blocks in predefined character range~7.}\label{table-rng7}
 \catcode`\"=13\def"#1#2#3#4{{\tt U+#1#2#3#4}}%"
-\begin{center}
-\begin{tabular}{ll}
-"1100--"11FF&Hangul Jamo\\
+\begin{center}\small
+\begin{tabular}{llll}
+"1100--"11FF&Hangul Jamo&
 "2F00--"2FDF&Kangxi Radicals\\
-"2FF0--"2FFF&Ideographic Description Characters\\
+"2FF0--"2FFF&Ideographic Description Characters&
 "3100--"312F&Bopomofo\\
-"3130--"318F&Hangul Compatibility Jamo\\
+"3130--"318F&Hangul Compatibility Jamo&
 "31A0--"31BF&Bopomofo Extended\\
-"31C0--"31EF&CJK Strokes\\
+"31C0--"31EF&CJK Strokes&
 "A000--"A48F&Yi Syllables\\
-"A490--"A4CF&Yi Radicals\\
+"A490--"A4CF&Yi Radicals&
 "A830--"A83F&Common Indic Number Forms\\
-"AC00--"D7AF&Hangul Syllables\\
+"AC00--"D7AF&Hangul Syllables&
 "D7B0--"D7FF&Hangul Jamo Extended-B
 \end{tabular}
 \end{center}
@@ -776,15 +841,40 @@ The followings are JFMs shipped with Lua\TeX-ja:
 \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
-          showed below:
-
-何かいい例.単純に「min10にはバグあり」ではなく,プロポーショナルな側面も見せたいよね
-(乙部さんのmin10.pdfの例を使う?)
+          shown in Table~\ref{tab-difjfm}.
 \end{description}
 
-\item[jfmvar=<string>] ...
+\item[jfmvar=<string>] Sometimes there is a need that 
 \end{list}
 
+\begin{table}[t]
+\caption{Differences between JFMs shipped with \LuaTeX-ja}
+\label{tab-difjfm}
+\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
+Example~1&\r{ujis}&\r{jis}&\r{min}\\
+Example~2&\s{ujis}&\s{jis}&\s{min}\\
+Bounding Box&\t{ujis}&\t{jis}&\t{min}\\
+\bottomrule
+\end{tabular}
+\end{center}
+\end{table}
 
 \paragraph{Note: kern feature}\label{para-kern}
 Some fonts have information for inter-glyph spacing. However, this
@@ -859,10 +949,8 @@ This field is a list of characters which are in this character
             than 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). 
-
-In addition to those `real' characters, the following `imaginary
-            characters' can be specified in the list:
+            (as a string of length~1). Moreover, there are `imaginary
+            characters' which specified in the list. We will describe these later.
 
 \item[width=<length>, height=<length>, depth=<length>, italic=<length>]\ (required)
 
@@ -885,7 +973,7 @@ 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'. 
-\begin{figure}[tb]
+\begin{figure}[!tb]
 \begin{minipage}{0.4\textwidth}%
 \begin{center}\unitlength=10pt\small
 \begin{picture}(15,12)(-1,-4)
@@ -961,6 +1049,78 @@ the `real' glyph is centered horizontally (the green rectangle).
 \item[glue={\{[$j$]=\{<width>, <stretch>, <shrink>\}, ...\}}]
 \end{list}
 
+%<*en>
+\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
+\item['lineend'] An ending of a line. 
+\item['diffmet'] Used at a boundary between two \textbf{JAchar}s whose JFM or size is different.
+\item['boxbdd'] The beginning/ending of a horizontal box, and the beginging of a noindented paragraph.
+\item['parbdd'] The beginning of an (indented) paragraph.
+\item['jcharbdd'] A boundary between \textbf{JAchar} and anything else
+            (such as \textbf{ALchar}, kern, glue, ...).
+\item[$-1$] The left/right boundary of an inline math formula.
+\end{list}
+%</en>
+
+%<*ja>
+上で説明した通り,\texttt{chars}フィールド中にはいくつかの「特殊文字」も
+指定可能である.これらは,大半が\pTeX のJFMグルーの挿入処理ではみな「文字
+クラス0の文字」として扱われていた文字であり,その結果として\pTeX より細か
+い組版調整ができるようになっている.以下のその一覧を述べる:
+\begin{list}{}{\def\makelabel{\ttfamily}\def\{{\char`\{}\def\}{\char`\}}}
+\item['lineend'] 行の終端を表す.
+\item['diffmet'] 
+
+\item['boxbdd'] hboxの先頭と末尾,及びインデントされていない
+            (\verb+\noindent+で開始された)段落の先頭を表す.
+\item['parbdd'] 通常の(\verb+\noindent+で開始されていない)段落の先頭.
+\item['jcharbdd'] 和文文字と「その他のもの」(欧文文字,glue,kern等)との境界.
+\item[$-1$] 行中数式と地の文との境界.
+\end{list}
+
+\paragraph{\pTeX 用和文フォントメトリックの移植}
+以下に,\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'}については,それのみで一つの文字クラスを形成し,その
+      文字クラスに関してはglue/kernの設定はしない.
+
+これは,\pTeX では,
+      hboxの先頭・末尾とインデントされていない(\verb+\noindent+で開始さ
+      れた)段落の先頭にはJFMグルーは入らないという仕様を実現させるためである.
+\item \pTeX の組版を再現させようというのが目的であれば以上の注意を守れば十分である.
+
+ところで,\pTeX では通常の段落の先頭にJFMグルーが残るという仕様があるので,
+      段落先頭の開き括弧は全角二分下がりになる.全角下がりを実現させるに
+      は,段落の最初に手動で\verb+\inhibitglue+を追加するか,あるいは
+      \verb+\everypar+のhackを行い,それを自動化させるしかなかった.
+
+一方,\LuaTeX-jaでは,\texttt{'parbdd'}によって,それがJFM側で調整できるよ
+うになった.例えば,\LuaTeX-ja同梱のJFMのように,\texttt{'boxbdd'}と同じ文字クラスに
+\texttt{'parbdd'}を入れれば全角下がりとなる.
+
+\begin{LTXexample}
+\jfont\g=psft:Ryumin-Light:jfm=test \g
+\parindent1\zw\noindent{}◆◆◆◆◆
+\par{}「◆◆←二分下がり
+\par{}【◆◆←全角下がり
+\par{}〔◆◆←全角二分下がり
+\end{LTXexample}
+\end{itemize}
+
+%</ja>
+
 \subsection{Math Font Family}
 \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
@@ -970,11 +1130,13 @@ an external package is needed to support this in plain \TeX\ and
 
 \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.
+font families. There is no relation between the value of
+\verb+\fam+ and that of \verb+\jfam+; with appropreate settings, 
+you can set both \verb+\fam+ and \verb+\jfam+ to~the same value.
 
-\begin{table}[tb]
-\label{tab-math}
+\begin{table}[!tb]
 \caption{Primitives for Japanese math fonts.}
+\label{tab-math}
 \begin{center}\def\{{\char`\{}\def\}{\char`\}}
 \begin{tabular}{lll}
 \toprule
@@ -989,6 +1151,82 @@ scriptscript size&\tt\textsf{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}&\tt\ve
 \end{center}
 \end{table}
 
+\subsection{Callbacks}
+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
+\begin{list}{}%
+{\def\makelabel#1{\bfseries#1}}
+\item[\texttt{luatexja.load\_jfm} callback]
+With this callback you can overwrite JFMs.
+
+\begin{verbatim}
+function (<table> jfm_info, <string> jfm_name)
+  return <table> new_jfm_info
+end
+\end{verbatim}
+
+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.
+
+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.
+
+\item[\texttt{luatexja.define\_font} callback]
+This callback and the next callback form a pair, and you can assign letters which don't have
+            fixed codepoints in Unicode to non-zero character classes.
+This \texttt{luatexja.define\_font} callback is called just when new Japanese font is loaded.
+\begin{verbatim}
+function (<table> jfont_info, <number> font_number)
+  return <table> new_jfont_info
+end
+\end{verbatim}
+
+You may assume that \verb+jfont_info+ has the following fields:
+\begin{description}
+\item[\tt jfm] The index number of JFM.
+\item[\tt size] Font size in a scaled point (${}=2^{-16}\,\textrm{pt}$).
+\item[\tt var] The value specified in \texttt{jfmvar=...} at a call of \verb+\jfont+.
+\end{description}
+
+The returned table \verb+new_jfont_info+ also should include these three fields. 
+The \verb+font_number+ is a font number. 
+
+A good example of this and the next callbacks is \texttt{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[\texttt{luatexja.find\_char\_class} callback]
+This callback is called just when \LuaTeX-ja inready to determine which
+            character class a character \verb+chr_code+ belongs.
+A function used in this callback should be in the following form:
+\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}
+
+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.
+
+This callback doesn't replace any code of \LuaTeX-ja.
+
+
+
+\end{list}
+
 
 
 \section{Parameters}
@@ -1026,7 +1264,9 @@ character other than space~`{\tt\char32}'~(U+0020) has the category code
 12~(other), while the space has 10~(space).
 
 \subsection{List of Parameters}
-In the following list of parameters, [\verb+\cs+] indicates the counterpart in \pTeX, and each symbol has the following meaning:
+The following is the list of parameters which can be specificated by the
+\verb+\ltjsetparameter+ command. [\verb+\cs+] indicates the counterpart
+in \pTeX, and symbols beside each parameter has the following meaning:
 \begin{itemize}
 \item No mark: values at the end of the paragraph or the hbox are
       adopted in the whole paragraph/hbox.
@@ -1049,8 +1289,38 @@ At the present version, the lowermost bit of <natural number> indicates
             (see the description of \textsf{jcharwidowpenalty} above).
 
 
-\item[\textsf{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]
+\item[\textsf{prebreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\prebreakpenalty+]\ 
+%<*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}
+%</ja>
+
 \item[\textsf{postbreakpenalty}\,=\{<chr\_code>,<penalty>\}] [\verb+\postbreakpenalty+]
+%<*ja>
+文字コード<chr\_code>の\textbf{JAchar}が行末にくることを抑止するために,
+            この文字の後に挿入/追加されるペナルティの量を指定する.
+
+\pTeX では,\verb+\prebreakpenalty+, \verb+\postbreakpenalty+において,
+\begin{itemize}
+\item 一つの文字に対して,pre, postどちらか一つしか指定することができなかっ
+      た(後から指定した方で上書きされる).
+\item pre, post合わせて256文字分の情報を格納することしかできなかった.
+\end{itemize}
+という制限があったが,\LuaTeX-ja ではこれらの制限は解消されている.
+%</ja>
+
 \item[\textsf{jatextfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\textfont+ in \TeX]
 \item[\textsf{jascriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptfont+ in \TeX]
 \item[\textsf{jascriptscriptfont}\,=\{<jfam>,<jfont\_cs>\}] [\verb+\scriptscriptfont+ in \TeX]
@@ -1071,13 +1341,18 @@ This is the default value.
 
 \item[\textsf{alxspmode}\,=\{<chr\_code>,<mode>\}] [\verb+\xspcode+]
 
-Setting whether inserting  \textsf{xkanjiskip} is allowed before/after a \textbf{ALchar} whose character code is <chr\_code>.
+Setting whether inserting \textsf{xkanjiskip} is allowed before/after a
+            \textbf{ALchar} whose character code is <chr\_code>.
 The followings are allowed for <mode>:
 \begin{description}
-\item[0, \texttt{inhibit}] Insertion of \textsf{xkanjiskip} is inhibited before the charater, nor after the charater.
-\item[1, \texttt{preonly}] Insertion of \textsf{xkanjiskip} is allowed before the charater, but not after.
-\item[2, \texttt{postonly}] Insertion of \textsf{xkanjiskip} is allowed after the charater, but not before.
-\item[3, \texttt{allow}] Insertion of \textsf{xkanjiskip} is allowed before the charater and after the charater.
+\item[0, \texttt{inhibit}] Insertion of \textsf{xkanjiskip} is inhibited
+          before the charater, nor after the charater.
+\item[1, \texttt{preonly}] Insertion of \textsf{xkanjiskip} is allowed
+          before the charater, but not after.
+\item[2, \texttt{postonly}] Insertion of \textsf{xkanjiskip} is allowed
+          after the charater, but not before.
+\item[3, \texttt{allow}] Insertion of \textsf{xkanjiskip} is allowed both
+          before the charater and after the charater.
 This is the default value.
 \end{description}
 Note that parameters \textsf{jaxspmode} and \textsf{alxspmode} use a common table.
@@ -1104,7 +1379,8 @@ The allowed arguments are the followings:
 
 
 \section{Other Primitives}
-\subsection{Compatibility with \pTeX}
+\subsection{Primitives for Compatibility}
+The following primtives are implemented for compatibility with \pTeX:
 \begin{list}{}{\def\makelabel{\ttfamily\char92 }}
 \item[kuten]
 \item[jis]
@@ -1113,10 +1389,95 @@ The allowed arguments are the followings:
 \item[ucs]
 \item[kansuji]
 \end{list}
+\subsection{{\tt\char92 inhibitglue}}
+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 `ウ'.
+
+\begin{LTXexample}
+\jfont\g=psft:Ryumin-Light:jfm=test \g
+あウあ\inhibitglue{}ウ\inhibitglue\par
+あ\par\inhibitglue{}あ
+\par\inhibitglue\hrule{}あoff\inhibitglue ice
+\end{LTXexample}
+
+With the help of this example, we remark the specification of \verb+\inhibitglue+:
+\begin{itemize}
+\item The call of \verb+\inhibitglue+ in the (internal) vertical mode is
+      effective at the beginning of the next paragraph. This is realized
+      by hacking \verb+\everypar+.
+\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 line~4 of above example.
+\item The call of \verb+\inhibitglue+ in math mode is just ignored.
+\end{itemize}
 
 \section{Control Sequences for \LaTeXe}
 \subsection{Patch for NFSS2}
-As described in Subsection~\ref{ssec-ltx}, \LuaTeX-ja simply adopted \texttt{plfonts.dtx} in \pLaTeXe\ for the Japanese patch for NFSS2. 
+As described in Subsection~\ref{ssec-ltx}, \LuaTeX-ja simply adopted
+\texttt{plfonts.dtx} in \pLaTeXe\ for the Japanese patch for NFSS2.
+For an convinience, we will describe
+commands which are not described in Subsection~\ref{ssub-chgfnt}.
+
+\begin{cslist}%
+\item[DeclareYokoKanjiEncoding\{<encoding>\}\{<text-settings>\}\{<math-settings>\}]
+In NFSS2 under \LuaTeX-ja, distinction between alphabetic font families
+            and Japanese font families is only made by its
+            encoding. 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).
+
+\item[DeclareKanjiEncodingDefaults\{<text-settings>\}\{<math-settings>\}]
+\item[DeclareKanjiSubstitution\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}]
+\item[DeclareErrorKanjiFont\{<encoding>\}\{<family>\}\{<series>\}\{<shape>\}\{<size>\}]
+
+The above 3~commands are just the counterparts for \verb+DeclareFontEncodingDefaults+ and~others.
+
+\item[reDeclareMathAlphabet\{<unified-cmd>\}\{<al-cmd>\}\{<ja-cmd>\}]
+和文・欧文の数式用フォントファミリを一度に変更する命令を作成する.
+具体的には,欧文数式用フォントファミリ変更の命令<al-cmd>と,和文数式用フォ
+            ントファミリ変更の命令<ja-cmd>の2つを同時に行う命令として
+            <unified-cmd>を(再)定義する.実際の使用では<unified-cmd>と
+            <al-cmd>に同じものを指定する,すなわち,<al-cmd>に和文側も変
+            更させるようにするのが一般的と思われる.
+
+本コマンドの使用については,\pLaTeX 配布中の\texttt{plfonts.dtx}に詳しく
+            注意点が述べられているので,そちらを参照されたい.
+
+\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. 
+%</en>
+%<*ja>
+いわゆる「従属欧文」を設定するための命令である.前半の4引数で表される和文フォントファミリに対して,
+そのフォントに対応する「従属欧文」フォントファミリを後半の4引数により与える.
+%</ja>
+\item[SetRelationFont]
+This command is almost same as \verb+\DeclareRelationFont+, except that this command does a local 
+assignment, where \verb+\DeclareRelationFont+ does a global assignment.
+\item[userelfont]
+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.
+
+\item[adjustbaseline]
+...
+\end{cslist}
+
+As closing this subsection, we shall introduce an example of
+\verb+SetRelationFont+ and \verb+\userelfont+:
+\begin{LTXexample}
+\gtfamily{}あいうabc
+\SetRelationFont{JY3}{gt}{m}{n}{OT1}{pag}{m}{n}
+\userelfont\selectfont{}あいうabc
+\end{LTXexample}
+
 
 \subsection{Cropmark/`tombow'}
 
@@ -1182,23 +1543,22 @@ There is also a unit called `歯' which equals to $0.25\,\textrm{mm}$ and
                        fonts in scaled point ($2^{-16}\,\textrm{pt}$).
 \attr{ltj@autospc} Whether the auto insertion of \textsf{kanjiskip} is allowed at the node.
 \attr{ltj@autoxspc} Whether the auto insertion of \textsf{xkanjiskip} is allowed at the node.
-\attr{ltj@icflag} For distinguishing `kinds' of the node. To this
-                       attribute, one of the following value is
-                       assigned:
+\attr{ltj@icflag} An attribute for distinguishing `kinds' of a node. One of the following value is
+                       assigned to this attribute:
 \begin{description}
-\item[ITALIC (1)] Glues from an itaric correction
+\item[\textit{italic} (1)] Glues from an itaric correction
           (\verb+\/+). This distinction of origins of glues 
           (from explicit \verb+\kern+, or from \verb+\/+)
           is needed in the insertion process of \textsf{xkanjiskip}.
-\item[PACKED (2)] 
-\item[KINSOKU (3)] Penalties inserted for the word-wrapping  process of Japanese characters (\emph{kinsoku}).
-\item[FROM\_JFM (4)] Glues/kerns from JFM.
-\item[LINE\_END (5)] Kerns for ...
-\item[KANJI\_SKIP (6)] Glues for \textsf{kanjiskip}.
-\item[XKANJI\_SKIP (7)] Glues for \textsf{xkanjiskip}.
-\item[PROCESSED (8)] Nodes which is already processed by ...
-\item[IC\_PROCESSED (9)] Glues from an itaric correction, but also already processed.
-\item[BOXBDD (15)] Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
+\item[\textit{packed} (2)] 
+\item[\textit{kinsoku} (3)] Penalties inserted for the word-wrapping  process of Japanese characters (\emph{kinsoku}).
+\item[\textit{from\_jfm} (4)] Glues/kerns from JFM.
+\item[\textit{line\_end} (5)] Kerns for ...
+\item[\textit{kanji\_skip} (6)] Glues for \textsf{kanjiskip}.
+\item[\textit{xkanji\_skip} (7)] Glues for \textsf{xkanjiskip}.
+\item[\textit{processed} (8)] Nodes which is already processed by ...
+\item[\textit{ic\_processed} (9)] Glues from an itaric correction, but also already processed.
+\item[\textit{boxbdd} (15)] Glues/kerns that inserted just the beginning or the ending of an hbox or a paragraph.
 \end{description}
 \attr{ltj@kcat$i$} 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.
@@ -1209,8 +1569,7 @@ typesetting. All those nodes store a natural number (hence the node's
 \texttt{type} is 100).
 \begin{description}
 \item[30111] Nodes for indicating that \verb+\inhibitglue+ is
-          specified. The \texttt{value} field of these nodes is not
-          used.
+          specified. The \texttt{value} field of these nodes doesn't matter.
 \item[30112] Nodes for \LuaTeX-ja's stack system (see the next
           subsection). The \texttt{value} field of these nodes is
           current group.
@@ -1220,6 +1579,7 @@ typesetting. All those nodes store a natural number (hence the node's
           \verb+user_id+ is converted to a `glyph\_node' \emph{after}
           the callback process of luaotfload.
 \end{description}
+These whatsits will be removed during the process of inserting \textbf{JAglue}s.
 
 \subsection{Stack System of \LuaTeX-ja}\label{ssec-stack}
 \paragraph{Background}
@@ -1307,8 +1667,7 @@ This problem is resolved by using
 
 \section{Linebreak after Japanese Character}\label{sec-lbreak}
 \subsection{Reference: Behavior in \pTeX}
-(NOT COMPLETED)
-
+%<*en>
 In~\pTeX, a linebreak 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
@@ -1330,8 +1689,36 @@ 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.
-\begin{figure}[tb]
-\label{fig-ptexipro}
+%</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}
+また,状態遷移は,図\label{fig-ptexipro}のようになっており,図中の数字は
+カテゴリーコードを表している.最初の3状態は\TeX の入力処理部と同じであり,
+図中から状態$K$と「$j$」と書かれた矢印を取り除けば,\TeX の入力処理部と同
+じものになる.
+
+この図から分かることは,
+\begin{quote}
+行が和文文字(とグループ境界文字)で終わっていれば,改行は無視される
+\end{quote}
+ということである.
+%</ja>
+
+\begin{figure}[!tb]
 \begin{gather*}
  \def\sp{\text{\tt\char32}}
  \xymatrix{&&
@@ -1354,10 +1741,12 @@ after `beginning/ending of a group' characters.
 \item Category codes 9~(ignored), 14~(comment)~and~15~(invalid) are omitted in above diagram.
 \end{itemize}
 \caption{State transitions of \pTeX's input processor.}
+\label{fig-ptexipro}
 \end{figure}
 
 
 \subsection{Behavior in \LuaTeX-ja}
+%<*en>
 States in the input processoe 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
@@ -1369,11 +1758,11 @@ 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 a end-of-line in \LuaTeX-ja are as follows:
+Considering these situations, handling of an end-of-line in \LuaTeX-ja are as follows:
 \begin{quote}
 A character U+FFFFF (its category code is set to 14~(comment) by
-\LuaTeX-ja) is appended to an input line, before \LuaTeX\ actually
-process it, if and only if the following two conditions are satisfied:
+\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).
@@ -1383,11 +1772,158 @@ process it, if and only if the following two conditions are satisfied:
   \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}
+\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}
+%</en>
+
+%<*ja>
+\LuaTeX の入力処理部は\TeX のそれと全く同じであり,callbackによりユーザが
+カスタマイズすることはできない.このため,改行抑制の目的でユーザが利用で
+きそうなcallbackとしては,\verb+process_input_buffer+や
+\verb+token_filter+に限られてしまう.しかし,\TeX の入力処理部をよく見る
+と,後者も役には経たないことが分かる:改行文字は,入力処理部によってトー
+クン化される時に,カテゴリーコード10の32番文字へと置き換えられてしまうた
+め,\verb+token_filter+で非標準なトークン読み出しを行おうとしても,空白文
+字由来のトークンと,改行文字由来のトークンは区別できないのだ.
+
+すると,我々のとれる道は,\verb+process_input_buffer+を用いて
+\LuaTeX の入力処理部に引き渡される前に入力文字列を編集するというものしかない.
+以上を踏まえ,\LuaTeX-jaにおける「和文文字直後の改行抑制」の処理は,次のようになっている:
+
+\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}
 \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}」となるべきである.しかし,実際には
+上のように異なる挙動となっている.
+\begin{itemize}
+\item 2行目は「あ」という和文文字で終わる(2行目を処理する前の時点では,
+      「あ」は和文文字扱いである)ため,直後の改行文字は無視される.
+\item 3行目は「あ」という欧文文字で終わる(2行目を処理する前の時点では,
+      「あ」は欧文文字扱いである)ため,直後の改行文字は空白に置き換わる.
+\end{itemize}
+このため,トラブルを避けるために,和文文字の範囲を\verb+\ltjsetparameter+で編集した場合,
+その行はそこで改行するようにした方がいいだろう.
+%</ja>
+
+
 \section{Insertion of JFM glues, \textsf{kanjiskip} and \textsf{xkanjiskip}}
-This is the longest section of the document.
+\subsection{Overview}
+%<*en>
+NOT COMPLETED
+%</en>
+
+%<*ja>
+\LuaTeX-ja における和文処理グルーの挿入方法は,\pTeX のそれとは全く異なる.
+\pTeX では次のような仕様であった:
+\begin{itemize}
+\item JFMグルーの挿入は,和文文字を表すトークンを元に水平リストに(文字を表す)<char\_node>を
+追加する過程で行われる.
+\item \textsf{xkanjiskip}の挿入は,hboxへのパッケージングや行分割前に行われる.
+\item \textsf{kanjiskip}はノードとしては挿入されない.パッケージングや行分割の計算時に
+「和文文字を表す2つの<char\_node>の間には\textsf{kanjiskip}がある」ものとみなされる.
+\end{itemize}
+しかし,\LuaTeX-jaでは,hboxへのパッケージングや行分割前に全ての
+\textbf{JAglue},即ちJFMグルー・\textsf{xkanjiskip}・\textsf{kanjiskip}の
+3種類を一度に挿入することになっている.これは,\LuaTeX において欧文の合字・
+カーニング処理がノードベースになったことに対応する変更である.
+
+\LuaTeX-jaにおける\textbf{JAglue}挿入処理では,下の図\ref{fig-clu}のよう
+に「塊」を単位にして行われる.大雑把にいうと,「塊」は文字とそれに付随す
+るノード達(アクセント位置補正用のkernや,イタリック補正)をまとめたもの
+であり,2つの塊の間には,ペナルティ,\verb+\vadjust+,whatsitなど,行組版
+には関係しないものがある.そのため,……
+%</ja>
+
+% \begin{figure}[!tb]
+% \unitlength=10mm
+% \end{figure}
+
+\subsection{Definition of a `cluster'}
+
+\begin{defn}
+A \emph{cluster} is a list of nodes in one of the following forms, with the \textit{id} of it:
+\begin{enumerate}
+\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}.
+\item A inline math formula, including two \textit{math\_node}s at the boundary of it:
+HOGE
+      The \textit{id} is \textit{id\_math}.
+\item A \textit{glyph\_node} with nodes which relate with it: 
+HOGE
+The \textit{id} is \textit{id\_jglyph} or
+\textit{id\_glyph}, according to whether the \textit{glyph\_node}
+represents a Japanese character or not.
+\item An box-like node, that is, an hbox, an vbox and an rule (\verb+\vrule+). 
+The \textit{id} is \textit{id\_hlist} if the node is an
+      hbox which is not shifted vertically, or \textit{id\_box\_like}
+      otherwise.
+\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.
+%Just a node which will \dots, \textit{i.e.}, a node which is \emph{not} one of the following:
+%\textit{ins\_node}, \textit{mark\_node}, \textit{adjust\_node}, \textit{whatsit\_node}
+%and \textit{penalty\_node}.
+\end{enumerate}
+We denote a cluster by \textit{Np}, \textit{Nq} and \textit{Nr}.
+\end{defn}
+
+Internally, a cluster is represented by a table $\textit{Np}$ with the following fields.
 
-jfmglue.tex の内容をここに入れる
+\begin{description}
+\def\makelabel#1{\textbf{\textit{#1}}}
+\item[first, last] The first/last node of the cluster.
+\item[id] The \textit{id} in above definition.
+\item[nuc]
+
+% jachar
+\item[auto\_kspc, auto\_xspc]
+\item[xspc\_before, xspc\_after]
+
+% alchar, jachar
+\item[pre, post]
+\item[char]
+\item[class]
+\item[lend]
+\item[met, var]
+\end{description}
 \end{document}