X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=doc%2Fsample1.tex;h=094da7e0bb76d7f0ecd49d06fcf47c2881e4e429;hb=6abeb05c5b8703d1871f6d4e861b3505ed8100cf;hp=f3031e49a13db351b71fbc5b039fe6f2d41eb813;hpb=36a8a9d661627d42af4560e1631763b921a31494;p=luatex-ja%2Fluatexja.git diff --git a/doc/sample1.tex b/doc/sample1.tex index f3031e4..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 制限 @@ -52,34 +52,66 @@ \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 和文フォントの定義 @@ -97,7 +129,6 @@ JFM は和文文字の幅や,和文文字間の空白の入り方などを規 \globaljfont={:} % global に定義 \endtt - \item {\bf の指定について}\par\noindent 内部でluaotfloadパッケージを読み込んでいる.大きくわけて,以下の4種類がある. このうち,前の2つはluaotfloadパッケージの機能である. @@ -318,7 +349,9 @@ $n\notin [1,216]$の場合は,「どの文字範囲にも属さない|U+0080| \beginparagraph その他の命令 -\item dimen |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックから指定) +\item |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックにより指定)\hfil\break +今の版では,これは純粋なdimenレジスタではなくなっている. + \item dimen |\jQ|, |\jH|${}= 0.25\,{\rm mm}$. \item |\inhibitglue|: 指定箇所でのJFM由来のglue/kernの挿入を禁止する. @@ -332,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, @@ -359,7 +392,7 @@ ltj.define_jfm { } \endtt -全体は,「関数|ltj.define_jfm|にテーブルを引数として与える」という構造になっている. +全体は,「関数|luatexja.jfont.define_jfm|にテーブルを引数として与える」という構造になっている. 以下に,テーブルの中身を述べる. \item |dir|: 組方向を指定する.将来的にはいずれ縦組(|'tate'|)を実装したいが, 現時点では横組(|'yoko'|)のみの対応. @@ -437,9 +470,11 @@ $i$番の文字クラスの文字と$j$番の文字クラスの文字の間に \beginsection 互換用命令(書きかけ) {\tt luatexja-compat.sty}を読み込むことで,次が追加. -\item |\euc|, |\jis|, |\sjis|, |\kuten| +\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|. +\item |kansujichar={, }|~key in |\ltjsetparameter|. \enditem @@ -490,47 +525,9 @@ $p$は「現在の和文フォント」の番号もattribute |\ltj@curjfnt|と \item {\bf (luaotfloadパッケージによるグリフ置換等の処理はこの位置で)} -\item {\bf JFM由来glue/kernの挿入: |pre_linebreak_filter|, |hpack_filter| callbacks} - -ここで,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| callbacks} - -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| callbacks} + +動作の詳細については,{\tt jfmglue.pdf}(未完)を参照. \item {\bf ベースライン補正: |pre_linebreak_filter|, |hpack_filter| callbacks}