OSDN Git Service

luatexja-ruby
[luatex-ja/luatexja.git] / doc / luatexja-ruby.tex
1 %#! lualatex
2 %%% a test of ruby.
3 \documentclass[a4paper,10pt]{ltjsarticle}
4 \usepackage[rgb]{xcolor}
5 \usepackage{luatexja-otf,amsmath,bxghost}
6 \usepackage[no-math]{fontspec}
7 \usepackage[match]{luatexja-fontspec}
8 \usepackage[haranoaji]{luatexja-preset}\normalsize
9 \setmonojfont{HaranoAjiGothic-Regular.otf}
10 \usepackage{unicode-math}
11 \setmathfont{Latin Modern Math}
12
13 \def\emph#1{\textbf{\textgt{#1}}}
14 \def\headfont{\normalfont\bfseries\gtfamily}
15 \def\cs#1{\eghostguarded{\texttt{\textbackslash#1}}}
16 \usepackage[textwidth=45\zw, lines=45, footskip=2\zh]{geometry}
17 \advance\leftmargini-1\zw\advance\leftmarginii-1\zw
18 \protected\def\Param#1{\eghostguarded{\underline{\smash{\textsf{\mdseries #1}}}}}
19
20 \usepackage{luatexja-ruby,showexpl,booktabs}
21 \definecolor{mygreen}{rgb}{0,0.5,0}
22 \lstset{
23   preset=\normalsize, basicstyle=\small\ttfamily, basewidth=0.5em,
24   explpreset={numberstyle=\tiny, numbers=left, numbersep=1em, columns=fixed},
25   morecomment=[l]{\%}, commentstyle=\color{mygreen}
26 }
27 \makeatletter\let\SX@Info=\relax\makeatother
28 \fboxsep=0mm
29
30 \usepackage{hyperref,bookmark,xcolor}
31 \hypersetup{%
32         unicode,
33         colorlinks,
34         allbordercolors=1 1 1,
35         allcolors=blue,
36         pdftitle={luatexja-ruby.sty}
37 }
38
39 \def\Node#1#2{\,\vcenter{\hbox{\fboxsep=1pt\fbox{\vbox{\small\halign{\hfil##\hfil\cr
40   #1\mathstrut\cr\noalign{\smallskip\hrule height.4pt\smallskip}\strut\<#2\cr}}}}}\,}
41 \def\LuaTeX{Lua\TeX}
42
43 % 三分ルビ用
44 \DeclareFontShape{JY3}{mc}{mc}{n}{<-> [0.92487] 
45   HaranoAjiMincho-Regular:extend=0.67;jfm=ujisc33}{}
46
47 \title{\textsf{luatexja-ruby}パッケージ}
48 \author{\LuaTeX-jaプロジェクトチーム}
49 \date{\texttt{\csname ver@luatexja-ruby.sty\endcsname}(\today)}
50 \begin{document}
51 \catcode`\<=13
52 \def<#1>{{\rmfamily\mdseries\itshape$\langle$#1\/$\rangle$}}
53 %\fontsize{13.19873}{15}\selectfont%
54
55 \maketitle
56
57 \begin{abstract}
58 \textsf{luatexja-ruby}パッケージは,\LuaTeX-jaの機能を利用してルビの組版処理を行う追加パッケージである.
59 \LuaTeX, \LuaTeX-jaの内部処理に割り込むことにより,熟語ルビ中の行分割や,
60 行頭形・行中形・行末形の自動検出,また進入許容量の自動設定などを可能とした.
61
62 v0.3より前とは親文字の高さの扱いが変わっている(\texttt{baseheight}キーを参照せよ)ほか,
63 \Param{rubypreintrusion}, \Param{rubypostintrusion}パラメータの初期値が変わっているので注意すること.
64 \end{abstract}
65
66 \tableofcontents
67
68 \newpage
69 \section{\ltjruby{利|用|方|法}{り|よう|ほう|ほう}}
70 パッケージ読み込みは,\verb+\usepackage{luatexja-ruby}+ で良く,
71 必要ならば自動的に\LuaTeX-ja本体を読み込む.
72 plain \LuaTeX でのロードはまだサポートしておらず,
73 \LaTeXe のみサポートしている.
74
75 \subsection{\ltjruby{用|語}{よう|ご}}
76 「進入(intrusion)」「突出(protrusion)」という用語は,
77 \href{http://zrbabbler.sp.land.to/pxrubrica.html}{\textsf{pxrubrica}パッケージ}%
78 での用法に準ずる.
79
80 \begin{quotation}
81 進入あり:と\ltjruby{暁}{あかつき}の
82
83 進入なし:{\setkeys[ltj]{ruby}{mode=0}と\ltjruby{暁}{あかつき}の}
84
85 突出あり:{\setkeys[ltj]{ruby}{stretch={1}{2}{1}}\ltjruby{聴衆}{ちようしゆう}}
86
87 突出なし:{\setkeys[ltj]{ruby}{stretch={0}{2}{0}}\ltjruby{聴衆}{ちようしゆう}}
88 \end{quotation}
89
90 \subsection{\ruby{命|令}{めい|れい}}
91 \paragraph{\cs{ltjruby}}
92 ルビ出力用命令の本体.\verb+\ruby+ という別名を定義している.
93 \begin{quote}
94 \ttfamily \textbackslash ltjruby[<option>]\{親|文|字\}\{おや|も|じ\}
95 \end{quote}
96 のように使用する.
97 第2・第3引数内の「\verb+|+」はグループの区切りを表す.詳細は\ref{ssec:grp}\nobreak 小節を参照.
98
99 <option>には以下の内容をkey-valueリストで指定可能である:
100 \begin{description}
101 \def\makelabel#1{\ttfamily\bfseries #1}
102 \item[pre=<real>] 前進入許容量をルビ全角単位で指定.
103 負の長さを指定した場合は,ルビの状況や直前の文字に応じた自動指定を意味する.
104 既定値は負(つまり,自動指定).
105
106 \item[post=<real>] 同様に,後進入許容量を指定する.既定値は負(自動指定).
107
108 \item[mode] 進入処理のモードを表すbit vector.下位2\,bitは,\texttt{pre}や
109 \texttt{post}が負である場合にしか効力を発揮しない.既定値は$(0001)_2 = 1$.
110 \begin{description}
111  \item[bit 0] 進入を無効にするならば0,有効にするならば1.
112  \item[bit 1] 前進入許容量$B$と後進入許容量$A$が異なった場合,
113 そのまま処理する場合は0,小さい方に揃えるならば1.
114  \item[bit 2--3] ルビ文字の突出量$x$から実際の前進入量$b$,後進入量$a$の計算方法を指定する.
115 親文字の文字数が$k+1$,親文字の前に入る空白量・間の空白量・後ろの空白量の比が$p:q:r$のとき,
116 \begin{description}
117  \item[00] $b=\min(B, xp/(p+kq+r))$, \ $a=\min(A, xr/(p+kq+r))$
118  \item[01] $b=\min(B, x)$, \ $a=\min(A, \max(x-b,0))$
119  \item[10] $a=\min(A, x)$, \ $b=\min(B, \max(x-a,0))$
120  \item[11] $M=\min(B,A)$とおく.もし$x\le 2M$ならば$b=a=x/2$.そうでなければ
121 \[
122  b=\min\left(B, M + \frac{(x-2M)p}{p+kq+r}\right),\qquad 
123  a=\min\left(A, M + \frac{(x-2M)r}{p+kq+r}\right)
124 \]
125 \end{description}
126
127   \typeout{AAAA}
128 組み方の具体例を実際に示す.例示のため,平仮名にはルビが1字まで,「立」にはルビを
129 0.5字分までかけてよいことにしている.
130 \begin{description}
131 \item[00]{\setkeys[ltj]{ruby}{mode=1}%
132 \ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
133 は\ltjruby{美}{うつく}しい
134   \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
135 は\ltjruby{暁}{あかつき}立\quad
136 は\ltjruby{聴衆}{ちようしゆう}立\par}
137 \item[01]{\setkeys[ltj]{ruby}{mode=5}%
138 \ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
139 は\ltjruby{美}{うつく}しい
140   \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
141 は\ltjruby{暁}{あかつき}立\quad
142 は\ltjruby{聴衆}{ちようしゆう}立\par}
143 \item[10]{%
144   \typeout{MODE: \csname ltj@@rubyip@mode\endcsname.}%
145   \setkeys[ltj]{ruby}{mode=9}%
146   \typeout{MODE: \csname ltj@@rubyip@mode\endcsname.}%
147 \ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
148 は\ltjruby{美}{うつく}しい
149   \quad は\ltjruby{聴衆}{ちようしゆう}と\quad
150 は\ltjruby{暁}{あかつき}立\quad
151 は\ltjruby{聴衆}{ちようしゆう}立\par}
152 \item[11]{\setkeys[ltj]{ruby}{mode=13}%
153 \ltjsetparameter{rubypreintrusion={`立,0.5}, rubypostintrusion={`立,0.5}}%
154 は\ltjruby{美}{うつく}しい\quad
155 は\ltjruby{聴衆}{ちようしゆう}と\quad
156 は\ltjruby{暁}{あかつき}立\quad
157 は\ltjruby{聴衆}{ちようしゆう}立\par}
158 \end{description} 
159
160 \end{description}
161 \item[stretchruby=\{<left>\}\{<middle>\}\{<right>\}] 親文字の合計長が
162 ルビ文字の合計長より長い時に,ルビ文字の前・間・後に入れる空白の割合であり,
163 それぞれ0--7の自然数で指定する.
164 既定値は\ \verb+{1}{2}{1}+ である.
165 <left>はルビ文字の先頭までの空き量,<middle>はルビ文字間の空き量,<right>はルビ文字の末尾からの
166 空き量(の比)を表す.以下が例である.
167 \begin{LTXexample}[width=0.3\textwidth, preset=\Large]
168 \ltjruby[stretchruby=123,maxmargin=2]%
169   {◯◯◯◯}{◆◆}
170 \end{LTXexample}
171 \item[stretch=\{<left>\}\{<middle>\}\{<right>\}]
172 行中形でルビ文字の方が長い場合,親文字の前・中・後に入れる空白の割合.
173 既定値は\ \verb+{1}{2}{1}+ である.それ以外の代表的な値としては,例えば次のようなものがある.
174 \begin{description}
175 \item[親文字均等割禁止] \verb+{1}{0}{1}+\ など<middle>を0にした値
176 \item[前突出禁止] \verb+{0}{1}{1}+
177 \item[後突出禁止] \verb+{1}{1}{0}+
178 \end{description}
179
180 \item[stretchbol=\{<left>\}\{<middle>\}\{<right>\}] 行頭形〜.
181 既定値は\ \verb+{0}{1}{1}+ である.
182 \item[stretcheol=\{<left>\}\{<middle>\}\{<right>\}] 行末形〜.
183 既定値は\ \verb+{1}{1}{0}+ である.
184
185 \item[maxmargin=<real>] 親文字の方がルビより長い時に,ルビの先頭と親文字の先頭,及び
186 ルビ末尾と親文字の末尾の間に許される最大の空白量.\textbf{親文字全角単位}で指定し,既定値は0.5.
187
188 \medskip
189 \item[size=<real>] ルビ文字の親文字に対する大きさ.既定値は0.5.
190 \item[intergap=<real>] ルビ文字と親文字との空きを親文字全角単位で指定.既定値は0.
191 \item[rubysmash=<bool>] ルビの高さを0にするか.既定値は偽.次が例である.
192 \begin{LTXexample}[width=0.3\textwidth, preset=\Large]
193 \ \vrule width 0pt height 2\zw depth 1\zw
194 \frame{\ltjruby[rubysmash=false]{本}{ほん}}\ 
195 \frame{\ltjruby[rubysmash=true]{本}{ほん}}\ 
196 \frame{\ltjruby[rubysmash=false,intergap=0.2]
197   {本}{ほん}}\ 
198 \frame{\ltjruby[rubysmash=true,intergap=0.2]
199   {本}{ほん}}\ 
200 \frame{\ltjruby[rubysmash=false,intergap=-1.5]
201   {本}{ほん}}
202 \end{LTXexample}
203 \item[ybaseheight=<real>] 非負の値が指定された場合,
204   \emph{縦組以外での}ルビの親文字の高さを全角高さの<real>倍と強制的に固定する.
205   負の値が指定された場合は「固定しない」(すなわち,v0.3より前の挙動と同じになる).
206   既定値は0.88.
207 \item[tbaseheight=<real>] \texttt{ybaselineshift}と同様だが,こちらは\emph{縦組での}ルビの親文字の高さを指定する.
208   既定値は0.5.
209 \item[baseheight=<real>] \texttt{ybaselineshift},\texttt{tbaselinesift}を同時に指定したことと同義.
210 \begin{LTXexample}[width=0.3\textwidth, preset=\Large]
211 \noindent
212 \ltjruby[baseheight=0.88]{本}{ほん}\ 
213 \ltjruby[baseheight=0.88]{dvi}{ディーヴィーアイ}\\
214 \ltjruby[baseheight=0.5]{本}{ほん}\ 
215 \ltjruby[baseheight=0.5]{dvi}{ディーヴィーアイ}\\
216 \ltjruby[baseheight=0]{本}{ほん}\ 
217 \ltjruby[baseheight=0]{dvi}{ディーヴィーアイ}\\
218 \ltjruby[baseheight=-1]{本}{ほん}\ 
219 \ltjruby[baseheight=-1]{dvi}{ディーヴィーアイ}
220 \end{LTXexample}
221
222
223
224 \item[kenten=<command>]各文字につく圏点の出力命令を指定する.既定値は「\verb+\ltjalchar`•+」
225 であり,\texttt{U+2022} (Bullet)を\textbf{ALchar}として出力することを指定している.
226
227 \item[fontcmd=<command>]ルビ用のフォント切り替え命令を指定する.
228 このキーの内容が実行された後に\ \verb+\fontsize...\selectfont+\ が実行されるので,
229 このキーの指定では最後に\ \verb+\selectfont+ を加える必要はない.
230
231 この \texttt{fontcmd} キーの内容は多くの回数実行される.
232 例えば,\textsf{luatexja-fontspec}パッケージを用いてOpenTypeフォントを用いる場合,
233 \begin{lstlisting}
234  fontcmd=\addjfontfeatures{Style=Ruby}
235 \end{lstlisting}
236 のようにしてルビ用字形を用いることが可能だが,現在の実装ではタイプセットに時間がかかるようになる.
237
238
239 \end{description}
240
241 \medskip
242 次の2つは,以上で説明した複数のオプションを一度に設定するためのものである.
243 普通はこの2つのうちいずれかを設定するだけで足りるだろう.
244
245 \begin{description}
246 \def\makelabel#1{\ttfamily\bfseries #1}
247 \item[naka] 以下のオプションを同時に設定する.主に中付きルビを組むときに用いる.
248 \begin{verbatim}
249 mode=1, stretch={1}{2}{1}, stretchruby={1}{2}{1}
250 \end{verbatim}
251 \item[kata] 同様に,肩付きルビ用に,次を設定する.
252 \begin{verbatim}
253 mode=9, stretch={1}{2}{1}, stretchruby={0}{0}{1}
254 \end{verbatim}
255 \end{description}
256
257 \paragraph{\cs{ltjsetruby}\{<option>\}}
258 <option>の既定値を指定する.\textsf{luatexja-ruby}読み込み時の値は
259 各項目の所で既に説明してあるが,次のようになっている.
260 \begin{verbatim}
261   pre=-1, post=-1, mode=1, 
262   stretchruby={1}{2}{1}, stretch = {1}{2}{1},
263   stretchbol={0}{1}{1}, stretcheol={1}{1}{0},
264   maxmargin=0.5, size=0.5, intergap=0, rubysmash=false,
265   kenten=\ltjalchar`•, fontcmd=\relax, ybaseheight=0.88, tbaseheight=0.5
266 \end{verbatim}
267
268 \paragraph{\texttt{\textbackslash ltjsetparamater} に追加されるキー}
269 \begin{description}
270 \item[\Param{rubypreintrusion}\ttfamily =\{<chr\_code>, <pre\_int>\}]
271 文字<chr\_code> に,その\textbf{直後}のルビによって掛けられるルビ文字列の最大長をルビ全角単位で指定.
272 \item[\Param{rubypostintrusion}\ttfamily =\{<chr\_code>, <post\_int>\}]
273 文字<chr\_code> に,その\textbf{直前}のルビによって掛けられるルビ文字列の最大長をルビ全角単位で指定.
274 \end{description}
275 以下の文字は\Param{rubypreintrusion},~\Param{rubypostintrusion}とも初期値は1である:
276 \makeatletter
277 \def\mybox#1{{\fboxrule=0.1mm\fboxsep=0mm\fcolorbox{cyan}{white}{\hbox{\null\ltjjachar#1\null}}}}
278 \begin{quote}
279  ひらがな(\texttt{U+3040}--\texttt{U+309F}),カタカナ(\texttt{U+30A0}--\texttt{U+30FF}),
280  仮名補助など(\texttt{U+1B000}--\texttt{U+1B16F}),\\
281  中点類・分離禁止文字
282  \@for\@tmp:=`\・,`\:,`\;,`\―,`\‥,`\…,`〳,`\〴,`\〵,"2014 \do{\mybox{\@tmp}}
283 \end{quote}
284 次に,以下の文字は\Param{rubypreintrusion}のみ初期値は1である:
285 \begin{quote}
286   始め括弧類
287   \@for\@tmp:=`\‘,`\“,`\〈,`\《,`\「,`\『,`\【,`\〔,`\〖,`\〘,`\〝,`\(,`\[,`\{,`\⦅ \do{\mybox{\@tmp}},
288   「文字コード$-1$の文字
289   \footnote{段落開始の\ \texttt{\textbackslash parindent}\ を表す.
290     通常の\LuaTeX-jaにおける指定では「文字コード$-1$」は文中数式境界を表していることに注意.}」
291 \end{quote}
292 また,以下の文字は\Param{rubypostintrusion}のみ初期値は1である:
293 \begin{quote}
294   閉じ括弧類
295   \@for\@tmp:=`\’,`\”,`\〉,`\》,`\」,`\』,`\】,`\〕,`\〗,`\〙,`\〟,`\),`\],`\},`\⦆ \do{\mybox{\@tmp}},
296   句読点類\@for\@tmp:=`\、,`\,,`\。,`\. \do{\mybox{\@tmp}}
297 \end{quote}
298 \makeatother
299
300 以上で記述されていない\Param{rubypreintrusion},~\Param{rubypostintrusion}の初期値はすべて0である.
301
302 \paragraph{\texttt{\textbackslash ltjkenten}}
303 圏点を出力する命令で,\verb+\kenten+ という別名を定義している.
304 \begin{quote}
305  \ttfamily\cs{ltjkenten}[<option>]\{親文字\}
306 \end{quote}
307 のように使用する.複数文字に圏点をつける場合でも,\verb+\ltjruby+ のように「\texttt{|}」を使って
308 文字を区切る\textbf{必要はない}ことに注意してほしい.
309
310 圏点として出力される文字は \texttt{kenten} キーによって指定し,
311 圏点自身の大きさは(ルビと同様に)\texttt{size} キーで指定する.
312
313 \subsection{グループの\ruby{指|定}{し|てい}}
314 \label{ssec:grp}
315 \begin{quote}
316 \ttfamily\cs{ltjruby}[<option>]\{親|文|字\}\{おや|も|じ\}
317 \end{quote}
318 のように,\verb+\ltjruby+\ の第2・第3引数内の「\verb+|+」はグループの区切りを表す.
319 グループの数は両者で一致しなければならず,
320 \verb+\ltjruby{紋章}{もん|しよう}+ のようには\emph{できない}.
321
322 1グループのみのルビ(単純グループルビ)はグループルビとして組まれる.そのため,
323 もしモノルビを使いたければ,面倒でも
324 \begin{LTXexample}[width=0.4\textwidth, preset=\Large]
325 の\ltjruby{紋}{もん}\ltjruby{章}{しよう}が
326 \end{LTXexample}
327 のように,複数回使用すること.
328 また,全てのグループにおいて「ルビ文字列の長さは親文字列以下」であれば,
329 単純グループルビの並びとして扱われる.すなわち,次の2行は全くの等価となる.
330 \begin{verbatim}
331 \ltjruby{普|通|車}{ふ|つう|しや}
332 \ltjruby{普}{ふ}\ltjruby{通}{つう}\ltjruby{車}{しや}
333 \end{verbatim}
334
335 複数グループかつ上記の条件を満たさない場合は,
336 所謂「可動グループルビ」であり,ルビの前後や各グループの切れ目で行分割が可能となる.
337 例えば
338 \begin{verbatim}
339 …の\ltjruby{表|現|力}{ひよう|げん|りよく}は…
340 \end{verbatim}
341 という入力からは得られる組版結果は,次のいずれかになる.
342 \begin{center}
343  \begin{tabular}{ll}
344  \toprule
345  改行なし(行中形)&\Large …の\ltjruby{表|現|力}{ひよう|げん|りよく}は…\\
346  直前で改行&\Large \vrule \ltjruby[stretch=011]{表|現|力}{ひよう|げん|りよく}は…\\
347 &\Large …の\ltjruby[stretch=110]{表}{ひよう}
348     \vrule\ltjruby[stretch=011]{現|力}{げん|りよく}は…\\
349 &\Large …の\ltjruby[stretch=110]{表|現}{ひよう|げん}
350     \vrule\ltjruby[stretch=011]{力}{りよく}は…\\
351  直後に改行&\Large …の\ltjruby[stretch=110]{表|現|力}{ひよう|げん|りよく}\vrule\\
352 \bottomrule
353  \end{tabular}
354 \end{center}
355 \begin{itemize}
356  \item これらの行分割によってペナルティは発生しない.
357  \item 上記の例で見られるように,
358 2ブロック以上をまとめて組むときは,全体を1つのグループルビのように組版する(JIS~X~4051と同様).
359 『日本語組版処理の要件』では,
360 附属書Fに「熟語の構成,さらにその熟語の前後にくる文字の種類を考慮して配置する方法」として
361 別の方法を解説しているが,こちらの方法は現時点ではサポートしていないので,
362 面倒でも手動で \texttt{pre}, \texttt{post} などを使って頑張って欲しい.
363  \item 実装方法の都合により,ルビの直前・直後・途中で2箇所以上の改行が起きる場合,例えば
364 \begin{center}
365  \begin{tabular}{lll}
366  \toprule
367  \Large …の\ltjruby[stretch=110]{表}{ひよう}
368     \vrule\ltjruby[stretch=010]{現|力}{げん|りよく}\vrule&
369 \Large \vrule\ltjruby[stretch=010]{表|現}{ひよう|げん}
370     \vrule\ltjruby[stretch=011]{力}{りよく}は…&
371 \Large \vrule\ltjruby[stretch=010]{表|現|力}{ひよう|げん|りよく}\vrule\\
372 \bottomrule
373  \end{tabular}
374 \end{center}
375 などの組み方は\emph{想定していない}.
376 \end{itemize}
377
378
379 \section{\ruby{注|意|点}{ちゆう|い|てん}}
380 \begin{description}
381 \item[ルビ文字のはみ出し]
382 「日本語組版処理の要件」の図3.82のように,
383 ルビ文字のはみ出しが繋がらないようにする処理について述べる.
384
385 例えば,
386 \begin{LTXexample}[preset=\Large,width=0.3\textwidth]
387 \ltjruby{陵}{りよう}と\ltjruby{陵}{みささぎ}\\
388 \ltjruby{陵}{りよう}と\ltjruby[pre=1]{陵}{みささぎ}
389 \end{LTXexample} 
390 において,1行目右側の「\ltjruby{陵}{みささぎ}」のルビが前の「と」にかかる量は次のように決まる:
391 \begin{enumerate}
392 \item 1回目の実行では,行分割前に「\ltjruby{陵}{りよう}」の後側進入量は前もって知ることはでき
393       ない.なので,「\ltjruby{陵}{りよう}」は行中形で組まれるものとして
394 「\ltjruby{陵}{みささぎ}」前側進入許容量は
395 \[
396  \underbrace{0.5\,\mathrm{zw}}_{\text{元々の許容量}}
397 -\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの後側進入量(行中形)}}=0.25\,\mathrm{zw}
398 \]
399 となる.行分割後,「\ltjruby{陵}{りよう}」の実際の後側進入量は
400 <jobname>\texttt{.ltjruby}ファイルに記述される.
401 \item 2回目以降の実行では,<jobname>\texttt{.ltjruby}ファイルに保存された「\ltjruby{陵}{りよう}」の後側進入量
402 を用いて,「\ltjruby{陵}{みささぎ}」前側進入許容量を次のように計算する:
403 \[
404  \underbrace{0.5\,\mathrm{zw}}_{\text{元々の許容量}}
405 -\underbrace{0.25\,\mathrm{zw}}_{\text{前のルビの後側進入量 (from \texttt{.ltjruby})}}=0.25\,\mathrm{zw}.
406 \]
407 \end{enumerate}
408 <jobname>\texttt{.ltjruby}ファイルに保存する際,各 \verb+\ltjruby+ 命令の呼び出しを識別するキーが必要になるが,
409 そのキーとしては単純に「何個目の \verb+\ltjruby+ 命令か」である.
410
411 なお,以上の処理は,1行目と2行目を比較すれば分かるように,
412 「\ltjruby{陵}{みささぎ}」の\emph{前進入許容量指定(\texttt{pre})が自動}になっている場合のみ
413 実施される.
414
415 \item[段落末尾のルビ]
416 段落がルビで終わった場合,そのルビが行末形で組まれることはない.
417 これは,段落の「本当の」末尾には \verb+\penalty10000\parfillskip+ があるためで,
418 ルビ処理用に作った最後のグルー(\ref{sec:impl}\nobreak 節の説明では$g_2$)が消去されないことによる.
419
420 \verb+\parfillskip+ の長さ(や,場合によっては \verb+\rightskip+)を実測し,
421 それによって処理を変えるのも可能だが,そのようなことはしなかった.
422 段落がルビで終わることは普通ない(最低でも句点が続くだろう)と思うからである.
423
424
425
426 \item[段落先頭のルビ]
427 同様に,段落先頭のルビは行頭形にはならない.
428 \texttt{pre}が負(つまり,自動指定)のとき,段落最初の \verb+\parindent+ 部分への
429 進入は可能である.\verb+\parindent+ 部分への進入許容量は
430 「文字$-1$」に対する\Param{rubypreintrusion}(既定値は1,ルビ全角単位)と
431 \ \verb+\parindent+ の長さのうち小さい方である.
432 \begin{LTXexample}[preset=\Large,width=0.4\textwidth]
433 \parindent1\zw\noindent 012345\par
434 \ltjruby{陵}{みささぎ}は……\par
435 \ltjruby{承}{うけたまわ}り……\par
436 \parindent0.25\zw\ltjruby{陵}{みささぎ}は……
437 \end{LTXexample}
438 \end{description}
439
440 \newpage
441 \section{\ruby{実|装}{じつ|そう}について}
442 \label{sec:impl}
443 次の例で実装の大まかな方法を説明する.
444 \begin{LTXexample}[preset=\Large]
445 ……を\ltjruby{流|暢}{りゆう|ちよう}に……
446 \end{LTXexample}
447
448 \begin{enumerate}
449 \item \verb|\ltjruby|コマンド自体は,一旦次のnode listを値とするwhatsit~$W$を作って,
450 現在の水平リストへと挿入する(必要ならば\verb|\leavevmode|も実行):
451 \[
452  \Node{whatsit $w$}{value: 2}\longrightarrow 
453  \Node{hlist $s_1$}{「りゆう」}\longrightarrow
454  \Node{hlist $p_1$}{「流」}\longrightarrow
455  \Node{hlist $s_2$}{「ちよう」}\longrightarrow
456  \Node{hlist $p_2$}{「暢」}
457 \]
458 ここで,最初の$w$の値2は,ルビが2つのパーツ「\ltjruby{流}{りゆう}」「\ltjruby{暢}{ちよう}」からなっていることを
459 表している.この値を$\mathit{cmp}$とおこう.
460 $s_i$達の中の文字は既にルビの大きさである.
461 \item \LuaTeX-jaの和文処理グルー挿入処理において,
462 このwhatsit~$W$はまとめて
463 「先頭が『流』,最後が『暢』であるようなhboxを \verb|\unhbox| で展開したもの」と扱われる.
464 言い換えれば,ルビ部分を無視した単なる「流暢」という和文文字の並びとして扱われる\footnote{「流」「暢」の間のグルーは既に入っている,と扱われる.}.
465 次のサンプルを参照
466 \begin{LTXexample}[preset=\Large]
467 \leavevmode\hbox{.}A\\
468 %↑xkanjiskip 
469 \ltjruby{.}{}A
470 %↑2分
471 \end{LTXexample}
472 \item 和文処理グルーの挿入が終わった後で,可動グループルビのためのノードの挿入に入る.
473 \begin{enumerate}
474 \item $W$の前後に$2\mathit{cmp}+1=5$個のノードが挿入され,$W$の周辺は次のようなノード列になる.
475 \begin{align*}
476  (\text{other nodes})&\longrightarrow
477  \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{}
478 \\&\longrightarrow
479  \Node{glue $g_1$}{}\longrightarrow \Node{rule $r_2$}{}\longrightarrow 
480  \Node{glue $g_2$}{}\longrightarrow (\text{other nodes})
481 \end{align*}
482
483 \item このようにノードを挿入する目的は,\TeX の行分割処理自体に影響を加えずに可動グループルビ
484 を実現させることにある.
485 \begin{gather*}
486  (\text{other nodes})\longrightarrow
487  \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{}\\
488 \noalign{\hrulefill 行の境目\hrulefill}
489 \Node{rule $r_2$}{}\longrightarrow 
490  \Node{glue $g_2$}{}\longrightarrow (\text{other nodes})
491 \end{gather*}
492 のようになったとしたら,「\ltjruby{流}{りゆう}」「\ltjruby{暢}{ちよう}」の間で行分割が起きた,ということがわかり,
493 $g_i$,~$r_i$達のノードを適切に置き換えればよい(後で詳しく説明する).
494
495 \begin{figure}\centering\small
496 \begin{tabular}{cllll}
497 \toprule
498 \multicolumn{1}{c}{\bf ノード}&\multicolumn{1}{c}{\bf 組み方}&\multicolumn{1}{c}{\bf サンプル}%
499 &\multicolumn{1}{c}{\bf 対応するノード並び}\\
500 \midrule
501 $n_1$&行末1グループ&
502 \Large
503 \fbox{を}{\color{blue!50!black}\gt\ltjruby[pre=1,mode=5,stretch=110]{流}{りゆう}}\vrule
504 &
505 $g_0\rightarrow W\rightarrow r_1$\\
506 $n_2$&行末2グループ&
507 \Large
508 \fbox{を}{\color{blue!50!black}\gt\ltjruby[pre=1,mode=1,stretch=110]{流|暢}{りゆう|ちよう}}\vrule
509 &
510 $g_0\rightarrow W\rightarrow r_1\rightarrow g_2 \rightarrow r_2$\\
511 $n_3$&行頭1グループ&
512 \Large
513 \vrule{\color{blue!50!black}\gt\ltjruby[post=1,mode=1,stretch=011]{暢}{ちよう}}\fbox{に}
514 &
515 $r_2\rightarrow g_2$\\
516 $n_4$&行頭2グループ&
517 \Large
518 \vrule{\color{blue!50!black}\gt\ltjruby[post=1,mode=1,stretch=011]{流|暢}{りゆう|ちよう}}\fbox{に}
519 &
520 $W\rightarrow r_1\rightarrow g_2 \rightarrow r_2\rightarrow g_2$\\
521 $n_5$&行中&
522 \Large
523 \fbox{を}{\color{blue!50!black}\gt\ltjruby[post=0.5,pre=0.5,mode=1]{流|暢}{りゆう|ちよう}}\fbox{に}
524 &
525 $g_0\rightarrow W\rightarrow r_1\rightarrow g_2 \rightarrow r_2\rightarrow g_2$\\
526
527 \bottomrule
528 \end{tabular}
529 \caption{ルビの組み方と対応するノード並び}
530 \label{fig:node}
531 \end{figure}
532
533 \item なお,$r_i$達の高さ・深さは組み上がった後のそれである.
534 $g_i$,~$r_i$達の幅は,図\nobreak\ref{fig:node}に示したような対応に沿って算出する.
535 例えばこの場合,行中形$n_5$に対して
536 \[
537  g_0+r_1+g_2+r_2+g_2 = 3\,\mathrm{zw}-(0.25\,\mathrm{zw}\times 2)=2.5\,\mathrm{zw}
538 \]
539 という方程式が立つ(zwは親文字全角の幅,進入量込).
540 $n_1$から$n_5$まで計5本の方程式が立つが,これらはGau\ss の消去法で解くことができて
541 $g_i$,~$r_i$達の幅が求まる.
542 \item また,ルビ処理を統括しているwhatsit~$W$の値も
543 \[
544  \Node{whatsit $w$}{value: 2}\longrightarrow 
545  \Node{vlist $n_1$}{末1}\longrightarrow
546  \Node{vlist $n_2$}{末2}\longrightarrow
547  \Node{vlist $n_3$}{頭1}\longrightarrow
548  \Node{vlist $n_4$}{頭2}\longrightarrow
549  \Node{vlist $n_5$}{中}
550 \]
551 に置き換えておく.
552
553 \end{enumerate}
554
555 \item \LuaTeX の行分割処理を普通に行う.
556 \item 行分割の結果に従って,$g_i$,~$r_i$達を適切に置換する.
557
558 例えば行分割の結果
559 \begin{gather*}
560  (\text{other nodes})\longrightarrow
561  \Node{glue $g_0$}{}\longrightarrow \Node{whatsit~$W$}{元からある}\longrightarrow \Node{rule $r_1$}{}
562   \tag{行A}\\
563 \noalign{\hrulefill 行の境目\hrulefill}
564 \Node{rule $r_2$}{}\longrightarrow 
565  \Node{glue $g_2$}{}\longrightarrow (\text{other nodes})\tag{行B}
566 \end{gather*}
567 のようになったとしよう.
568 \begin{enumerate}
569 \item 処理は段落の上の行から順番に行われる.行Aの処理がまわってきたとしよう.
570
571 \item 行Aの先頭から順番に眺めていく.すると「whatsit~$W$由来」のノード,$g_0$,~$W$,~$r_1$が見つかり,
572 行Aはここで終わっている.
573
574 まず,行Aのhboxの中身からwhatsit~$W$を消去(リストから取り除くだけで,$W$のメモリを解放するわけではない)する.
575 $g_0$,~($W$,)~$r_1$というノードの並びは,「行末1グループ」$n_1$に対応しているので,
576 $g_0$,~$r_1$を行Aから除去・メモリ解放し,代わりに$n_1$を行Aの中身に追加する.
577
578 \item 次に行Bの処理にうつる.行Aでルビの処理は完了していない(2グループのルビなのにまだ1グループしか使っていない)ので,
579 「whatsit~$W$由来」のノードがいくつか行B内に残っているはずである.
580
581 案の定,$r_2$,~$g_2$というノード列が見つかった.これは「行頭1グループ」$n_3$に対応しているので,
582 $r_2$,~$g_2$を行Bから除去・メモリ解放し,代わりに$n_3$を行Bの中身に挿入する.
583
584 \item これで2グループとも使い切ったことになるので,
585 隔離しておいた$W$を,(使われなかった$n_2$,~$n_4$,~$n_5$などと共に)メモリ解放する.結果として
586 次のようになった:
587 \begin{gather*}
588  (\text{other nodes})\longrightarrow
589  \Node{vlist $n_1$}{末1}\tag{行A}\\
590 \noalign{\hrulefill 行の境目\hrulefill}
591 \Node{vlist $n_3$}{頭1}\longrightarrow (\text{other nodes})\tag{行B}
592 \end{gather*}
593 \end{enumerate}
594 \end{enumerate}
595
596 \newpage
597 \section{いくつかの例}
598 \def\rubytest{\ruby{黄金橋}{ゴールデンゲートブリッジ}\relax}
599
600 \setbox0=\vbox{\hsize=22\zw%
601 ああああ\rubytest いうえおかきくけこ
602 あ\rubytest いうえおかきくけこ
603 あ\rubytest いうえおかきくけこ
604 あ\rubytest いうえおかきくけこ
605 あ\rubytest いうえおかきくけこ
606 あ\rubytest いうえおかきくけこ}
607 %\directlua{ltj.ext_show_node_list(tex.box[0], '? ', print)}
608 \fbox{\box0}
609
610 \setbox0=\vbox{\hsize=30\zw\noindent
611 \texttt{baseheight=0.88}での例\\
612   ふぁいる\ruby[baseheight=0.88]{dvi}{ディーヴィーアイ}ファイル
613   \ruby[baseheight=0.88]{oo}{ほーげーふーが}漢字\\
614   ファイル\ruby[baseheight=0.88]{dvi}{ディーヴィーアイ}ふぁいる
615   \ruby[baseheight=0.88]{oo}{ほーげーふーが}漢字\\
616   ああ(\ruby{ほげ}{ふがふがふがふが})」\ruby{ほげ}{ふがふがふがふが}「
617   【\ruby{ほげ}{ふがふがふがふが}】\ruby{ほげ}{ふがふがふがふが}…
618 }
619 \fbox{\box0}
620
621 \def\rubytest{\ruby{国府津}{こうづ}\relax}
622 % グループルビ
623
624 \setbox0=\vbox{\hsize=18\zw%
625 あ\rubytest いうえおかきくけこ
626 あ\rubytest いうえおかきくけこ
627 あ\rubytest いうえおかきくけこ
628 あ\rubytest いうえおかきくけこ
629 あ\rubytest いうえおかきくけこ
630 あ\rubytest いうえおかきくけこ}
631 %\directlua{ltj.ext_show_node_list(tex.box[0], '? ', print)}
632 \fbox{\box0}
633
634 \def\rubytest{\ruby{●●|◆}{◆◆◆◆◆◆|●●●}\relax}
635 \setbox0=\vbox{\hsize=19\zw%
636 あ\rubytest いうえおかきくけこ
637 あ\rubytest いうえおかきくけこ
638 あ\rubytest いうえおかきくけこ
639 あ\rubytest いうえおかきくけこイ
640 あ\rubytest いうえおかきくけこ
641 あ\rubytest いうえおかきくけこウ
642 あ\rubytest いうえおかきくけこエ
643 あ\rubytest いうえおかきくけこ
644 あ\rubytest いうえおかきくけこ
645 あ\rubytest いうえおかきくけこ}
646 %\directlua{ltj.ext_show_node_list(tex.box[0], '? ', print)}
647 \fbox{\box0}
648
649 \def\rubytest{\ruby{●●|□}{◆◆◆|●●●}\relax}
650 \setbox0=\vbox{\hsize=19\zw%
651 あ\rubytest いうえおかきくけこ
652 あ\rubytest いうえおかきくけこ
653 あ\rubytest いうえおかきくけこ
654 あ\rubytest いうえおかきくけこイ
655 あ\rubytest いうえおかきくけこ
656 あ\rubytest いうえおかきくけこウ
657 あ\rubytest いうえおかきくけこエ
658 あ\rubytest いうえおかきくけこ
659 あ\rubytest いうえおかきくけこ
660 あ\rubytest いうえおかきくけこ}
661 %\directlua{ltj.ext_show_node_list(tex.box[0], '? ', print)}
662 \fbox{\box0}
663
664 \def\rubytest{\ruby{異|様}{い|よう}\relax}
665 \setbox0=\vbox{\hsize=19\zw%
666 あ\rubytest いうえくけ
667 あ\rubytest いうえくけこ
668 あ\rubytest いうえくけこ
669 あ\rubytest いうえくけこイ
670 あ\rubytest いうえおかきくけこ}
671 %\directlua{ltj.ext_show_node_list(tex.box[0], '? ', print)}
672 \fbox{\box0}
673
674 \def\rubytest{\ruby{□|■|□}{■■|□□□|■■}\relax}
675
676 \setbox0=\vbox{\hsize=23\zw%
677 あ\rubytest いうえおかきくけこうえおかきくけこ
678 あ\rubytest いうえおかきくけこうえおかきくけこ
679 あ\rubytest いう□おかきくけこうえおかきくけこ
680 あ\rubytest いう□おかきくけこうえおかきくけこ
681 あ\rubytest いう□おかきくけこうえおかきくけこ
682 あ\rubytest いうえおかきくけこ}
683 \fbox{\box0}
684
685 \begin{description}
686 \def\sample{又\ruby{承}{うけたまわ}る\quad \ruby{疎}{そ}\quad は\ruby{俄}{にわか}勉強
687   \quad 後\ruby{俄}{にわか}勉強\quad は\ruby{暁}{あかつき}に
688   は\ruby{俄}{にわか}に
689   \quad \ruby{休|憩|中}{きゆう|けい|ちゆう}かつ\ruby{視|聴|中}{し|ちよう|ちゆう}}
690 \item[標準] \sample
691 \item[肩つき] {\ltjsetruby{kata}\sample}
692 \end{description}
693
694 \newpage
695 \begin{LTXexample}[pos=t]
696 {\ltjsetruby{stretch=101}% 親文字均等割り禁止
697     \ruby{休|憩|中}{きゆう|けい|ちゆう}かつ\ruby{視|聴|中}{し|ちよう|ちゆう}%
698 }\quad
699 \textgt{\ruby{勉|強}{べん|きよう}と%
700     \ruby[fontcmd=\mcfamily]{勉|強}{べん|きよう}}\quad% ルビは明朝体
701 \ruby{コギト・エルゴ・スム}{Cogito ergo sum}\quad   % 欧文空白は伸長しない
702 \ruby[size=1]{Cogito ergo sum}{コギト・エルゴ・スム}% 欧文空白は伸長しない
703 \end{LTXexample}
704
705 \newpage
706 \section{『日本語組版処理の要件』20120403の例}
707
708 \newcommand*{\噂}{\CID{7642}}
709 \newcommand*{\倦}{\CID{7674}}
710 %================================== 横組
711 \paragraph{3.3.1節}\ 
712 \begin{LTXexample}[pos=t]
713 \obeylines
714 3.49 \ruby{君|子}{くん|し}は\ruby{和}{わ}して\ruby{同}{どう}ぜず
715 3.50 \ruby{人}{ひと}に\ruby{誨}{おし}えて\ruby{\倦}{う}まず
716 % モノルビ.面倒でも複数回の実行が必要
717 3.51 \ruby{鬼}{き}\ruby{門}{もん}の\ruby{方}{ほう}\ruby{角}{がく}を%
718      \ruby{凝}{ぎょう}\ruby{視}{し}する
719 % 熟語ルビ
720 3.52 \ruby{鬼|門}{き|もん}の\ruby{方|角}{ほう|がく}を\ruby{凝|視}{ぎよう|し}する
721 3.53 \ruby{茅場町}{かやばちよう}\quad\ruby{茅|場}{かや|ば}\ruby{町}{ちよう}
722 % 熟字訓
723 3.54 \ruby{紫陽花}{あじさい}\quad\ruby{坩堝}{るつぼ}\quad\ruby{田舎}{いなか}
724 % グループルビ
725 3.55 \ruby{模型}{モデル}\quad\ruby{顧客}{クライアント}\quad%
726      \ruby{境界面}{インターフエース}\quad\ruby{避難所}{アジール}
727 3.56 \ruby{編集者}{editor}\quad \ruby{editor}{エデイター}
728 \end{LTXexample}
729
730 \paragraph{3.3.3節}\ 
731 \begin{LTXexample}[pos=t]
732 \obeylines
733 3.58 に\ruby{幟}{のぼり}を\quad に\ruby[kata]{幟}{のぼり}を\quad%
734      \ruby{韋}{い}\ruby{編}{へん}\ruby{三}{さん}\ruby{絶}{ぜつ}
735 % 三分ルビ.JY3/mc/mc は本文書のプリアンブルで独自に定義
736 3.59 に\ruby[fontcmd=\kanjifamily{mc}\kanjiseries{mc}]{幟}{のぼり}を
737 % ルビ文字を小さくする
738 3.60 {\Large%
739   \ruby{韋}{い}\ruby{編}{へん}\ruby{三}{さん}\ruby{絶}{ぜつ}\quad% 比較用
740   \ltjsetruby{size=0.375}% 0.5 -> 0.375
741   \ruby{韋}{い}\ruby{編}{へん}\ruby{三}{さん}\ruby{絶}{ぜつ}}
742 \end{LTXexample}
743
744 \paragraph{3.3.4節}
745 3.61図(両側ルビ)は未サポートにより省略
746
747 \newpage
748 \paragraph{3.3.5節 モノルビ}\ 
749 \begin{LTXexample}[pos=t]
750 \obeylines
751 3.62 の\ruby{葯}{やく}に
752 3.63 版面の\ruby{地}{ち}に\quad 版面の\ruby[kata]{地}{ち}に
753 % 横組肩つきはしないが,現状では縦組未サポートだし,仕方ないね
754 3.65 の\ruby{砦}{とりで}に
755 {\ltjsetruby{kata}%
756 3.66上 の\ruby{旬}{しゆん}に\quad 後\ruby{旬}{しゆん}に
757 3.66下 の\ruby{旬}{しゆん}又\quad 後\ruby{旬}{しゆん}又}
758 \end{LTXexample}
759
760
761 \paragraph{3.3.6節 グループルビ}\ 
762 \begin{LTXexample}[pos=t]
763 \obeylines
764 3.67 は\ruby{冊子体}{コーデツクス}と
765 3.68 \ruby{模型}{モデル}\quad \ruby{利用許諾}{ライセンス}
766 % 両端を揃える流儀
767 3.69 {\ltjsetruby{stretchruby=010}%
768      \ruby{模型}{モデル}\quad \ruby{利用許諾}{ライセンス}}
769 % ルビが極端に短い場合
770 3.70 \ruby{なげきの聖母像}{ピエタ}\quad% ルビ全角まで許容
771      \ruby[maxmargin=0.75]{なげきの聖母像}{ピエタ}\\% ルビ全角1.5倍まで
772 % ルビが長い場合
773 3.71 \ruby{顧客}{クライアント}\quad \ruby{境界面}{インターフエース}
774 3.72 {\ltjsetruby{stretch=010, stretchbol=010, stretcheol=010}% はみ出さない流儀
775      \ruby{顧客}{クライアント}\quad \ruby{境界面}{インターフエース}}
776 \end{LTXexample} 
777
778 \newpage
779 \paragraph{3.3.7節 熟語ルビ}\ 
780 \begin{LTXexample}[pos=t]
781 \obeylines
782 3.73 \ruby{杞|憂}{き|ゆう}\quad \ruby{畏|怖}{い|ふ}\quad%
783      \ruby[kata]{杞|憂}{き|ゆう}\quad \ruby[kata]{畏|怖}{い|ふ}
784 3.74 の\ruby{流|儀}{りゆう|ぎ}を\quad   の\ruby{無|常}{む|じよう}を\quad%
785      の\ruby{成|就}{じよう|じゆ}を\quad の\ruby{紋|章}{もん|しよう}を\quad%
786      の\ruby{象|徴}{しよう|ちよう}を
787 % 熟語の構成を考慮した方法は現行ではできない.
788 % 行分割はできるのだが,「他の漢字にルビ全角までかかって良い」は難しい.
789 3.75 {\ltjsetruby{kata}%
790      の\ruby{流|儀}{りゆう|ぎ}を\quad   の\ruby{無|常}{む|じよう}を\quad%
791      の\ruby{成|就}{じよう|じゆ}を\quad の\ruby{紋|章}{もん|しよう}を\quad%
792      の\ruby{象|徴}{しよう|ちよう}を}
793 % モノルビ配置.望ましくない
794 3.76× の\ruby{流}{りゆう}\ruby{儀}{ぎ}を\quad の\ruby{無}{む}\ruby{常}{じよう}を\quad%
795
796 要調整 3.77\ {\ltjsetruby{stretchbol=121, stretcheol=121}% 行頭・行末揃えず
797      \hbox{\vrule\vbox{\hsize=10\zw ああああああああの%
798         \ruby{流|儀}{りゆう|ぎ}がある.}\vrule}\textbf{←なぜ改行できない}\quad%
799      \hbox{\vrule\vbox{\hsize=5\zw ……等の\ruby{無|常}{む|じよう}を}\vrule}}
800 \end{LTXexample} 
801
802 \paragraph{3.3.8節 ルビはみ出し}\ 
803 \begin{LTXexample}[pos=t]
804 \obeylines
805 3.78 \ruby{人}{ひと}は\ruby{死}{し}して\ruby{名}{な}を\ruby{残}{のこ}す
806 % 現在の自動設定の仕様では「脚」の前が四分だけ「要件」の例より空く
807 3.79 漢字の部首には\ruby{偏}{へん}・\ruby{冠}{かんむり}・\ruby{脚}{きやく}・%
808      \ruby{旁}{つくり}がある
809 3.79 漢字の部首には\ruby{偏}{へん},\ruby{冠}{かんむり},\ruby{脚}{きやく},%
810      \ruby{旁}{つくり}がある
811 \end{LTXexample}
812 \begin{LTXexample}[pos=t]
813 \obeylines
814 % もちろん手動で進入量を指定すれば話は別
815 3.79 漢字の部首には\ruby{偏}{へん}・\ruby{冠}{かんむり}・\ruby[pre=1]{脚}{きやく}・%
816      \ruby{旁}{つくり}がある
817 3.79 漢字の部首には\ruby{偏}{へん},\ruby{冠}{かんむり},\ruby[pre=1]{脚}{きやく},%
818      \ruby{旁}{つくり}がある
819 3.79 この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を
820 3.80 漢字の部首には「\ruby{偏}{へん}」「\ruby{冠}{かんむり}」「\ruby{脚}{きやく}」%
821 「\ruby{旁}{つくり}」がある
822 3.80 この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を
823 3.81× に\ruby{暁}{あかつき}の\kern-1\zw の\ruby{趣}{おもむき}を(良くない例)
824 3.82 に\ruby{暁}{あかつき}の\ruby{趣}{おもむき}を
825
826 % 漢字にルビを2分まで掛けても良い流儀
827 {%
828   \ltjsetparameter{rubypostintrusion={`好,0.5}}
829   \ltjsetparameter{rubypostintrusion={`具,0.5}}
830   \ltjsetparameter{rubypostintrusion={`材,0.5}}
831 3.83 この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を
832 3.83 この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を
833 }
834 % 平仮名にもルビを掛けない流儀
835 {\catcode`\<12%
836   \makeatletter\count@="3040\loop\relax\ifnum \count@<"30A0%
837   \ltjsetparameter{rubypreintrusion={\the\count@,0}, %
838     rubypostintrusion={\the\count@,0}}%
839   \advance\count@1 \repeat
840 3.84 この\ruby{\噂}{うわさ}の好きな人は\ruby{懐}{ふところ}ぐあいもよく、\ruby{檜}{ひのき}を
841 3.84 この\ruby{\噂}{うわさ}好きな人は\ruby{懐}{ふところ}具合もよく、\ruby{檜}{ひのき}材を
842 }
843 \end{LTXexample}
844 \begin{LTXexample}[pos=t]
845 \obeylines
846 3.85\ {\ltjsetruby{stretchbol=121, stretcheol=121}% 行頭・行末揃えず
847 \hbox{\vrule\vbox{\hsize=15\zw
848  \hskip9.5\zw……の\ruby{徑}{こみち}を……%
849 \hskip9\zw……の\ruby{徑}{こみち}を……}\vrule}}
850 3.86\ \hbox{\vrule\vbox{\hsize=15\zw
851  \hskip10\zw……の\ruby{徑}{こみち}を……%
852 \hskip9\zw……の\ruby{徑}{こみち}を……}\vrule}
853 3.87\  \hbox{\vrule\vbox{\hsize=15\zw
854  \hskip8\zw……共\ruby{飾り}{アクセサリー}等……%
855 \hskip9\zw……共\ruby{飾り}{アクセサリー}等……}\vrule}
856 \end{LTXexample}
857
858
859 \paragraph{圏点の例(常用漢字表前書きより)}
860 この表は,法令,公⽤⽂書,新聞,雑誌,放送など,⼀般の社会⽣活におい%
861 て\kenten[kenten=﹅]{現代の国語を書き表す}場合の\kenten{漢字使⽤の⽬安を⽰す}ものである。
862
863 \subparagraph{「﹅」の大きさを親文字の0.33倍にした例}
864 この表は,法令,公⽤⽂書,新聞,雑誌,放送など,⼀般の社会⽣活におい%
865 て\kenten[size=0.33, kenten=﹅]{現代の国語を書き表す}場合の\kenten{漢字使⽤の⽬安を⽰す}ものである。
866 \end{document}