例の Qiita の記事で触れたように、XeTeX エンジンには入力ファイルの文字コードを選択する機能がある。
\XeTeXinputencoding <文字コード名>
:[命令] 現在読込中のファイルの、以降のテキスト行の文字コードを指定する。設定は常にグローバルである。\XeTeXdefaultencoding <文字コード名>
:[命令] 以降に読み込むファイルの文字コードを指定する。設定は常にグローバルである。
文字コード名
ここで <文字コード名>
に指定できる値であるが、何故かマニュアルを見ても全然情報がない。ソースコードやネット上の情報から判断すると、以下のようである。
utf8
: UTF-8。utf16be
: UTF-16BE。utf16le
: UTF-16LE。utf16
: 環境により異なり、UTF-16BE と UTF-16LE の何れか一方になる。恐らく有用ではない。bytes
: バイトセマンティック。つまり、0〜255 のバイトをそのまま符号値 0〜255 の文字と解釈する。実質的に Latin-1(latin1
)を指定したのと等価。auto
: (\XeTeXdefaultencoding
のみで使用可能。)UTF-8、UTF-16BE、UTF-16LE の中で自動判別する。((\XeTeXinputencoding
でauto
を指定しようとすると、「! Encoding mode `auto' is not valid for \XeTeXinputencoding.
」のエラーが出て指定自体が無視される。))- 以上の値以外は、ICU ライブラリが認識する文字コード名(参照)と解釈される。有効な値を幾つか列挙する:
ascii
: US-ASCIIlatin1
: Latin-1(ISO-8859-1)latin2
: Latin-2(ISO-8859-2)cp437
: CP437((inputenc パッケージの文字コード名でいうと、cp437
でなくてcp437de
の方に等しい。))koi8-r
: KOI8-Rmac
: Macintosh Romanmacce
: Macintosh Central Europeanwindows-1250
: Windows-1250windows-1251
: Windows-1251(Windows 版の Latin-1)windows-1252
: Windows-1252iso-2022-jp
: ISO-2022-JPshift_jis
: Shift_JIS……じゃなくて CP932((Unicode とのマップについては、「ibm943
」が“本来の Shift_JIS”により近い(ただし 2 バイト部分は全角互換形を優先する)。しかしこの文字コードでは 1 バイトの「\
」(0x5C)が U+00A5 にマップされるので、TeX ソースでは非常に使いづらい。))euc-jp
: EUC-JP*1ksc_5601
: CP949(UHC、Window 版の KS C 5601)gbk
: CP936(GBK、Windows 版の GB 2312)big5
: CP950(Windows 版の Big5)
bytes
の設定が使われる。
注意事項
\XeTeXdefaultencoding
の既定値は「auto
」である。\XeTeXinputencoding
の既定値(つまりファイル先頭での設定値)は、もちろん\XeTeXdefaultencoding
の値(auto
の場合は自動判定された結果の値)である。- これらのパラメタの設定は常にグローバルである。つまり、グルーピングによる局所化の影響を受けない。
- これらのパラメタの現在の値を“読みだす”方法は存在しないようにみえる。*2
- ファイル先頭の BOM のコードについては、
\XeTeXdefaultencoding
が「auto
」の場合は BOM と解釈される(つまりデコードすると消える)。しかし「utf...
」の場合は BOM と解釈されずデコード後に残ってしまって出力に悪影響を及ぼすようである。((もちろん、ファイルの先頭にある BOM は\XeTeXinputencoding
の影響を受けることはありえない。)) - 以前の記事で説明したように、これらのプリミティブは「クオートで囲める引数」をとる。
% 次の2つは等価 \XeTeXinputencoding utf8 \XeTeXinputencoding "utf8"
ただし、引数となる有効な文字コード名には空白文字が入ったものは存在しないので、実際にクオートで囲む機会は無いと思われる。