+\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>
+
+
+%<en>\section{Insertion of JFM glues, \Param{kanjiskip} and \Param{xkanjiskip}}
+%<ja>\section{JFM グルーの挿入,\Param{kanjiskip} と \Param{xkanjiskip}}
+%<en>\subsection{Overview}
+%<ja>\subsection{概要}
+
+
+\LuaTeX-ja における和文処理グルーの挿入方法は,\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}挿入処理では,次節で定義する
+「クラスタ」を単位にして行われる.大雑把にいうと,「クラスタ」は文字とそれに付随す
+るノード達(アクセント位置補正用のkernや,イタリック補正)をまとめたもの
+であり,2つのクラスタの間には,ペナルティ,\verb+\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}
+A \emph{cluster} is a list of consecutive 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.
+ The \textit{id} is \textit{id\_math}.
+\item A \textit{glyph\_node}~$p$ with nodes which relate with it:
+\begin{enumerate}
+\item A kern for the italic correction of~$p$.
+\item An accent attached to $p$ by \verb+\accent+.
+\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)}}
+\]
+
+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, 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.
+\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.
+\end{enumerate}
+We denote a cluster by \textit{Np}, \textit{Nq} and \textit{Nr}.
+\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}] 和文文字.\\
+$\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}] 縦方向にシフトされていない hbox.\\
+この場合,$\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$の内容が別の hbox で開始・終了している可能性も十分あり得る.そのような場合,
+$\mathit{Np}.\mathit{head}$, $\mathit{Np}.\mathit{tail}$の算出は,\textbf{垂直方向にシフトされていない} hbox の
+場合だけ内部を再帰的に探索する.例えば上の例では,$\mathit{Np}.\mathit{head}$は文字「a」を表すノードであり,
+一方$\mathit{Np}.\mathit{tail}$は垂直方向にシフトされた hbox,\verb+\lower1pt\hbox{xyz}+に対応するノードである.
+\item また,先頭にアクセント付きの文字がきたり,末尾にイタリック補正用の kern が
+来ることもあり得る.この場合は,クラスタの定義のところにもあったように,それらは無視して算出を行う.
+\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] リスト中に直接出現している和文文字.
+\textit{id}が\textit{id\_jglyph}であるか,\\
+\textit{id}が\textit{id\_pbox}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+
+\item[和文B] リスト中のhboxの中身の先頭として出現した和文文字.和文Aとの違いは,これの前に
+JFMグルーの挿入が行われない(\Param{xkanjiskip},~\Param{kanjiskip}は入り得る)ことである.\\
+\textit{id}が\textit{id\_hlist}か\textit{id\_disc}であって$\mathit{Np}.\mathit{head}$が\textbf{JAchar}であるとき.
+
+\item[欧文] リスト中に直接/hboxの中身として出現している欧文文字.次の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{center}
+\verb+\parindent+由来のhbox ($\mathit{subtype}=3$),及び\textit{subtype}が44~(\textit{user\_defined})でない
+ようなwhatsit.
+\end{center}
+これは,\verb+\parindent+由来のhboxがクラスタを構成しないようにするためである.
+
+次に,\textit{Np}の直前に空白$g$を必要なら挿入する:
+\begin{enumerate}
+\item この処理が働くような\textit{Np}は\textsf{和文A}である.
+\item 問題のリストが字下げありの段落(\verb+\parindent+由来のhboxあり)の場合は,
+この空白$g$は「文字コード\texttt{'parbdd'}の文字」と\textit{Np}の間に入るglue/kernである.
+\item そうでないとき(\verb+noindent+で開始された段落や,hbox)は,
+$g$は「文字コード\texttt{'boxbdd'}の文字」と\textit{Np}の間に入るglue/kernである.
+\end{enumerate}
+ただし,もし$g$がglueであった場合,この挿入によって\textit{Np}による行分割が新たに可能になるべきではない.
+そこで,以下の場合には,$g$の直前に\verb+\penalty10000+を挿入する:
+\begin{itemize}
+\item 問題にしているリストが段落であり,かつ
+\item \textit{Np}の前には予めペナルティがなく,$g$はglue.
+\end{itemize}
+
+\paragraph{末尾の処理}
+末尾の処理は,問題のリストが段落のものかhboxのものかによって異なる.
+後者の場合は容易い:最後のクラスタを\textit{Nq}とおくと,\textit{Nq}と「文字コード\texttt{'boxbdd'}の文字」の間に入るglue/kernを,
+\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}の値の分だけ適切な場所のペナルティを増やす.
+
+ペナルティ量を増やす場所は,\textit{head}が\textbf{JAchar}であり,かつその文字の\Param{kcatcode}が偶数であるような
+最後のクラスタの直前にあるものたちである\footnote{大雑把に言えば,\Param{kcatcode}が奇数であるような\textbf{JAchar}
+を約物として考えていることになる.\Param{kcatcode}の最下位ビットはこの\Param{jcharwidowpenalty}用にのみ利用される.}.
+\end{enumerate}
+
+\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}}である場合を見ていこう,}
+この場合が全ての場合の基本となる.
+
+\paragraph{「右空白」の算出}
+まず,「右空白」にあたる量を算出する.通常はこれが,隣り合った2つの和文文字間に入る空白量となる.
+\begin{description}
+\item[JFM由来{[M]}] JFMの文字クラス指定によって入る空白を以下によって求める.この段階で空白量が未定義(未指定)だった場合,
+ デフォルト値\Param{kanjiskip}を採用することとなるので,次へ.
+\begin{enumerate}
+\item もし両クラスタの間で\verb+\inhibitglue+が実行されていた場合(証としてwhatsitノードが自動挿入される),
+ 代わりに\Param{kanjiskip}が挿入されることとなる.次へ.
+\item \textit{Nq}と\textit{Np}が同じJFM・同じ\texttt{jfmvar}キー・同じサイズの和文フォントであったならば,
+ 共通に使っているJFM内で挿入される空白 (glue or kern) が決まっているか調べる.
+\item 1.でも2.でもない場合は,\textit{Nq}と\textit{Np}が違うJFM/\texttt{jfmvar}/サイズである.
+この場合,まず
+\[
+\vcenter{\halign{\hfil$#:={}$&(\inhibitglue#\inhibitglue)\cr
+gb&\textit{Nq}と「文字コードが{\tt'diffmet'}の文字」との間に入るglue/kern\cr
+ga&「文字コードが{\tt'diffmet'}の文字」と\textit{Np}との間に入るglue/kern\cr
+}}
+\]
+として,左側由来・右側由来の空白 (glue/kern) を(それぞれのJFMから)求める.
+$\mathit{ga}$と$\mathit{gb}$のどちらか片方が未定義であるならば,定義されている側の値をそのまま採用する.
+もし$\mathit{ga}$と$\mathit{gb}$が両方決まっているならば,両者の値を平均\footnote{\Param{differentjfm}パラメタの
+値によって,「大きい方」「小さい方」「合計」に変えることができる.}した値を採用する.
+\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つの和文文字間には常に何らかのglue/kernが挿入されることとなる.
+\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.と同様の方法を用いて調整する.
+\end{enumerate}
+\end{description}
+\paragraph{「左空白」の算出とそれに伴う補正}
+次に,「左空白」にあたる量を算出する:
+\begin{description}
+\item[line-end~{[E]}]
+\textit{Nq}と\textit{Np}の間で行分割が起きたときに,
+\textit{Nq}と行末の間に入る空白である.ぶら下げ組の組版などに用いられることを期待している.
+\begin{enumerate}
+\item 既に算出した「右空白」がkernである場合は,「左空白」は挿入されない.
+\item 「右空白」がglueか未定義(長さ0のglueとみなす)の場合は,「左空白」は
+\textit{Nq}と「文字コード\texttt{'lineend'}の文字」との間に入るkernとして,JFMから決定される.
+\item 2.で決まった「左空白」の長さが0でなければ,その分だけ先ほど算出した「右空白」の自然長を引く.
+\end{enumerate}
+\end{description}
+\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 「右空白」がkernであるとき,
+それは「\textit{Nq}と\textit{Np}の間で改行は許されない」ことを意図している.そのため,
+この場合は$a\neq 0$であってもペナルティの挿入はしない.
+\item 「左空白」がkernとしてきっちり定義されている時(このとき,「右空白」はkernでない),
+この「左空白」の直後での行分割を許容しないといけないので,$a=0$であっても
+\textit{penalty\_node}を作って挿入する.
+\item 以上のどれでもないときは,$a\neq 0$ならば\textit{penalty\_node}を作って挿入する.
+\end{itemize}
+\end{description}