Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Last active June 20, 2021 14:29
Show Gist options
  • Save zr-tex8r/629b5334d19cbcfc3fe58728b81b1c80 to your computer and use it in GitHub Desktop.
Save zr-tex8r/629b5334d19cbcfc3fe58728b81b1c80 to your computer and use it in GitHub Desktop.
和文トークンのムニャムニャムニャ

和文トークンのムニャムニャムニャ

この文書ではムニャムニャムニャ。

多くの人にとって日本のレガシーエンコーディングよりもUnicodeの方が馴染みがあると思うので、まず最初にe-upTeXに絞って説明し、次にe-pTeXにおける差異について述べる。

目次

  • 和文文字に関する概念
  • e-upTeXにおける和文文字トークンの扱い
  • e-upTeXにおける字句解析
  • e-pTeXにおける和文文字
  • 補足事項

和文文字に関する概念

e-upTeXの“入力漢字コード”がUTF-8、“内部漢字コード”がUnicodeであることを仮定する。

※upLaTeXでは普通はこの設定が使われる。 ※“内部漢字コード”等についてはあとで解説する。

概要:和文文字

TeXにおける「文字」に関する諸々の概念について、e-upTeXではその“和文版”が存在する。例えば以下の通りである:

※和文でない従来の「文字」のことを特に「欧文文字」と呼ぶ。

  • 欧文文字の他に、和文文字がある。
  • 欧文文字トークンの他に、和文文字トークンがある。
  • 和文文字コードに対して和文カテゴリコードを設定できる。
  • 和文文字トークンは和文文字コードと和文カテゴリコードをもつ。

例えば、upLaTeXソース中のHello,␣世界!という文字列が字句解析された場合、和文文字である“世”と“界”は和文文字トークンとなる。その他の“H”や“!”や“␣”は元祖TeXと全く同様に欧文文字トークンとなる。

和文文字コード

有効な和文文字コードの範囲は "80~"10FFFF である。すなわち、和文は(XeTeX/LuaTeXと同様に)ネイティブにUnicodeを取り扱うが、ASCII文字は常に欧文として扱うため、0~"7Fの範囲は除外される。

※※上限が"10FFFFは実際は嘘だけど……。 ※※kchardefの話はあとで補足。

これに対して、欧文文字コードの範囲は元祖TeXと同じく0~"FFである。欧文については非ASCII文字はUTF-8のバイト列として取り扱われる。

※和文と欧文で非ASCIIの扱いが異なっている理由は、旧来のpTeXをUnicodeに対応させる際にこの形が自然であったからである。

例えば、upLaTeXソース中のTschüß, 世界!という文字列が字句解析された場合、以下のようになる:

  • 和文文字の(U+4E16)は "4E16 という和文文字コードをもつ1つの和文文字トークンとなる。
  • 欧文文字のü(U+00FC)は、それぞれ "C3 と "BC の欧文文字コードをもつ2つの欧文文字トークンとなる。

和文カテゴリコード

和文カテゴリコードは個々の和文文字役割を規定する。有効な値の範囲は15~19であり、次のような文字種が想定されている:

  • 15:欧文文字、つまり和文文字として扱わない
  • 16:漢字
  • 17:ひらがな・カタカナ
  • 18:和文記号
  • 19:ハングル

和文カテゴリコードによる実際の振る舞いの違いについては、以降で必要に応じて述べてゆく。

※例えば、制御語の名前を構成するのに使える和文文字は、和文カテゴリコードが16、17、19のものに限られる。

なお、和文文字は決して“アクティブ”にはならないことに注意。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment