+\subsection{進入量の計算}
+\label{ssec:calc_intrusion}
+ルビ文字を自然に組んだときの幅が親文字のそれより多い場合,
+ルビの前後への進入量は次のように決定される.
+\begin{enumerate}[label=\emph{Step~\arabic*},labelindent=0pt,itemindent=*,itemsep=\medskipamount]
+ \item \underline{前文字進入許容量}$B_0$,\underline{後進入文字許容量}$A_0$の算出.
+
+ ルビ全角の長さを$r$とする.
+ \begin{enumerate}
+ \item \texttt{pre}の指定値が非負であった場合は,それに$r$を掛けたものを$B_0$とする.\\
+ そうでなかった場合は,「ルビの直前の文字」に対する
+ \Param{rubypreintrusion}の値に$r$を掛けたものを$B_0$とする
+ \footnote{%
+ なお,「ルビの直前の文字」が段落最初の\cs{parindent}分のインデントであった場合,
+ $B_0$を,「文字コード$-1$の文字」\Param{rubypreintrusion}の値に$r$を掛けた値と\cs{parindent}のうち
+ 小さい方とする.
+ }.
+ \item \texttt{post}の指定値が非負であった場合は,それに$r$を掛けたものを$A_0$とする.\\
+ そうでなかった場合は,「ルビの直後の文字」に対する
+ \Param{rubypostintrusion}の値にルビ全角の値を掛けたものを$A_0$とする.
+ \item \texttt{mode}の最下位ビット(bit~0)が0であった場合は,$B_0\leftarrow 0$, $A\leftarrow 0$とする.
+ \item もし2つ前の文字がルビで,その直後(つまりいま処理しているルビから見れば直前)
+ の文字へ$a'$だけの進入があった場合,現在のルビについて$B_0←\min(0,B_0-a')$とする.
+ \end{enumerate}
+ \item 前進入許容量$B$,後進入許容量$A$の算出.
+ \begin{enumerate}
+ \item まず$B\leftarrow B_0$,\ \ $A\leftarrow A_0$とする.
+ \item ルビとその直前の文字の間に和文処理グルー$g$が挿入された場合,
+ \begin{itemize}
+ \item $g$がJFMグルーの場合は,\texttt{intrude\_jfmgk}が真の場合に,
+ \item $g$が標準の和文間空白(\Param{kanjiskip})の場合は,
+ \texttt{intrude\_kanjiskip}が真の場合に,
+ \item $g$が標準の和欧文間空白(\Param{xkanjiskip})の場合は,
+ \texttt{intrude\_xkanjiskip}が真の場合に,
+ \end{itemize}
+ それぞれ$g$の自然長を$B$に加算する.
+
+ ルビとその直後の文字との間に和文処理グルーが挿入された場合も同様である.
+
+ \item \texttt{mode}の2番目のビット(bit~1)が0であった場合は,$B$,~$A\leftarrow \min(B,A)$とする.
+ \end{enumerate}
+ \item 実際の前進入量$b$,後進入量$a$の計算.
+
+ ルビ文字の突出量を$x$,
+ 親文字の文字数を$k+1$,親文字の前に入る空白量・間の空白量・後ろの空白量の比を$p:q:r$とする.
+ このとき,\texttt{mode}のbit 2,~3の値によって$b$,~$a$を次のように算出する:
+\begin{description}[labelindent=\zw]
+ \item[00] $b=\min(B, xp/(p+kq+r))$, \ $a=\min(A, xr/(p+kq+r))$
+ \item[01] $b=\min(B, x)$, \ $a=\min(A, \max(x-b,0))$
+ \item[10] $a=\min(A, x)$, \ $b=\min(B, \max(x-a,0))$
+ \item[11] $M=\min(B,A)$とおく.もし$x\le 2M$ならば$b=a=x/2$.そうでなければ
+\[
+ b=\min\mleft(B, M + \frac{(x-2M)p}{p+kq+r}\mright),\qquad
+ a=\min\mleft(A, M + \frac{(x-2M)r}{p+kq+r}\mright).
+\]
+\end{description}
+
+組み方の具体例を実際に示す.例示のため,平仮名にはルビが1字まで,「立」にはルビを
+0.5字分までかけてよいことにしている.
+\begin{description}[labelindent=\zw]
+\item[00]{\setkeys[ltj]{ruby}{mode=1}%
+\ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
+は\ltjruby{美}{うつく}しい
+ \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
+は\ltjruby{暁}{あかつき}立\quad
+は\ltjruby{峠}{とうげ}立\quad
+は\ltjruby{聴衆}{ちようしゆう}立\par}
+\item[01]{\setkeys[ltj]{ruby}{mode=5}%
+\ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
+は\ltjruby{美}{うつく}しい
+ \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
+は\ltjruby{暁}{あかつき}立\quad
+は\ltjruby{峠}{とうげ}立\quad
+は\ltjruby{聴衆}{ちようしゆう}立\par}
+\item[10]{%
+\setkeys[ltj]{ruby}{mode=9}%
+\ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
+は\ltjruby{美}{うつく}しい
+ \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
+は\ltjruby{暁}{あかつき}立\quad
+は\ltjruby{峠}{とうげ}立\quad
+は\ltjruby{聴衆}{ちようしゆう}立\par}
+\item[11]{\setkeys[ltj]{ruby}{mode=13}%
+\ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
+は\ltjruby{美}{うつく}しい\quad
+は\ltjruby{聴衆}{ちようしゆう}と\quad
+は\ltjruby{暁}{あかつき}立\quad
+は\ltjruby{峠}{とうげ}立\quad
+は\ltjruby{聴衆}{ちようしゆう}立\par}
+\end{description}
+\end{enumerate}
+
+\subsection{ノードの扱い}
+\label{ssec:impl}
+次の例で内部実装の大まかな方法を説明する.