この追加パッケージは以下の機能を提供する.詳細な仕様については17章を参照してほしい.
行末文字の位置調整
pTEX
では,(是非はともかく)「行末の読点はぶら下げか二分取りか全角取り のいずれかに」のように行末文字と実際の行末の位置関係を2
通り以上にすることは面倒で あった.和文フォントメトリックだけでは「常に行末の読点はぶら下げ」といったことしかで きず,前の文に書いたことを実現するには\def \。{%
\penalty10000 % 禁則ペナルティ
\hbox to0pt {。\hss}\penalty0 % ぶら下げの場合
\kern.5\zw\penalty0 % 二分取りの場合
\kern.5\zw\penalty0 % 全角取りの場合 }
のような命令を定義し,文中の全ての句点を \。で書くことが必要だった.
luatexja-adjust パッケージは,上で述べた行末文字と実際の行末との位置関係を
2
通り以上から自動的に選択する機能を提供する.
pdfTEX
と同じように,「TEX
による行分割の後で行末文 字の位置を補正する」方法と「行分割の過程で行末文字の位置を考慮に入れる」方法を選べる ようにした(luatexja-adjustパッケージの既定では前者).優先順位付きの行長調整
pTEX
では,行長調整において優先度の概念が存在しなかったため,図 8 上段における半角分の半端は,図 8中段のように,鍵括弧周辺の空白と和文間空白(
kanjiskip)
の両方によって負担される.しかし,「日本語組版処理の要件」[5]
やJIS X 4051 [7]
において は,このような状況では半端は鍵括弧周辺の空白のみで負担し,その他の和文文字はベタ組で 組まれる(図8下段)ことになっている.luatexja-adjustパッケージの提供する第2
の機能は,[5]
や[7]
における規定のような,優先順位付きの行長調整である.•
優先度付き行長調整は,段落を行分割した後に個々の行について行われるものである.その……だから,①より𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(a)
……だから,①より 𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(b) 図9.高い行が連続したときの状況
ため,行分割の位置は変化することはない.
\hbox{...}
といった「途中で改行できない水平ボックス」では(たとえ幅が指定されていても)無効である.
•
優先度付き行長調整を行うと,和文処理グルーの自然長は変化しないが,伸び量や縮み量は 一般に変化する.そのため,既に組まれた段落を\unhbox
などを利用して組み直す処理を 行う場合には注意が必要である.「中身までみた」行送り計算 複数行に渡る文章を組版するときには行間に空きが入ることが普通で ある.
TEX
では各行が一つずつの水平ボックスをなしていることを思い出すと,隣り合った2
つの行(つまり水平ボックス)の間の空きは次のようにして決まるのだった:•
「通常に組んだときの行間」𝑑を,\baselineskip
から「前の行」の深さと「次の行」の高 さを加えたものを引いた値とする.•
𝑑 ≥\lineskiplimit
の場合,標準の行送り\baselineskip
で組んでも十分な間隔がある と判断され,2
行の間には長さ𝑑の空白が挿入される.つまり行送りは\baselineskip
.•
𝑑 <\lineskiplimit
の場合,2
行の間には長さ\lineskip
の空白が挿入される.そのた め(設定値によるが,多くの場合)行送りは\baselineskip
より広がる.ここで,
TEX
は行送りの決定で「高さ・深さを取っているものが行のどの水平位置にあるか」は一切考慮しないことに注意してほしい.そのため,図 9
(a)
のように「必要以上に行間が空 いて見える」状況が起こることがある.luatexja-adjust パッケージでは,「通常に組んだときの行間」𝑑 を各行の中身の文字・グルー・
ボックスの寸法を勘案して計算するという方法を利用できるようにした.この機能を使うと,
図9
(b)
のように行間の空きが必要以上に大きくなることを避けることができる.•
段落中の隣り合った二行だけでなく,行間の空きは新たに水平ボックスℎを(内部・外部問 わず)垂直モードで追加した時にも自動で挿入される.その場合には,前段落で述べた「中 身までみる」処理は– 現在のリストにおける最後のノード*26が水平ボックスℎ′であり,かつ –
\prevdepth
の値とそのℎ′の深さの値が一致している場合にのみ発動するようにしている.
•
行の中身に水平ボックス ℎ″ が入ってくることもあるが,その場合は ℎ″ の中身までは参照 しない.参照するようにしてしまうと,\smash
など手動で行った高さ・深さ調整の意味が なくなってしまうからである.段階的な行送り調整 既に述べたように,「通常に組んだときの行間」𝑑 が
\lineskiplimit
より*26最後のノードが\parskipによるグルーであった場合のみさらに一つ前のノードを参照する
……だから,①より𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(a):無効
……だから,①より 𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(b):0.25\baselineskip刻み
……だから,①より𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(c): 0.5\baselineskip刻み
……だから,①より 𝑎2
𝑏 =1 + √5
2 .
よって𝑏 = 1 − √5
2 である.
これを②式に代入すると……
(d):\baselineskip刻み 図10.段階的な行送り増加
小さい場合,
TEX
標準では行間は\lineskip
となるのだった.このとき行送りは「前の行 の深さ」,「次の行の高さ」,\lineskip
の3
つの和になるわけだが,場合によっては行送り を「\baselineskip
の整数倍」などと切りのいい値に揃えたいという状況が考えられなくも ない.luatexja-adjustパッケージでは,𝑑 <
\lineskiplimit
のときに行送りを\baselineskip
の linestep factor倍ずつ増減させて行間が
\lineskip
以上となるような,最小の(1 + 𝑘 ⋅linestep factor)\baselineskip
(𝑘は 整数)の値とする機能を利用できるようにした.図 10の
(a)
がこの機能を無効にした状況で,(b), (c), (d)
がそれぞれlinestep factorを0.25, 0.5, 1
とした状況である.なお,この機能は表組時
(\halign, \valign)
には無効である.LaTEX
における表組環境(tabular,
array
など)では,\baselineskip, \lineskip
はどちらも0
に設定されているので(代わりに各行に
\@arstrut
という支柱が入る)ために意味がないことと,数式を内部で表組を使って組む
align
環境などではかえって行間が不揃いになってしまうからである.luatexja-adjustパッケージは,上記で述べた
4
機能を有効化/
無効化するための以下の命令を提供する.これらはすべてグローバルに効力を発揮する.
\ltjenableadjust[...]
...
に指定したkey-value
リストに従い,「行末文字の位置調整」「優先順位付きの行長調整」「『中身までみた』行送り計算」「段階的な行送り調整」を有効化
/
無効化する.指定できるキー は以下の通り.lineend=[false,true,extended] 行末文字の位置調整の機能を無効化
(false)
,「行分割後 に調整」の形で有効化(true)
,「行分割の仮定で考慮」の形で有効化(extended)
する.priority=[false,true] 優先順位付きの行長調整を無効化
(false)
,または有効化(true)
. profile=[false,true]「中身までみた」行送り計算を無効化(false)
,または有効化(true)
. linestep=[false,true] 段階的な行送り調整を無効化(false)
,または有効化(true)
. どのキーともキー名のみを指定した場合は値としてtrue
が指定されたものと扱われる.互換性の為,オプション無しでただ
\ltjenableadjust
が呼び出された場合は,\ltjenableadjust[lineend=true,priority=true]
と扱われる.
\ltjdisableadjust
luatexja-adjustパッケージの機能を無効化する.
\ltjenableadjust[lineend=false,priority=false,profile=false,linestep=false]
と同義.
また,次のパラメータが
\ltjsetparameter
内で追加される.いずれもグローバルに効力を発 揮する.stretch priority
={
⟨list
⟩}
kanjiskip,
xkanjiskip,および「JAglue以外のグルー」を,「行を自然長より 伸ばす」場合の調整に用いる優先度を指定する.指定方法は,⟨
list
⟩の中にkey-value list
の形でstretch_priority={kanjiskip=-35,xkanjiskip=-25,others=50}
のようにして行う.キー名
kanjiskip, xkanjiskip
についてはそのままの意味であり,others
キーが「JAglue以外のグルー」を表す.各キーの値は,JFM
グルーにおける「優先度𝑖」を10𝑖 に対応させた整数値であり,大きい方が先に伸ばされることを意味している.初期値は {kanjiskip=-35,xkanjiskip=-25,others=50}であり,「優先度−4」と指定されている
JFM
グルーが最も伸びにくいようになっている.shrink priority
={
⟨list
⟩}
同様に,「行を自然長より縮める」場合の調整に用いる優先度を指定する.それ以外はstretch priorityと指定の形式は変わらない(初期値も変わらない).
linestep factor
=
⟨float
⟩ 段階的な行送り調整の際,\baselineskip
の自然長の何倍単位で行送りを 変えるかを指定する.0
を指定すると無効になるのと変わらない.また負数を指定すると,そ の絶対値が指定されたかのように扱われる.初期値は0.5
(つまり半行単位)である.profile hgap factor
=
⟨float
⟩「中身まで見た」行送り計算の際,前の行にある深さが大きいものと次の行にある高さが大きいものが水平方向にどれだけ離れていないといけないかを「