X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fsample1.tex;h=094da7e0bb76d7f0ecd49d06fcf47c2881e4e429;hb=2a89ff80358ba323dd8d07585322e346d320cbbf;hp=1e8c9bb16ebef9620e864a87f9158f72a3f0e836;hpb=9efef5f7e935fe48ca1c2fc49ae4361395946514;p=luatex-ja%2Fluatexja.git diff --git a/doc/sample1.tex b/doc/sample1.tex index 1e8c9bb..094da7e 100644 --- a/doc/sample1.tex +++ b/doc/sample1.tex @@ -11,7 +11,6 @@ \def\XyM{X\kern-.30em\smash{\raise.50ex\hbox{\UPSILON}}\kern-.30em{M}}% \def\XyMTeX{\XyM\kern-.1em\TeX}% - % main matter \centerline{\big Lua\TeX-jaパッケージ}\bigskip \centerline{\large\the\year/\the\month/\the\day}\medskip @@ -20,7 +19,7 @@ 本パッケージは,(最低でもp\TeX と同等の水準の)日本語組版をLua\TeX 上で実現させることを 目標としたマクロである.まだまだ足りないところはあるが,とりあえず動くようになった?ので公開する. - +{\bf 本文章の更新は事実上停止しています.以降の更新は{\tt manual.dtx}と,そこから作られる{\tt man-en.pdf}, {\tt man-ja.pdf}で行います.} \beginparagraph 特徴 @@ -31,7 +30,8 @@ ほげほげ){\gt (ふがふが} \endtt \item 欧文や和文のベースライン補正が可能. -\item p\TeX とある程度コマンド名が互換. +\item p\TeX とある程度コマンド名が互換ではあるが,{\bf 内部動作についてはp\TeX との100\%互換は +目指していません{\small (p\TeX で不自然なところがあれば,積極的に改める)\inhibitglue}}. \enditem \beginparagraph 制限 @@ -44,46 +44,74 @@ アクセントも,|make_accent|の処理をLuaコードで書けば可能だと思われます.} \item 数式中の日本語は想定していません.|\hbox|か何かで囲ってください. \item p\TeX にあった以下の機能はまだ実装していません. -\itemitem |\euc|, |\jis|, |\sjis|, |\kuten|といった,コード変換プリミティブ. -\itemitem |\kansuji|, |\kansujichar|. \itemitem |\showmode|, |\jfam|. \itemitem 縦組み関連一式.|\tate|, |\tfont|, |\tbaselineshift|, |\dtou|,$\,\ldots$ -\item 和文間・和欧文間空白の自動挿入がglobalでしかできていません. -←解決はさほど難しくないので,仕様を決定した後に書き上げます. \enditem \beginparagraph ファイル構成 - -\item {\tt luatexja-core.sty}: -コア部分.拡張子は{\tt sty}であるが,この単一のファイルでplain \TeX と\LaTeX 両方に -対応するように設計する方針である.しかし, -{\bf 現時点で\LaTeX での使用は全く考慮されていない.} -\item {\tt luatexja-core.lua}: コア部分に使われるLuaコード. -\item {\tt luatexja-jfont.lua}: 和文フォント定義部のLuaコード. -\item {\tt luatexja-xkanji.lua}: |\[x]kanjiskip|自動挿入処理のLuaコード. -\item {\tt luatexja-rmlgbm-data.lua}: 非埋込和文フォント用のデータ(小塚明朝Pr6N R由来). -\item {\tt luatexja-rmlgbm.lua}: 非埋込和文フォント (Ryumin-Light etc.) 定義部. -\item {\tt mk-rmlgbm-data.tex}: {\tt luatexja-rmlgbm-data.lua}作成用スクリプト +\item {\tt src/}: 核となる\TeX ソースとLuaコードはこのディレクトリ内に入っている. +\itemitem \TeX 用スタイルファイル達 +\itemT {\tt luatexja.sty}: 利用者はこのファイルを読み込む. +拡張子は{\tt sty}であるが,plain \TeX と\LaTeX 両方に対応させる方針である. +\itemT {\tt luatexja-core.sty}: +\itemT {\tt luatexja-base.sty}: +\itemT {\tt luatexja-cctbreg.sty}: +\itemT {\tt luatexja-compat.sty}: p\TeX 互換用primitive(|\euc|, |\kansuji|)定義部. +\itemT {\tt luatexja-compat-ptex.sty}: +\itemT {\tt luatexja-plain.sty}: +\itemT {\tt luatexja-kinsoku.tex}: 禁則用ペナルティ等のパラメータを書いたファイル. +{\tt ukinsoku.tex} (in up\TeX-0.30) から自動生成されたもの. + +\itemT {\tt mk-rmlgbm-data.tex}: {\tt luatexja-rmlgbm-data.lua}作成用スクリプト {\small(小塚明朝を{\tt luaotfload}で読み込んだ時のキャッシュが必要)\inhibitglue}. -\item {\tt luatexja-kinsoku.tex}: 禁則用ペナルティ等のパラメータを書いたファイル. -下のファイルによって{\tt ukinsoku.tex} (in up\TeX-0.30) から自動生成されたもの. -\item {\tt jfm-ujis.lua}: up\TeX-0.30の{\tt ujis.tfm}ベースのメトリックサンプル. -\item {\tt jfm-mono.lua}: 「全文字が全角幅」のメトリックサンプル. + +\itemitem \LaTeX 用スタイルファイル達 +\itemT {\tt luatexja-latex.sty}: +\itemT {\tt lltjdefs.sty}: +\itemT {\tt lltjfont.sty}: + + +\itemitem Luaコード達(旧フォーマット) +\itemT {\tt luatexja-core.lua}: コア部分に使われるLuaコード. +\itemT {\tt luatexja-rmlgbm-data.lua}: 非埋込和文フォント用のデータ(小塚明朝Pr6N R由来). +\itemT {\tt jfm-ujis.lua}: up\TeX-0.30の{\tt ujis.tfm}ベースのメトリックサンプル. +\itemT {\tt jfm-mono.lua}: 「全文字が全角幅」のメトリックサンプル. + +\itemitem Luaコード達(新フォーマット,{\tt src/luatexja/}以下) + +\itemT {\tt base.lua} +\itemT {\tt compat.lua}: p\TeX 互換用primitive(|\euc|, |\kansuji|)実装部. +\itemT {\tt jisx0208.lua}: |\euc|等で使うJIS~X~0208→Unicode変換表. +\itemT {\tt infomute.lua} +\itemT {\tt jfont.lua}: 和文フォント定義部のLuaコード. +\itemT {\tt rmlgbm.lua}: 非埋込和文フォント (Ryumin-Light etc.) 定義用コード. +\itemT {\tt jfmglue.lua}: 和文処理に伴う空白の挿入処理部. +\itemT {\tt math.lua}: 数式モード中の和文文字のフォント置換部分. +\itemT {\tt tangle.lua} +\itemT {\tt charrange.lua}: 「和文文字の範囲」管理部. +\itemT {\tt debug.lua} +\itemT {\tt inputbuf.lua}: 「和文文字直後の改行」処理用. +\itemT {\tt stack.lua}: Lua\TeX-ja スタック管理システム. \enditem \beginsection 使用方法 -大雑把に言うと,plain \TeX の状況で,以下のようにすればよい. +大雑把に言うと,plain \TeX の状況で,以下のようにするか, \begintt -\input luatexja-core.sty % ←マクロ本体を読み込み +\input luatexja.sty % ←マクロ本体を読み込み \jfont\tenipam={file:ipam.ttf:jfm=ujis} at 13.5\jQ \tenipam\parindent=1\zw \rm\tenipam abcほげほげ)(あいう本文本文…… \endtt +\LaTeX において preamble 部で +\begintt +\usepackage{luatexja} +\endtt +と書けばよい.標準では非埋込の標準和文フォントRyumin-Light, GothicBBB-Mediumが使われる. \beginparagraph 和文フォントの定義 @@ -101,7 +129,6 @@ JFM は和文文字の幅や,和文文字間の空白の入り方などを規 \globaljfont={:} % global に定義 \endtt - \item {\bf の指定について}\par\noindent 内部でluaotfloadパッケージを読み込んでいる.大きくわけて,以下の4種類がある. このうち,前の2つはluaotfloadパッケージの機能である. @@ -153,11 +180,11 @@ PSフォント名を直接指定することもでき, \endtt と指定している{\small(つまりLatin-1 Supplementの範囲は欧文扱い)\inhibitglue}. -TODO: 「{\ltjsetparameter{jacharrange={1}}× (|U+00D7|)}」等,ISO 8859-1領域 -にマッピングされた文字の扱い. -「{\ltjsetparameter{jacharrange={1}}¢ (|U+00A2|)}」はHalfwidth and -Fullwidth Formsに全角形(\char"FFE0)があるから%" -luaotfloadの置換処理に割り込めばよいが……. +%TODO: 「{\ltjsetparameter{jacharrange={1}}× (|U+00D7|)}」等,ISO 8859-1領域 +%にマッピングされた文字の扱い. +%「{\ltjsetparameter{jacharrange={1}}¢ (|U+00A2|)}」はHalfwidth and +%Fullwidth Formsに全角形(\char"FFE0)があるから%" +%luaotfloadの置換処理に割り込めばよいが……. \enditem @@ -180,8 +207,7 @@ p\TeX の|\prebreakpenalty|に対応した設定項目である. \itemitem : 文字コードを指定する.一旦補助カウンタに代入されるので, 16進法での数値の指定 (|"abcd|) や,%" 文字トークンによる指定 (|`あ|) も可能である. -\itemitem : penalty の値を0から10000までの自然数で指定する -{\small(範囲外でも可能だが)\inhibitglue}. +\itemitem : penalty の値を$-10000$から10000までの整数で指定する. \item |postbreakpenalty={, }|★\par\noindent 同様に,p\TeX の|\postbreakpenalty|に対応した設定項目である. @@ -199,17 +225,17 @@ p\TeX では,同一文字に対して|\prebreakpenalty|, |\postbreakpenalty| \item |jaxspmode={, }|★\par\noindent p\TeX の|\inhibitxspcode|に対応した設定項目である.で許される値は, -\itemitem |0|, |inhibit|: 前後の欧文文字との間の|\xkanjiskip|自動挿入を禁止. -\itemitem |2|, |preonly|: 前の欧文文字との間の|\xkanjiskip|自動挿入のみを許可. -\itemitem |1|, |postonly|: 後の欧文文字との間の|\xkanjiskip|自動挿入のみを許可. -\itemitem |3|, |allow|: 前後の欧文文字との間の|\xkanjiskip|自動挿入を許可. +\itemitem |0|, |inhibit|: 前後の欧文文字との間の|xkanjiskip|自動挿入を禁止. +\itemitem |2|, |preonly|: 前の欧文文字との間の|xkanjiskip|自動挿入のみを許可. +\itemitem |1|, |postonly|: 後の欧文文字との間の|xkanjiskip|自動挿入のみを許可. +\itemitem |3|, |allow|: 前後の欧文文字との間の|xkanjiskip|自動挿入を許可. \item |alxspmode={, }|★\par\noindent 同様に,p\TeX の|\xspcode|に対応した設定項目である. で許される値は, -\itemitem |0|, |inhibit|: 前後の和文文字との間の|\xkanjiskip|自動挿入を禁止. -\itemitem |1|, |preonly|: 前の和文文字との間の|\xkanjiskip|自動挿入のみを許可. -\itemitem |2|, |postonly|: 後の和文文字との間の|\xkanjiskip|自動挿入のみを許可. -\itemitem |3|, |allow|: 前後の和文文字との間の|\xkanjiskip|自動挿入を許可. +\itemitem |0|, |inhibit|: 前後の和文文字との間の|xkanjiskip|自動挿入を禁止. +\itemitem |1|, |preonly|: 前の和文文字との間の|xkanjiskip|自動挿入のみを許可. +\itemitem |2|, |postonly|: 後の和文文字との間の|xkanjiskip|自動挿入のみを許可. +\itemitem |3|, |allow|: 前後の和文文字との間の|xkanjiskip|自動挿入を許可. \item |yalbaselineshift=|: p\TeX の|\ybaselineshift|に対応したものであり, @@ -226,16 +252,49 @@ p\TeX では「和文が主」という考えからか,常に和文文字の また,この値を適切に調整することで,% {\small 異なる文字サイズの文字を「上下中央揃え」で組む}ことも可能である. -\item |kanjiskip=|★\inhibitglue: 後に述べる|\kanjiskip=|と同じ意味. -\item |xkanjiskip=|★\inhibitglue: 後に述べる|\xkanjiskip=|と同じ意味. -\item |jcharwidowpenalty=|★\inhibitglue: -後に述べる|\jcharwidowpenalty=|と同じ意味. -\item |autospacing[=]|★◎\par\noindent -%\item |autospacing[=]|★\par\noindent -和文文字間のglue(|\kanjiskip|)の自動挿入をするかしないかを制御. -\item |autoxspacing[=]|★◎\par\noindent -%\item |autoxspacing[=]|★\par\noindent -和欧文間のglue(|\xkanjiskip|)の自動挿入をするかしないかを制御. +\item |kanjiskip=|★\par\noindent +和文文字同士の間に入る空白量を指定.p\TeX の同名の命令と同様に, +基本的には段落/hbox終了時の値が,その段落/hbox全体に適用される. つまり, +\begintt +\ltjsetparameter{kanjiskip=3pt}あい% +{\ltjsetparameter{kanjiskip=10pt}うえ}} +\endtt +の組版結果は(段落終了時の値が$3\,{\rm pt}$のため), +$$ + \hbox{\ltjsetparameter{kanjiskip=3pt}あい{\ltjsetparameter{kanjiskip=10pt}うえ}} +$$ +となる. + +但し,|kanjiskip|の自然長が$\hbox{|\maxdimen|}=16383.99998\,{\rm pt}$の場合は, +\itemitem (和文文字の間それぞれについて)JFMに指定されている +|kanjiskip|の値を採用する. +\itemitem 左側JFM,右側JFMのどちらかにおいて指定されていれば,そちらを使用する. +\itemitem どちらにおいても指定されていない場合は,0とみなす. + +\item |xkanjiskip=|★\par\noindent +和文文字と欧文文字の間に入る空白量.p\TeX の同名の命令と同様. +これも,自然長が|\maxdimen|の場合は,JFMで指定された値を使う. + + +\item |jcharwidowpenalty=|★\par\noindent +段落において「最後の1文字のみが次の行に」くることを +抑制するためのpenalty値.このpenaltyは,段落内にある,最後の「|kcatcode|の最下位bitが +1で{\bf ない}ような和文文字」の直前に挿入される. + + +\item |autospacing[=]|\par\noindent +和文文字間のglue(|kanjiskip|)の自動挿入をするかしないかを制御. +p\TeX では段落/hbox 単位での設定となったが,Lua\TeX-ja では +そうではなくなった. +挿入可能な箇所の両端のノードにおいて,片方でも +この値がfalseなら自動挿入は行われる.つまり,例えば +\begintt +あ\ltjsetparameter{autospacing=false}いう +\endtt +の場合,「あい」の間には|kanjiskip|が挿入され,「いう」の間には入らない. +\item |autoxspacing[=]|\par\noindent +和欧文間のglue(|xkanjiskip|)の自動挿入をするかしないかを制御. +その他は|autospacing|と同様. \item |differentjfm=(large/small/average/both)|★◎\par\noindent 異なる$(\hbox{}, \hbox{})$である2つの和文文字の間の @@ -245,6 +304,8 @@ glue/kernの計算方法を設定する. \itemitem {\tt small}: 両者のうち小さい方. \itemitem {\tt average}: 両者の相加平均. \itemitem {\tt both}: 両者の合計値の幅をもつglue/kernを挿入する. +この指定は,JFM由来の|kanjiskip|の値が左右の和文文字で異なったときの +挙動にも適用される. \item |jacharrange={,,...}|: $\lvert\hbox{}\rvert$番の文字範囲の文字を和文扱いするか欧文扱いするかを設定する. @@ -280,7 +341,7 @@ $\lvert\hbox{}\rvert$番の文字範囲の文字を和文扱いする \item |jacharrange|: 文字範囲の番号$n$を第2引数にとり,$n$番の文字範囲が 和文文字扱いされていれば|0|,欧文文字扱いされていれば|1|を返す. -$n\notin [1,216]$の場合は,「どの文字範囲にも属さない|U+0100|以降の文字」に対しての結果を返す. +$n\notin [1,216]$の場合は,「どの文字範囲にも属さない|U+0080|以降の文字」に対しての結果を返す(しかし,前に述べたデフォルトでの設定のため,実際には|U+0100|以降となる). \item |chartorange|: 文字コードを第2引数にとり,それが属している文字範囲の番号を返す. \itemitem がUnicodeの範囲外または|0x80|未満ならば,|-1|を返す. @@ -288,13 +349,9 @@ $n\notin [1,216]$の場合は,「どの文字範囲にも属さない|U+0100| \beginparagraph その他の命令 -\item skip |\kanjiskip|: 和文文字同士の間に入る空白量を指定.p\TeX の同名の命令と同様. -\item skip |\xkanjiskip|: 和文文字と欧文文字の間に入る空白量.p\TeX の同名の命令と同様. -\item count |\jcharwidowpenalty|: 段落において「最後の1文字のみが次の行に」くることを -抑制するためのpenalty値.このpenaltyは,段落内にある,最後の「|kcatcode|の最下位bitが -1で{\bf ない}ような和文文字」の直前に挿入される. +\item |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックにより指定)\hfil\break +今の版では,これは純粋なdimenレジスタではなくなっている. -\item dimen |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックから指定) \item dimen |\jQ|, |\jH|${}= 0.25\,{\rm mm}$. \item |\inhibitglue|: 指定箇所でのJFM由来のglue/kernの挿入を禁止する. @@ -308,7 +365,7 @@ Lua\TeX-jaで用いる和文用のメトリック情報は,次のようなLua 見本として,|jfm-ujis.lua|を入れてある. \begintt -ltj.define_jfm { +luatexja.jfont.define_jfm { dir = 'yoko', zw = 1.0, zh = 1.0, [0] = { align = 'left', left = 0.0, down = 0.0, @@ -335,12 +392,17 @@ ltj.define_jfm { } \endtt -全体は,「関数|ltj.define_jfm|にテーブルを引数として与える」という構造になっている. +全体は,「関数|luatexja.jfont.define_jfm|にテーブルを引数として与える」という構造になっている. 以下に,テーブルの中身を述べる. \item |dir|: 組方向を指定する.将来的にはいずれ縦組(|'tate'|)を実装したいが, 現時点では横組(|'yoko'|)のみの対応. \item |zw|, |zh|: それぞれ|\zw|, |\zh|のフォントサイズに対する割合を記述する(必須). 通常は両方とも1.0となるだろう. +\item |kanjiskip|, |xkanjiskip|: それぞれ和文文字間グルー量,和欧文間グルー量を +\begintt +{, , } +\endtt +という形で,フォントサイズ単位で指定する. \item 数字のindex $i$を持った値:$i$番の文字クラスについての情報を記述する. \itemitem |glue|: 現在の文字クラスの文字の後に挿入するglueを指定する. この項目の内容は @@ -371,8 +433,9 @@ $i$番の文字クラスの文字と$j$番の文字クラスの文字の間に \noindent という意味である. -\itemitem |chars|: 文字クラスに属する「文字」達のUnicodeにおけるコード番号を -リストの形|{...}|で記述する. +\itemitem |chars|: 文字クラスに属する「文字」達をリストの形|{...}|で記述する. +文字の指定には,Unicodeにおけるコード番号か,その文字1文字だけからなる文字列(|'字'|のように) +を用いる. どの文字クラスにも属さなかった文字は,0番の文字クラスに属するとみなされる. そのため,0番以外の文字クラスではこの項目は必須である. @@ -404,6 +467,17 @@ $i$番の文字クラスの文字と$j$番の文字クラスの文字の間に \enditem +\beginsection 互換用命令(書きかけ) + +{\tt luatexja-compat.sty}を読み込むことで,次が追加. +\item |\euc|, |\jis|, |\sjis|, |\kuten|, |\ucs|: +それぞれEUC-JP,ISO-2022-JP,Shift-JIS,区点コードからUnicodeへの変換を行う. +JIS~X~0208→Unicodeへの変換テーブルとしては,up\TeX-0.30で用いられているものを利用している. +\item |\kansuji| +\item |kansujichar={, }|~key in |\ltjsetparameter|. +\enditem + + \beginsection 大まかな処理の流れ Lua\TeX-jaパッケージでは,次のような流れで実際の処理を行っている. @@ -414,14 +488,29 @@ Lua\TeX-jaパッケージでは,次のような流れで実際の処理を行 改行した箇所には自動的に空白が入るようになっている. だが,日本語ではそのような振る舞いは不自然であり,p\TeX でも 「和文文字で行が終わった場合,改行文字は無視する」という -使用になっている. +仕様になっている. そこで,入力が和文文字で終わった場合,コメント文字を挿入することにより -この問題を解決する方法をとっている. +この問題を解決する方法をとっている.{\small この部分のコードは前田氏のjafontspecパッケージの部分から拝借したが,挿入する文字を|%|から -(通常使用されることはないと思われる)|U+FFFFF|へと変更している. +(通常使用されることはないと思われる)|U+FFFFF|へと変更している.} + +しかし,現行Lua\TeX の仕様により,完全にp\TeX と同じというわけには +いかず,次のような動作になっている: +\itemitem 入力行の末尾が,正規表現で +\begintt +[:jchar:][\{\}]^*$ +\endtt +となっている場合,即ち,{\bf catcodeが11 or 12の和文文字の後に, +グループ境界文字(catcodeが1 or 2の文字.通常は\hskip\ltjgetparameter{xkanjiskip}|{|% +\hskip\ltjgetparameter{xkanjiskip}や\hskip\ltjgetparameter{xkanjiskip}|}|% +\hskip\ltjgetparameter{xkanjiskip})が任意個続いて +行が終わっていた}場合,この行の入力にコメント文字を追加. +\itemitem 上の「和文文字」「グループ境界文字」の判定は,処理対象の入力行の前行末尾の時点の +設定値をもとに行う.そのため,行の途中でcatcodeの変更を行った場合などで,p\TeX と異なる挙動 +を示す場合がある. -\item {\bf 和文フォントへの置換: |hyphenate|, |hpack_filter| callbacks} +\item {\bf 和文フォントへの置換: |hyphenate| callback} この段階の前では,和文文字であっても,それを内部で表している|glyph_node|~$p$は, 「|\tenrm あ|」のように,欧文フォントが指定されている状態になっている.しかし, @@ -436,49 +525,11 @@ $p$は「現在の和文フォント」の番号もattribute |\ltj@curjfnt|と \item {\bf (luaotfloadパッケージによるグリフ置換等の処理はこの位置で)} -\item {\bf JFM由来glue/kernの挿入: |pre_linebreak_filter|, |hpack_filter|} - -ここで,JFMに由来する和文文字間のglue/kernを挿入する. -基本的には連続する和文文字(を表すnode)間に挿入するが, -\itemitem 水平ボックスの先頭/末尾,段落の先頭/末尾には「文字コード|'boxbdd'|の文字」があると -見做して空白を挿入する. -\itemitem 和文文字とそうでないもの(欧文文字,ボックス等)の間に関しては, -和文文字でない方は「文字コード|'jcharbdd'|の文字」であると見做す. -\itemitem フォントの異なる2つの和文文字においても, -両者のフォントのJFMとsizeが一致した場合は, -挿入処理においては「同じフォント」であるかのように扱う. -\itemitem そうでない場合は,両者の間に「文字コード|'diffmet'|の文字」があると見做して, -両和文文字からそれぞれglue/kern |gb|, |ga|を計算し,そこから実際に入るglue/kernを -計算している(|\ltjsetparameter|中の|differentjfm|キーを参照). -\itemitem もうちょっと詳しく書くと,本処理前において,和文文字を表す -2つの連続した|glyph_node| $Q$, $P$の間には,次のnode達が挿入される: -$$ - \ldots,\ Q,\ (\hbox{|\kern|}\ w\,{\rm pt}),\ (\hbox{|\penalty|}\ p),\ -(\hbox{|\kern|}\ (k-w)\,{\rm pt}) -,\ P,\ \ldots -$$ -上に書いた全てのnodeが挿入されるとは限らず,また4つめのkernもglueに変わる可能性がある. -上に出てきた量の意味は次の通りである: -\itemT $w$: $Q$が行末にきたときに,行末からどれだけずらすかを指定した量. -\itemT $p$: $Q$の行末禁則用penaltyと$P$の行頭禁則用penaltyの合計値.ウィドウ防止用の -|\jcharwidowpenalty|が挿入される時は,値はここに加算される. -\itemT |\kern| $k$: 本来の$Q$と$P$の間に入る空き(glueであることも). -$w$のために自然長を補正している. - -\item {\bf |\kanjiskip|, |\xkanjiskip|の挿入: |pre_linebreak_filter|, |hpack_filter|} - -p\TeX の|adjust_hlist| procedureとほぼ同様の処理を用いて, -和文間glue |\kanjiskip|や和欧文間glue |\xkanjiskip|を -挿入する. -\itemitem 数式境界 (|math_node|) との間に|\xkanjiskip|を自動挿入するかの決定は, -p\TeX では数字{\tt 0}との間に挿入するかどうかで判定していたが,Lua\TeX-jaでは -「文字コード$-1$の文字」で判定している. -\itemitem 合字の周囲の空白挿入については,構成要素の文字列を通じて判断している.例えば, -「漢ffi字」という文字列に対して, -\itemT 「漢」と「ffi」間の空白挿入:「漢」と「f」間に入るかで判断 -\itemT 「ffi」と「字」間の空白挿入:「i」と「字」間に入るかで判断 - -\item {\bf ベースライン補正: |pre_linebreak_filter|, |hpack_filter|} +\item {\bf 和文処理グルーの挿入: |pre_linebreak_filter|, |hpack_filter| callbacks} + +動作の詳細については,{\tt jfmglue.pdf}(未完)を参照. + +\item {\bf ベースライン補正: |pre_linebreak_filter|, |hpack_filter| callbacks} この段階では,(主として)欧文文字のベースラインをずらす作業を行う.幸いにして, Lua\TeX で文字を表す|glyph_node|には|y_offset| fieldがあるので,作業は楽である. @@ -491,7 +542,7 @@ Lua\TeX で文字を表す|glyph_node|には|y_offset| fieldがあるので, \itemitem 文字 (|glyph_node|) \itemitem ボックス・rule(文中数式内部).これによって,数式全体が下がったように見えるはず. -\item {\bf 和文文字の幅の補正: |pre_linebreak_filter|, |hpack_filter|} +\item {\bf 和文文字の幅の補正: |pre_linebreak_filter|, |hpack_filter| callbacks} 例えば,括弧類は「フォント中では全角幅だが,組版では半角幅として扱う」ことが多いが,このように 文字幅を補正する処理を最後に行う.jafontspecパッケージのように,補正対象となる|glyph_node|~$p$%