MuLTeX Note
				桜井貴文(sakurai@math.s.chiba-u.ac.jp)
				千葉大 理学部 数学・情報数理学科


[] MuLTeXの多国語コード

コマンドラインのオプションおよびtexmf.cnfによる多国語コードの指定につ
いては次節で述べる。

MuLTeXはISO2022に基づく多国語を扱う。ただし、(今の所)文字集合用のレジ
スタとしてはG0とG1しか使わない。(locking-shiftはまだSIとSOしかimplement
していない。) 各ファイルで使う文字コードを宣言するには、そのファイルで 
\mlinputcode というコマンドを実行する。するとそれ以後(正確にはこのコマ
ンドを含む行の次の行から)のファイルの内容をその文字コードによるものと
して解釈する。たとえば、
	\mlinputcode{1}{\mcsascii}{\mcsjp}
とする。各引数の意味は以下の通り。
    第1引数: 0、1、または2。
	0ならばISO2022にはしたがわず、各バイトをそのまま1文字として解釈する。
	このとき第2、3引数は無視される。(originalのTeXと同じ。)
	1ならばISO2022にしたがってファイルの文字コードを解釈する。
	2ならば第2、3引数に従って文字セットをdesignateするが、以後escape
	sequence等をISO2022に従って解釈をすることはない。
    第2引数: G0にdesignateする文字セット。
    第3引数: G1にdesignateする文字セット。
そして、\mlinputcode を実行した時点で、G0はGLにinvokeされG1はGRにinvoke
される。

MuLTeXで扱える文字セットには番号がふられていて、文字セットを指定するに
はその番号を使う。(mtexbase.texの最初のほうを参照。) したがって、上記
の例では、日本語に関してはJISによる表現とEUCによる表現の両方を受け付け
ることになる。(もちろん、escape sequenceによりG1にdesignateする文字セッ
トを変更する操作をしない間、であるが。)

\mlinputcode により文字コードが宣言されたファイルで \input した場合、 
\input されたファイルでの文字コードは、新に宣言しない限り、\input した
ファイルでの文字コードが引きつがれる。また \mlinputcode による宣言はそ
のファイルが終われば無効になる。(つまりここで、「\input filename とし
た場合そこにfilenameの中味を置いたのと同じ」というTeXの原則が崩れるこ
とになるが、文字コードに関してはこのほうが自然であろう。)

ファイルを越えてそれ以後 \input されるファイルがデフォルトで使う文字コー
ドを宣言するには、\defmlinputcode を使う。

文字セットの表現にはshift-jisのようにISO2022による表現の範疇に入らない
ものもある。このようなものも宣言可能にするために、G1へのdesignateを拡
張解釈(誤用)して8bitめが立っているbyteの解釈とみなす。(\mlinputcode の
実行の時点で G1はGRへinvokeする。) したがって、そのような表現を文字セッ
トであるかのようにみなし、\mlinputcode, \defmlinputcode の第2引数に書
けることにする。たとえば、
	\mlinputcode{1}{\mcsascii}{\mcssjis}
とすると、日本語に関してはJISによる表現とShift-JISによる表現の両方を受
け付けることになる。
	\mcsnone	8bitめが立っている文字は無視する
	\mcseight	8bitめが立っている文字はそのまま
	\mcssjis	Shift-JIS
	\mcsbigvh	Big5
	\mcsbigve	Big5 eten

出力は基本的には7bit環境への出力とするが、G1はGRへinvokeされ、1つの文
字セットだけ固定してG1へdesignateできる。たとえば
	\defmllogcode{1}{\mcsjp}
とすると、ログファイルへの日本語の出力はEUCとなる。そして、入力と同様
にG1へのdesignateを拡張解釈(誤用)するので、たとえば
	\defmllogcode{1}{\mcssjis}
とすると、ログファイルへの日本語の出力はShift-JISとなり、また\mcsnone
は存在しない文字セットを表すことにしているので、
	\defmllogcode{1}{\mcsnone}
とすると、すべての文字セットを7bitで出力する。

端末への出力の文字コードを変更するには \defmltermcode を、\openoutで作
るファイルの文字コードの指定をするには \defmlwritecode を、dviのspecial
命令中の文字コードの指定をするには \defmlspeccode を使う。


[] MuLTeXの多国語コード

ファイルの多国語コードは、以下の方法により指定できる。
1. コマンドラインのオプションによりファイルの漢字コード
	mul(la)tex -code=値 ファイル
2. texmf.cnf中の ml_input_code の設定によりファイルのデフォルトの漢字コード
	ml_input_code = 値
3. 上記の \mlinputcode による方法

ここで1と2の値は、
	ascii, tex, jis7, iso-2022-7bit,
	junet, euc, euc-japan, euc-china, euc-korea, euc-kr,
	latinX (X=1..5), iso-8859-X (X=1..5), grk, crl,
	sjis, bigv, bigvet
のいずれか、または、\mlinputcode の3つの引数を
	第1引数*256*256+第2引数*256+第3引数
という値によりまとめて16進数で表わしたものである。


[] フォント

MuLTeXは、NTT JTeXとは異なり、2byteの多国語文字集合をサブフォントに分
割せず 1つのフォントとして扱うことにした。このように変更したのは、日本
語以外についてはどのようにサブフォントに分割するのがよいか不明であり、
わかったとしてもそのたびに本体にサブフォントへの分割に関する部分を組み
込むのでは柔軟性を欠き不便だからである。

2byte文字のためのtfmとしては、jfmすなわちASCII日本語TeXで使っているの
と同じ形式を使っているが、(今の所?)文字幅を知るためにだけ使っており、 
glueの入り方は違うので、ASCII日本語TeXで使っている min*.tfm, goth*.tfm
を使っても同じ結果は得られない。(必要なglueが入らなくて、みにくい出力
になる。) このキットでは、NTT JTeXで使っているdm*,dg*と同じmetricをも
つjfm(すなわちモノスペースのフォント)を用意している。


[] 多国語フォントのloadの仕方

多国語フォントをloadするには、\font によりフォントをloadし \fontmcs によ
りそのフォントが属する文字セットを与える。たとえば、
	\font\tendm=jp10 \fontmcs\tendm\mcsjp
とする。現在、英語以外に用意してあるフォントは
	Latin-1			ltni10
	Latin-2			ltnii10
	Latin-3			ltniii10
	Latin-4			ltniv10
	Latin-5			ltnv10
	Cyrillic		crl10
	Arabic			arb10
	Hebrew			hbw10
	Greek			grk10
	Thai TSCII		thai10
	VISCII lower		viscl10
	VISCII upper		viscu10
	Japanese Katakana	kana10, kanab10
	Chinese			cn10, cnb10		*
	Japanese		jp10, jpb10		*
	Korean			kr10, krb10		*
	Japanese Supplement	jsp10, jspb10		*
	Big5 Level 1		bvi10, bvib10		*
	Big5 Level 2		bvii10, bviib10		*
である。(XXXb10はXXX10のbold体で、一番右の欄に * を付けたのは2byte文字
のフォント。) 2byte文字のフォントはすべて等幅で、NTT JTeXで使っている
dm*,dg*と同じ幅である。1byte文字のkana10,kanab10も等幅で、その半分の幅
にしてある。その他のものについては、BitstreamのCyberbitフォントを10pt
で使ったときのmetricをkana10に合わせて縮小したものに従っている。(多国
語用でフリーなものはおそらくCyberbitフォントくらいしかない(ただしフリー
なのは非商用用途)と思われるので。)


[] 印刷、previewに必要なフォント

multexfonts.ja を参照。
