X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fsample1.tex;h=b4e3f0ea4b2695d80f0f4f92ba9ef6069002a17b;hb=cfd3ad7961c4538d018120a9fa76fab9c157fce4;hp=13bfbf213e5a92810859b713fb7fe2849da4ce59;hpb=b73c5df1cbca76aca6df18b086becb828cb945d1;p=luatex-ja%2Fluatexja.git diff --git a/doc/sample1.tex b/doc/sample1.tex index 13bfbf2..b4e3f0e 100644 --- a/doc/sample1.tex +++ b/doc/sample1.tex @@ -40,13 +40,15 @@ \item {\bf 現時点で\LaTeX での使用は殆ど考慮されていません.今は``plain Lua\TeX''で使ってください.} \item |\accent|を和文文字に対して使うことはできません. これは「フォントを後で置換する」という実装上,仕方のないことだと思われます. -{\small|\/|を試験的に日本語にも対応させました.|make_accent|の処理をLuaコードで書けば可能だと思われます.} +{\small|\/|を試験的に日本語にも対応させました. +アクセントも,|make_accent|の処理をLuaコードで書けば可能だと思われます.} \item 数式中の日本語は想定していません.|\hbox|か何かで囲ってください. \item p\TeX にあった以下の機能はまだ実装していません. \itemitem |\euc|, |\jis|, |\sjis|, |\kuten|といった,コード変換プリミティブ. \itemitem |\kansuji|, |\kansujichar|. -\itemitem |\showmode|, |\jfam|, |\jcharwidowpenalty|. +\itemitem |\showmode|, |\jfam|. \itemitem 縦組み関連一式.|\tate|, |\tfont|, |\tbaselineshift|, |\dtou|,$\,\ldots$ + \enditem @@ -149,11 +151,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 @@ -176,8 +178,7 @@ p\TeX の|\prebreakpenalty|に対応した設定項目である. \itemitem : 文字コードを指定する.一旦補助カウンタに代入されるので, 16進法での数値の指定 (|"abcd|) や,%" 文字トークンによる指定 (|`あ|) も可能である. -\itemitem : penalty の値を0から10000までの自然数で指定する -{\small(範囲外でも可能だが)\inhibitglue}. +\itemitem : penalty の値を$-10000$から10000までの整数で指定する. \item |postbreakpenalty={, }|★\par\noindent 同様に,p\TeX の|\postbreakpenalty|に対応した設定項目である. @@ -195,20 +196,21 @@ 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 の|\baselineshift|に対応したものであり,欧文文字のベースライン補正量をdimensionで指定する. +p\TeX の|\ybaselineshift|に対応したものであり, +欧文文字のベースライン補正量をdimensionで指定する. \itemitem 正の値を指定すると,その分だけ欧文文字は下にずれることとなる. \itemitem 数式中では,boxやruleもこの量だけずれる\hfil\break (よって,行中数式は全体が|yalbaselineshift|だけずれたように見える). @@ -221,16 +223,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つの和文文字の間の @@ -240,6 +275,8 @@ glue/kernの計算方法を設定する. \itemitem {\tt small}: 両者のうち小さい方. \itemitem {\tt average}: 両者の相加平均. \itemitem {\tt both}: 両者の合計値の幅をもつglue/kernを挿入する. +この指定は,JFM由来の|kanjiskip|の値が左右の和文文字で異なったときの +挙動にも適用される. \item |jacharrange={,,...}|: $\lvert\hbox{}\rvert$番の文字範囲の文字を和文扱いするか欧文扱いするかを設定する. @@ -275,7 +312,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|を返す. @@ -283,12 +320,6 @@ $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 dimen |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックから指定) \item dimen |\jQ|, |\jH|${}= 0.25\,{\rm mm}$. \item |\inhibitglue|: @@ -299,53 +330,109 @@ glue/kern挿入処理で役目を終え,削除される)\inhibitglue}. \beginsection JFMについて -Lua\TeX-jaで用いる和文用のメトリック情報は,次のような構文で書かれたLuaファイルである. +Lua\TeX-jaで用いる和文用のメトリック情報は,次のようなLuaファイルである. 見本として,|jfm-ujis.lua|を入れてある. -\item |jfm.dir|: 組方向を指定する.将来的にはいずれ縦組(|'tate'|)を実装したいが, +\begintt +ltj.define_jfm { + dir = 'yoko', zw = 1.0, zh = 1.0, + [0] = { + align = 'left', left = 0.0, down = 0.0, + width = 1.0, height = 0.88, depth = 0.12, italic=0.0, + glue = { + [1] = { 0.5 , 0.0, 0.5 }, [3] = { 0.25, 0.0, 0.25 } + } + }, ... + [1] = { + chars = { + 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, + 0x3016, 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F + }, + align = 'right', left = 0.0, down = 0.0, ... + }, ... + [5] = { + ..., + glue = { + [1] = { 0.5 , 0.0, 0.5 }, + [3] = { 0.25, 0.0, 0.25 } + }, + kern = { [5] = 0.0 } + }, ... +} +\endtt + +全体は,「関数|ltj.define_jfm|にテーブルを引数として与える」という構造になっている. +以下に,テーブルの中身を述べる. +\item |dir|: 組方向を指定する.将来的にはいずれ縦組(|'tate'|)を実装したいが, 現時点では横組(|'yoko'|)のみの対応. -\item |jfm.zw|, |jfm.zh|: それぞれ|\zw|, |\zh|のフォントサイズに対する割合を記述する. +\item |zw|, |zh|: それぞれ|\zw|, |\zh|のフォントサイズに対する割合を記述する(必須). 通常は両方とも1.0となるだろう. -\item |jfm.define_char_type(, )| +\item |kanjiskip|, |xkanjiskip|: それぞれ和文文字間グルー量,和欧文間グルー量を +\begintt +{, , } +\endtt +という形で,フォントサイズ単位で指定する. +\item 数字のindex $i$を持った値:$i$番の文字クラスについての情報を記述する. +\itemitem |glue|: 現在の文字クラスの文字の後に挿入するglueを指定する. +この項目の内容は +\begintt +{ [] = { , , }, ... } +\endtt +というテーブルであり,各要素は + +{\par\medskip\advance\leftskip3\zw\noindent\rightskip2\zw +$i$番の文字クラスの文字と$j$番の文字クラスの文字の間に, +自然長,伸び, 縮み(フォントサイズ基準)なる +glueを挿入 +\par\medskip} + +\noindent という意味である. -p\TeX 用{\tt JFM}で言うところの「文字クラス」を定義する. -\itemitem は文字クラスを表す1以上$\hbox{\tt0x800}=2048$未満の整数. -\itemitem には,に属する「文字」達のUnicodeにおけるコード番号を -リストの形|{...}|で記述する. -\itemitem どの文字クラスにも属さなかった文字は,自動的に0番の文字クラスに属するとみなされる. +\itemitem |kern|: 現在の文字クラスの文字の後に挿入するkernを指定する. +この項目の内容も, +\begintt +{ [] = , ... } +\endtt +というテーブルであり,各要素は + +{\par\medskip\advance\leftskip3\zw\noindent\rightskip2\zw +$i$番の文字クラスの文字と$j$番の文字クラスの文字の間に,\hfil\break +幅のkernを挿入 +\par\medskip} + +\noindent という意味である. + +\itemitem |chars|: 文字クラスに属する「文字」達をリストの形|{...}|で記述する. +文字の指定には,Unicodeにおけるコード番号か,その文字1文字だけからなる文字列(|'字'|のように) +を用いる. +どの文字クラスにも属さなかった文字は,0番の文字クラスに属するとみなされる. +そのため,0番以外の文字クラスではこの項目は必須である. また,このリストには,以下の「仮想的な文字」も指定可能である. \itemT |'lineend'|: 行末. この「文字」を0以外の文字クラスに設定することで,ぶら下げ組のような組版も可能になる. -例えば,句点類の文字クラスが2のとき, -\begintt - jfm.define_char_type(8,{'linebdd'}}) - jfm.define_kern(2, 8, -0.5) -\endtt -と指定すればよい. \itemT |'boxbdd'|: 水平ボックスの先頭/末尾,段落の先頭/末尾. \itemT |'jcharbdd'|: 和文文字達の連続とそれ以外のもの(例えば欧文文字)との境界. \itemT |'diffmet'|: 異なるメトリックの和文文字間に入るglueの計算に使われる. +\enditem -\item |jfm.define_type_dim(,,,,,,)| - -文字クラスごとに,文字の寸法のフォントサイズに対する割合を記述する. -\itemitem : 例えば開き括弧類は組版をする際には半角幅だが,TrueTypeフォント内では -左に半角空白が付け加わって全角幅となっていることが多い.このような場合,逆に -TrueTypeフォントを基準にすると,「左に半角幅ずらす」ことをしないといけない. -はその「左へのずらし量」を指定する. -\itemitem : 同様に,「下へのずらし量」を指定する. -\itemitem , , : それぞれ幅,高さ,深さ. -\itemitem : イタリック補正値(未実装). +\noindent {\bf +以下の3項目は,文字クラスに属する文字が「仮想的な文字」達だけでない場合に必須.} -\item |jfm.define_glue(, , , , )| +\itemitem |align|: |'left'|, |'middle'|, |'right'|のどれかを指定する. -文字クラスの文字との文字の間に,自然長,伸び, 縮み -(いずれもフォントサイズ基準)のglueを挿入する. +例えば,開き括弧類は組版をする際には半角幅だが,TrueTypeフォント内では +左に半角空白が付け加わって全角幅となっていることが多い.そのような場合, +|align='right'|と指定することで, +「半角幅の領域に(右詰めで)フォントの実際の字形を入れる」といったことができる. -\item |jfm.define_kern(, , )| +\itemitem |width|, |height|, |depth|, |italic|: +それぞれ幅,高さ,深さ,そしてイタリック補正値をフォントサイズに対する割合で指定する. +例外として,|width='prop'|の場合には,その文字クラスは特に幅を定めず, +実際のフォントにおける文字幅そのままで出力する. -文字クラスの文字との文字の間に,幅のkernを挿入. +\itemitem |left|, |down|: それぞれ左右,上下方向のずらし量を指定する. +|align|項目のため,|left|はほとんどの場合0で良いだろう. \enditem @@ -366,7 +453,7 @@ Lua\TeX-jaパッケージでは,次のような流れで実際の処理を行 この部分のコードは前田氏のjafontspecパッケージの部分から拝借したが,挿入する文字を|%|から (通常使用されることはないと思われる)|U+FFFFF|へと変更している. -\item {\bf 和文フォントへの置換: |hyphenate|, |hpack_filter| callbacks} +\item {\bf 和文フォントへの置換: |hyphenate| callback} この段階の前では,和文文字であっても,それを内部で表している|glyph_node|~$p$は, 「|\tenrm あ|」のように,欧文フォントが指定されている状態になっている.しかし, @@ -381,7 +468,7 @@ $p$は「現在の和文フォント」の番号もattribute |\ltj@curjfnt|と \item {\bf (luaotfloadパッケージによるグリフ置換等の処理はこの位置で)} -\item {\bf JFM由来glue/kernの挿入: |pre_linebreak_filter|, |hpack_filter|} +\item {\bf JFM由来glue/kernの挿入: |pre_linebreak_filter|, |hpack_filter| callbacks} ここで,JFMに由来する和文文字間のglue/kernを挿入する. 基本的には連続する和文文字(を表すnode)間に挿入するが, @@ -410,12 +497,12 @@ $$ \itemT |\kern| $k$: 本来の$Q$と$P$の間に入る空き(glueであることも). $w$のために自然長を補正している. -\item {\bf |\kanjiskip|, |\xkanjiskip|の挿入: |pre_linebreak_filter|, |hpack_filter|} +\item {\bf |kanjiskip|, |xkanjiskip|の挿入: |pre_linebreak_filter|, |hpack_filter| callbacks} p\TeX の|adjust_hlist| procedureとほぼ同様の処理を用いて, -和文間glue |\kanjiskip|や和欧文間glue |\xkanjiskip|を +和文間glue |kanjiskip|や和欧文間glue |xkanjiskip|を 挿入する. -\itemitem 数式境界 (|math_node|) との間に|\xkanjiskip|を自動挿入するかの決定は, +\itemitem 数式境界 (|math_node|) との間に|xkanjiskip|を自動挿入するかの決定は, p\TeX では数字{\tt 0}との間に挿入するかどうかで判定していたが,Lua\TeX-jaでは 「文字コード$-1$の文字」で判定している. \itemitem 合字の周囲の空白挿入については,構成要素の文字列を通じて判断している.例えば, @@ -423,7 +510,7 @@ p\TeX では数字{\tt 0}との間に挿入するかどうかで判定してい \itemT 「漢」と「ffi」間の空白挿入:「漢」と「f」間に入るかで判断 \itemT 「ffi」と「字」間の空白挿入:「i」と「字」間に入るかで判断 -\item {\bf ベースライン補正: |pre_linebreak_filter|, |hpack_filter|} +\item {\bf ベースライン補正: |pre_linebreak_filter|, |hpack_filter| callbacks} この段階では,(主として)欧文文字のベースラインをずらす作業を行う.幸いにして, Lua\TeX で文字を表す|glyph_node|には|y_offset| fieldがあるので,作業は楽である. @@ -436,7 +523,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$%