%#! luatex doc-sample
\input doc-sampsty.tex % style file

\overfullrule=0pt
\def\LaTeX{L\kern-.36em\setbox0=\hbox{T}\vbox to\ht0{\hbox{\sevenrm A}\vss}\kern-.15em\TeX}
\xkanjiskip=0.25\zw plus .10\zw minus .10\zw
\font\mff=manfnt at 10pt
\def\mf{{\mff META{\rm\-}FONT}}
\def\textfontii{\the\textfont2 }
\def\AmS{{\textfontii A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
\def\UPSILON{\char'7}%
\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

\bigskip
本パッケージは，（最低でもp\TeX と同等の水準の）日本語組版をLua\TeX 上で実現させることを
目標としたマクロである．まだまだ足りないところはあるが，とりあえず動くようになった？ので公開する． 

\beginparagraph 特徴

\item 欧文フォント/和文フォントの内部独立管理．
\item 違う和文フォントでも「メトリックが同じ」なら，字間に空白を挿入する際には同じものとして扱う．
{\bf 例}: 「ほげほげ）{\gt （ふがふが}」は以下の出力より得られた:
\begintt
ほげほげ）{\gt （ふがふが}
\endtt
\item 欧文や和文のベースライン補正が可能．
\item p\TeX とある程度コマンド名が互換．
\enditem

\beginparagraph 制限

\item 全体的にテスト不足です．
\item 合字の前後の和欧文間空白の挿入処理は適当{\small（合字でない場合の処理をそのまま流用）\inhibitglue}．
\item {\bf 現時点で\LaTeX での使用は全く考慮されていません．``plain Lua\TeX''で使ってください．}
\item |\accent|を和文文字に対して使うことはできません．これは「フォントを後で置換する」という実装上，
仕方のないことだと思われます．
\item 数式中の日本語は想定していません．|\hbox|か何かで囲ってください．
\item p\TeX にあった以下の機能はまだ実装していません．
\itemitem |\euc|, |\jis|, |\sjis|, |\kuten|といった，コード変換プリミティブ．
\itemitem |\kansuji|, |\kansujichar|.
\itemitem |\showmode|, |\jfam|, |\jcharwidowpenalty|.
\itemitem 縦組み関連一式．|\tate|, |\tfont|, |\tbaselineshift|, |\dtou|,$\,\ldots$
\enditem

\beginparagraph ファイル構成


\item {\tt luatexja-core.sty}: 
マクロ本体．拡張子は{\tt sty}であるが，この単一のファイルでplain \TeX と\LaTeX 両方に
対応するように設計する方針である．しかし，
{\bf 現時点で\LaTeX での使用は全く考慮されていない．}
\item {\tt luatexja-core.lua}: Luaコード部分．
\item {\tt luatexja-kinsoku.tex}: 禁則用ペナルティ等のパラメータを書いたファイル．
下のファイルによって{\tt ukinsoku.tex} (in up\TeX-0.30) から自動生成されたもの．
\item {\tt luatexja-kinsoku\_make.tex}: 上の{\tt luatexja-kinsoku.tex}を作るためのファイル．
\item {\tt luatj-ujis.lua}: up\TeX-0.30の{\tt ujis.tfm}ベースのメトリックサンプル．
\item {\tt luatj-mono.lua}: 「全文字が全角幅」のメトリックサンプル．
\enditem

\beginsection 使用方法

大雑把に言うと，plain \TeX の状況で，以下のようにすればよい．
\begintt
\input luatexja-core.sty               % ←マクロ本体を読み込み
\loadjfontmetric{mt}{ujis}             % ←メトリックの読み込み
\font\tenipam={file:ipam.ttf}at13.5\jQ 
\jfont\tenipam{mt}                     % 和文フォントとして認識
\tenipam\parindent=1\zw 
\yabaselineshift=32768                 % 32768 sp =  0.5 pt

\rm abcほげほげ）（あいう本文本文……
\endtt

\beginsection 実装解説

\beginparagraph attributes, dimensions,$\,\ldots$

以下はLua\TeX-jaパッケージ内で使用するattributeやその他の種類のレジスタである．
上3つは内部処理用なので利用者が意識することはない．それ以外は，p\TeX に類似の名前の
primitiveがあることから，意味は容易にわかるだろう:

\item attribute |\luatexja@curjfn|: 現在の和文フォント番号

p\TeX では内部のグローバル変数で「現在の横組/縦組和文フォント」をそれぞれ保持していたが，
当然ながら欧文用\TeX ではそのようなことはそのままではできない．
node $p$が保持しているattribute |\luatexja@curjfn|の値$k$は，
「もし$p$の中身が和文文字であれば，そのフォントは$k$番の番号のフォントである」という意味をもつ．

\item attribute |\luatexja@icflag|: この属性をもつkernはイタリック補正由来である

p\TeX では，|\kern|由来のkernと，イタリック補正由来のkernを内部で区別していた．しかし，
欧文用の\TeX ではそのような区別はなく，Lua\TeX においても区別がないようである．

\item language |\luatexja@japanese|: 「日本語」に対応する|\language|番号

\item attribute |\yabaselineshift|: 欧文文字ベースラインの補正量．
\itemitem {\bf sp${}=2^{-16}\,{\rm pt}$単位の整数値}で指定．
正値を指定すると，欧文文字は下にずれる．
\itemitem 数式中では，boxやruleもこの量だけずれる
（よって，行中数式は全体が|\yabaselineshift|だけずれたように見えるだろう）．
\item attribute |\ykbaselineshift|: 和文文字ベースラインの補正量．

p\TeX では「和文が主」という考えからか，常に和文文字のベースラインが基準であり，
欧文文字の方をずらすことになっていた．しかし，「欧文の中に和文をちょっと入れる」ような場合では，
逆に和文文字をずらす方が理にかなっているので，和文文字のベースラインもずらせるようにした．

また，これを用いることで%
{\small 異なる文字サイズの文字を「上下中央揃え」で組む}ことも可能．
\item skip |\kanjiskip|: 和文文字同士の間に入る空白量．
\item skip |\xkanjiskip|: 和文文字と欧文文字の間に入る空白量．
\item dimen |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」（メトリックから指定）
\item dimen |\jQ|, |\jH|${}= 0.25\,{\rm mm}$
\enditem


\beginparagraph 和文フォントの定義

Lua\TeX-jaでは，大雑把にいうと
和文フォントは「実際の字形」と「和文用のメトリック情報」の組である．
\item メトリック情報は，和文文字の幅や，和文文字間の空白の入り方などを規定する．
p\TeX における{\tt JFM}ファイルのようなものと考えてよい．
\enditem

このため，和文フォントを使うには，以下のような手順が必要である．

\enum |\font<font>={file: <fontfile>} at 13.5\jQ|

\TeX の|\font| primitiveを用いてひとまずフォントを読み込む．和文フォントの場合は，
このようにTrueType/OpenTypeフォントをこのように読み込むことになると思われる%
{\small（システムにインストールされているフォントの指定も可能と思われる）\inhibitglue}．

この段階では，制御綴<font>は「現在の欧文フォントを変更する」意味である．

\enum |\loadjcharmetric{<key>}{<file>}|

Luaソース|luatj-<file>.lua|に書かれたメトリック情報を読み込む．
内部では<key>というキーで参照されることとなる．同じkeyで2回以上読み込むことはできないが，
同じメトリック情報に異なるキーをつけることは差し支えない．

\enum |\jfont<font>{<key>}|

制御綴<font>を「metric keyが<key>の和文フォント」と認識させる．
\itemitem 制御綴<font>で指定されるフォントから，
<key>で参照されるメトリックの字幅情報のみを反映させた仮想フォント$v$を作る．
\itemitem 制御綴<font>の意味を，「$\hbox{|\luatexja@curjfn|}\leftarrow v$」というように変更する．
これにより，以後<font>を発行しても，欧文フォントは変わらない．

\enditem

\beginparagraph その他命令類

\item |\inhibitxspcode{<code>}{<num>}|, |\xspcode{<code>}{<num>}|,\hfil\break
|\prebreakpenalty{<code>}{<num>}|,  |\postbreakpenalty{<code>}{<num>}|

これらはp\TeX の対応する命令と意味は概ね同じであるが，以下の点が異なる．

\itemitem 同じ文字コードについて|\prebreakpenalty|, |\postbreakpenalty|を両方指定することが
可能．
\itemitem |\xspcode|（欧文文字用）は|\inhibitxspcode|（和文文字用）の別名であり，
\begintt
\xspcode{12289}{1}  \inhibitxspcode{12289}{1}
\endtt
は全く同じ意味である．|\xspcode|, |\inhibitxspcode|の第2引数の意味は異なるが，
両者の意味は文字コードにより判断している．

\item |\inhibitglue|: 指定箇所での和文フォントメトリック由来のglue/kernの挿入を禁止する．
内部的には，|user_id|が30111のwhatsit nodeを作成している{\small（メトリック由来の
glue/kern挿入処理で役目を終え，削除される）\inhibitglue}．
\enditem


\beginparagraph 大まかな処理の流れ

Lua\TeX-jaパッケージでは，次のような流れで処理を行う．

\item 行末空白の削除: |process_input_buffer| callback

通常，\TeX において改行は空白とほぼ同じ意味であり，
改行した箇所には自動的に空白が入るようになっている．
だが，日本語ではそのような振る舞いは不自然であり，p\TeX でも
「和文文字で行が終わった場合，改行文字は無視する」という
使用になっている．

そこで，入力が和文文字で終わった場合，コメント文字を挿入することにより
この問題を解決する方法をとっている．
この部分のコードは前田氏のjafontspecパッケージの部分から拝借したが，挿入する文字を|%|から
（通常使用されることはないと思われる）|U+FFFFF|へと変更している．

\item 和文フォントへの置換: |hyphenate|, |hpack_filter| callbacks

この段階の前では，和文文字であっても，それを内部で表している|glyph_node| $p$は，
「|\temrm あ|」のように，欧文フォントが指定されている状態になっている．しかし，
$p$は「現在の和文フォント」の番号もattribute |\luatexja@curjfn|として保持している．そのため，
この段階では，「和文文字が格納されている」|glyph_node| $p$に対して，次を行う．

\itemitem $p$のフォントをattribute |\luatexja@curjfn|の値に置換．
\itemitem $p$の|language| fieldを|\luatexja@japanese|の値に置換．
誤って和文文字間でハイフネーションがされてしまうのを防止するため．

\item メトリック由来glue/kernの挿入: |pre_linebreak_filter|, |hpack_filter|

ここで，メトリックに由来する和文文字間のglue/kernを挿入する．
基本的には連続する和文文字間に挿入するが，
\itemitem 水平ボックスの先頭/末尾，段落の先頭/末尾には「文字コード|'boxbdd'|の文字」があると
見做して空白を挿入する．
\itemitem 和文文字とそうでないもの（欧文文字，ボックス等）の間に関しては，
和文文字でない方は「文字コード|'jcharbdd'|の文字」であると見做す．
\itemitem フォントの異なる2つの和文文字においても，
両者のフォントのmetric keyとsizeが一致した場合は，挿入処理においては「同じフォント」であるかのように扱う．
\itemitem  そうでない場合は，両者の間に「文字コード|'diffmet'|の文字」があると見做して，
両和文文字からそれぞれglue/kern |gb|, |ga|を計算し，そこから実際に入るglue/kernを，
関数|ltj.calc_between_two_jchar_aux|で計算している：
\itemT |gb|, |ga|の片方がglue，もう片方がkernの場合は，glue側のみ挿入．
\itemT そうでないときは，両者の平均値の空白を挿入する．

\item |\kanjiskip|, |\xkanjiskip|の挿入: |pre_linebreak_filter|, |hpack_filter|

p\TeX の|adjust_hlist| procedureと同様の処理を用いて，
和文間glue |\kanjiskip|や和欧文間glue |\xkanjiskip|を
挿入する．
\itemitem p\TeX と同様に，これらの自動挿入は（box/段落ごとに）
|\[no]auto[x]spacing|を用いて制御できる．
\itemitem 数式境界 (|math_node|) との間に|\xkanjiskip|を自動挿入するかの決定は，
p\TeX では数字{\tt 0}との間に挿入するかどうかで判定していたが，Lua\TeX-jaでは
「文字コード|'math'|の文字」で判定している．


\item ベースライン補正: |pre_linebreak_filter|, |hpack_filter|

この段階では，（主として）欧文文字のベースラインをずらす作業を行う．幸いにして，
Lua\TeX で文字を表す|glyph_node|には|y_offset| fieldがあるので，作業は楽である．

補正量は，attribute |\luatexja@yablshift|の値（先も書いた通り，sp単位）である．和文文字の
補正量は|\luatexja@ykblshift|の値で指定されるが，以前の「和文フォントへの置換」処理において，
|\luatexja@yablshift|へと値を移し変えているので，この段階では|\luatexja@yablshift|の値のみを気にしている．


さて，実際に補正されるのは次の場合である:
\itemitem 文字 (|glyph_node|)
\itemitem ボックス・rule（文中数式内部）．これによって，数式全体が下がったように見えるはず．
\enditem 

\beginparagraph 和文フォントメトリックについて

Lua\TeX-jaで用いる和文用のメトリック情報は，次のような構文で書かれたLuaファイルである．
見本として，|luatj-ujis.lua|を入れてある．

\item |jfm.dir|: 組方向を指定する．将来的にはいずれ縦組（|'tate'|）を実装したいが，
現時点では横組（|'yoko'|）のみの対応．
\item |jfm.zw|, |jfm.zh|: それぞれ|\zw|, |\zh|のフォントサイズに対する割合を記述する．
通常は両方とも1.0となるだろう．
\item |jfm.define_char_type(<class>, <chars>)|

p\TeX 用{\tt JFM}で言うところの「文字クラス」を定義する．
\itemitem <class>は文字クラスを表す1以上$\hbox{\tt0x800}=2048$未満の整数．
\itemitem <chars>には，<class>に属する「文字」達のUnicodeにおけるコード番号を
リストの形|{...}|で記述する．

また，このリストには，以下の「仮想的な文字」も指定可能である．
\itemT |'\boxbdd'|: 水平ボックスの先頭/末尾，段落の先頭/末尾．
\itemT |'jcharbdd'|: 和文文字達の連続の境界．
\itemT |'diffmet'|: 異なるメトリックの和文文字間に入るglueの計算に使われる．
\item |jfm.define_type_dim(<class>, <left>, <width>, <height>, <depth>, <italic>)|

文字クラス<class>ごとに，文字の寸法のフォントサイズに対する割合を記述する．
\itemitem <left>: 例えば開き括弧類は組版をする際には半角幅だが，TrueTypeフォント内では
左に半角空白が付け加わって全角幅となっていることが多い．このような場合，逆に
TrueTypeフォントを基準にすると，「左に半角幅ずらす」ことをしないといけない．
<left>はその「左へのずらし量」を指定する．
\itemitem <width>, <height>, <depth>: それぞれ幅，高さ，深さ．
\itemitem <italic>: イタリック補正値．

\item |jfm.define_glue(<bclass>, <aclass>, <width>, <stretch>, <shrink>)|

文字クラス<bclass>の文字と<aclass>の文字の間に，自然長<width>，伸び<stretch>, 縮み<shrink>
（いずれもフォントサイズ基準）のglueを挿入する．

\item |jfm.define_kern(<bclass>, <aclass>, <width>)|

文字クラス<bclass>の文字と<aclass>の文字の間に，幅<width>のkernを挿入．


\enditem



\vfill\eject
\leftline{{\big 組版サンプル}\hfill
\noindent 出典: 日本語Wikipediaの「\TeX」の項，2011/3/10}

\bigskip
%% sample
\TeX（読み方については、「読み方」の小節を参照）は数学者・計算機科学者である
ドナルド・クヌース (Donald~E. Knuth) により作られた組版処理ソフトウェアである。

\beginsection 名称について

製作者であるクヌースによって以下のように要請されている。

\beginparagraph 表記法

正しくは “\TeX”と表記するが、それができない場合には
“{\tt TeX}”と表記する（“{\tt TEX}”と表記するのは誤り）。

\beginparagraph 読み方

\TeX はギリシャ文字の T-E-X（タウ・イプシロン・カイ）であるから、「テックス」ではなく、
ギリシャ語読みの [tex]（「テフ」）のように発音するのが正しい。
しかしそのような発音は難しいので、クヌースは「テック」と読んでも構わないとしている。
日本では「テフ」または「テック」という読み方が広まっている。

\beginsection 機能

\TeX はマークアップ言語処理系であり、チューリング完全性を備えた関数型言語でもある。
文章そのものと、文章の構造を指定する命令とが混在して記述されたテキストファイルを読み込み、
そこに書かれた命令に従って文章を組版して、組版結果を{\tt DVI}形式のファイルに書き出す。
{\tt DVI}形式というのは、装置に依存しない (device-independent) 中間形式である。

{\tt DVI}ファイルには紙面のどの位置にどの文字を配置するかといった情報が書き込まれている。
実際に紙に印刷したりディスプレイ上に表示したするためには、{\tt DVI}ファイルを解釈する
別のソフトウェアが用いられる。{\tt DVI}ファイルを扱うソフトウェアとして、各種のヴューワや
Post\-Scriptなど他のページ記述言語へのトランスレータ、プリンタドライバなどが利用されている。

組版処理については、行分割およびページ分割位置の判別、ハイフネーション、リガチャ、
およびカーニングなどを自動で処理でき、その自動処理の内容も種々のパラーメータを変更する
ことによりカスタマイズできる。数式組版についても、多くの機能が盛り込まれている。
\TeX が文字などを配置する精度は$25.4 / (72.27\times 2^{16})\,{\rm mm}$%
（約$5.363\,{\rm nm}$、$4{,}736{,}286.72\,{\rm dpi}$）である。

\TeX の扱う命令文の中には、組版に直接係わる命令文の他に、新しい命令文を定義するための
命令文もある。\TeX のこの機能を使って使用者が独自に作った命令文はマクロと呼ばれ、
こうした独自の改良をマクロパッケージと呼ばれる形で配布できる。

比較的よく知られている\TeX 上のマクロパッケージには、クヌース自身による plain \TeX、
一般的な文書記述に優れた\LaTeX\ ({\tt LaTeX})、数学的文書用の\AmS-\TeX などがある。
一般の使用者は、\TeX を直接使うよりも、\TeX に何らかのマクロパッケージを読み込ませたものを
使うことの方が多い。そのため、これらのマクロパッケージのことも “\TeX” と呼ぶ場合があるが、
本来は誤用である。

\TeX のマクロパッケージには、他にも次のようなものなどがある。

\item B{\sc ib}\TeX\ ({\tt BibTeX}) ……参考文献リストの作成に用いる。
\item S{\sc li}\TeX\ ({\tt SLiTeX}) ……プレゼンテーション用スライドの作成に用いる。
\item \AmS-\LaTeX\ ({\tt AMS-LaTeX}) ……
数学的な文書の記述に強い\AmS-\TeX の機能と\LaTeX の機能を併せ持つ。
\item \XyMTeX\ ({\tt XyMTeX}) ……化学構造式の描画に用いる。
\item MusiX\TeX\ ({\tt MusiXTeX}) ……楽譜の記述に用いる。
\enditem

\TeX とそれに関連するプログラム、および\TeX のマクロパッケージなどは CTAN（Comprehensive TeX Archive Network、
包括 TeX アーカイブネットワーク）からダウンロードできる。


\beginsection 数式の表示例

たとえば
\begintt
-b \pm \sqrt{b^{2} - 4ac} \over 2a
\endtt
は以下のように表示される。
$$
-b \pm \sqrt{b^{2} - 4ac} \over 2a
$$

また、
\begintt
f(a,b) = \int_{a}^{b}\frac{1 + x}{a + x^{2} + x^{3}}dx
\endtt
は以下のように表示される。
$$
f(a,b) = \int_{a}^{b}{1 + x \over a + x^{2} + x^{3}}dx
$$


\beginsection 生い立ち

\TeX は、クヌースが自身の著書The Art of Computer Programmingを書いたときに、組版の汚さに憤慨し、
自分自身で心行くまで組版を制御するために作成したとされている。開発にあたって、伝統的な組版および
その関連技術に対する広範囲にわたる調査を行った。その調査結果を取り入れることで、\TeX は
商業品質の組版ができる柔軟で強力な組版システムになった。

\TeX はフリーソフトウェアであり、ソースコードも公開されていて、誰でも改良を加えることができる。
その改良版の配布も、\TeX と区別できるような別名を付けさえすれば許される。また、\TeX は非常に
バグが少ないソフトウェアとしても有名で、ジョーク好きのクヌースが、バグ発見者に対しては
前回のバグ発見者の2倍の懸賞金をかけるほどである。この賞金は小切手で払われるのだが、貰った人は
記念に取っておく人ばかりなので、結局クヌースの出費はほとんど無いという。

クヌースは\TeX のバージョン 3 を開発した際に、これ以上の機能拡張はしないことを宣言した。
その後は不具合の修正のみがなされ、バージョン番号は 3.14、3.141、3.1415、$\ldots$というように
付けられている。これは更新のたびに数字が円周率に近づいていくようになっていて、
クヌースの死の時点をもってバージョン$\pi$として、バージョンアップを打ち切るとのことである。

クヌースは\TeX の開発と同時に、\TeX で利用するフォントを作成するためのシステムである
\mf も開発した。こちらのバージョン番号は 2.71、2.718、2.7182、$\ldots$というように、
更新のたびに数字がネイピア数に近づいていくようになっている。さらにクヌースは\mf を使って、
\TeX の初期設定欧文フォントであるComputer Modernのデザインも行った。

\TeX および\mf は、これもクヌース自身によって提唱されている文芸的プログラミング\ 
(Literate Programming) を実現する{\tt WEB}というシステムでPascalへトランスレートされることを
前提に記述されている。しかし実際には{\tt WEB2C}でC言語に変換してコンパイルされ実行形式を
得ることが多い。

\beginsection \TeX の日本語化

日本語組版処理のできる日本語版の\TeX および\LaTeX には、アスキー・メディアワークスによるp\TeX\ 
(pTeX) およびp\LaTeX\ (pLaTeX) と、NTTの斉藤康己によるNTT J\TeX\ (NTT JTeX) およびNTT J\LaTeX\
(NTT JLaTeX) などがある。

\TeX の日本語対応において技術的に最も大きな課題は、複数バイト文字コードへの対応である。
p\TeX（および前身の日本語\TeX）は、JIS X 0208を文字集合とした文字コード（ISO-2022-JP、EUC-JP、
およびShift\_JIS）を直接扱う。DVIフォーマットは元々16ビット以上の文字コードを格納できる仕様が
含まれていた。しかしオリジナルの英語版では使われていなかったため、既存プログラムの多くはp\TeX が
出力するDVIファイルを処理できない。またフォントに関係するファイルフォーマットが拡張されている。
これに対してNTT J\TeX は、複数の1バイト文字セットに分割することで対応している。例えば、
ひらがなとカタカナは内部的には別々の1バイト文字セットとして扱われる。このためにオリジナルの
英語版からの変更が小さく、移植も比較的容易である。ファイルフォーマットが同じなので英語版の
プログラムでDVIファイル等を処理することもできる。しかし後述するフォントのマッピングの問題が
あるため、実際には多くの使用者がNTT J\TeX 用に拡張されたプログラムを使っている。

使用する日本語用フォントについてはp\TeX が写研フォントの使用を、NTT J\TeX が大日本印刷フォントの
使用を前提としており、それぞれフォントメトリック情報（フォントの文字寸法の情報）をバンドルして
配布している。しかし有償であるこれらのフォントのグリフ情報を持っていなくても、画面表示や印刷の
際に使用者が利用できる他の日本語用フォントで代用することができる。つまり写研フォントや
大日本印刷フォントのフォントメトリック情報を用いて文字の位置を固定し、画面表示や印刷には
他の日本語用フォントを用いていることが可能である。このため日本語化された\TeX 関係プログラムの
ほとんどは、画面表示や印刷で実際に使うフォントを選択できるように、フォントのマッピング
（対応付け）を定義する機能を持っている。

歴史的には、アスキーが日本語\TeX の PC-9800 シリーズ対応版を販売したために個人の使用者を中心に
普及した。一方、NTT J\TeX は元の英語版プログラムからの変更が比較的小さいという利点を受けて、
UNIX®およびUNIX互換OSを使う大学や研究機関の関係者を中心に普及した。

しかし現在では次に挙げる理由から、日本語対応\TeX としてp\TeX が使われていることが多い。

\item UNIX®用、およびUNIX互換OS用の主な日本語対応\TeX 配布形態である
ptexliveやptetex3がp\TeX のみを採用している。
\item Microsoft Windows用の主な日本語対応\TeX 配布形態であるW32\TeX が
p\TeX を扱える（NTT J\TeX も扱える）。
\item p\TeX の扱い方を解説する文献の方が、NTT J\TeX のものに比べて、
出版物とWeb上文書の両方で多い。
\item p\TeX は縦組みにも対応しているが、NTT J\TeX は対応していない。
\enditem

\beginsection \TeX による組版の作業工程

\TeX を利用して組版を行うには、通常次のような作業工程を取る。

\enum テキストエディタなどを用いて、文章に組版用命令文を織り込んだソースファイルを作成する。
\enum OSのコマンドラインから “|tex FileName.tex|” などと入力して\TeX を起動し、
  {\tt DVI}ファイルを生成させる。
\itemitem ソースファイルにエラーがあれば、修正して再度\TeX を起動する。
\enum {\tt DVI}ウェアとよばれる{\tt DVI}命令文を解するソフトウェアを用いて組版結果を表示し、確認する。
\itemitem {\tt DVI}ウェアにはxdvi/xdvikやdviout for Windowsなどの{\tt DVI}ヴューア、
  Dvips(k)やdvipdfm/DVIPDFM$x$などのファイル形式変換ソフトウェアなどがある。
\itemitem {\tt DVI}ファイルを{\tt DVI}ヴューアで画面表示または印刷する、
  あるいはPDFやPost\-Scriptに変換して画面表示または印刷することで、組版結果を確認する。
\itemitem 修正の必要があれば、ソースファイルを修正して再度{\tt DVI}ファイルを作成、確認する。
\enditem

この間、作業工程が変わるたびにそれぞれのプログラムを切り替えたり、
扱う文書が大きいと章ごとにソースファイルを分割して管理したりと、比較的煩雑な作業を伴う。
そのため、この工程に係わる各種のプログラムやソースファイルの管理を一元的に行う
\TeX 用の統合環境がいくつか作成されている。

\beginparagraph GUI環境と\TeX

GUIはPCの普及に一役買ったが、同時にGUIしか触ったことのないPC利用者が増加した。
そのような利用者が、コマンドラインでの操作を余儀なくされる\TeX を非常に扱いづらく
感じてしまうのは否めないことである。
このため、GUIに特化した\TeX 用統合環境もいくつか作成されている。
\end
