マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

TeXのプリミティブで展開可能なやつ(4)

前回の続き。今回はXeTeXについて。

XeTeX関連の注意事項

※一般の注意事項については初回の記事を参照。

  • 各プリミティブの種別が何であるかについてのマニュアルの記述がかなりアレ。例えば、読取専用パラメタ(だから展開不能)なのに“Expands to …”と書いてあったり*1、読書可パラメタなのに一般命令であるかのように書かれていたり。大体は「機能から自然に予想される種別」になっているようである。例えば:
    • \XeTeXgenerateactualtextは読書可の整数パラメタ。
    • \XeTeXglyphbounds‹フォント›‹位置›は読取専用の寸法パラメタ。
  • 従って、情報読取系のプリミティブで展開可能なのは、「文字列を返すもの」に限られる。
  • ちなみに、XeTeXには「文字列型のパラメタ」のようにみえるプリミティブ(\XeTeXinputencodingなど*2)があるが、(恐らくTeXにそういう概念がないため)実際にはこれはパラメタでなく一般命令である。つまり、これらのプリミティブで設定した値を読み出すことはできない。
  • OpenTypeの各種タグは整数値として扱われている(例えばfeature tagの“ital”は0x76657274という整数値)。なので例えば\XeTeXOTfeaturetagは読取専用整数パラメタであり展開不能である。
  • \XeTeXinterchartoks‹クラス1›‹クラス2›トークン列パラメタである。

XeTeXのやつ

  • \XeTeXglyphname‹フォント›‹整数:グリフ番号›:そのフォントの指定のグリフ番号(GID)に対応するグリフ名(文字列)。

  • \XeTeXfeaturename‹フォント›‹整数:featureコード›:AATのfeatureの名前(文字列)。

  • \XeTeXvariationname‹フォント›‹整数:variationコード›:AATのvariationの名前(文字列)。

以下のものはpdfTeXのプリミティブを名前を変えて採用したもの。

  • \ifprimitive ☆:pdfTeXの\ifpdfprimitiveと同じ。
  • \normaldeviate:pdfTeXの\pdfnormaldeviateと同じ。
  • \strcmp{‹文字列1›}{‹文字列2›}:pdfTeXの\pdfstrcmpと同じ、ただしUnicode対応になっている。
    ※文字列の比較は「UTF-16のユニット列」として(あるいは「UTF-16BEのバイト列」と考えても同値)行われる。従って、BMP外の文字が含まれる場合は必ずしもUnicode符号値の順にはならない。
  • \uniformdeviate:pdfTeXの\pdfuniformdeviateと同じ。

“U~”なやつ

名前がUで始まる拡張プリミティブはUnicodeに関するもので、この命名法はXeTeXとLuaTeXで名前を共通にすることを意図している。とはいっても必ずしも両方のエンジンで実装されているとは限らない。

  • \Uchar‹整数:文字コード›:その文字コードを持ち、\the-文字列の規則におけるカテゴリコードを持った文字トークン。言い換えると、その文字コードの文字1つだけからなる\the-文字列。
    ※XeTeX・LuaTeX・e-(u)pTeXで利用可能。

    • e-(u)pTeXの場合、文字コードが256以上の場合は和文文字トークンが生成される。※従って、文字コードの範囲は「欧文または和文として有効な値」となる。
    • e-upTeXでの和文カテゴリコードは\the-文字列の規則に従うが、例外的に、その文字の和文カテゴリコードが15のときは、代わりに和文カテゴリコードが18の和文文字トークンを生成する。
  • \Ucharcat‹整数:文字コード›‹整数:カテゴリコード› ★:指定の文字コードとカテゴリコードを持つ文字トークン。
    ※XeTeX・e-(u)pTeXで利用可能。

    • e-upTeXの場合、カテゴリコードが16以上の場合には(文字コードとカテゴリコードを和文のものと見なして)和文文字トークンが生成される。なお、文字コードが0~127の範囲の和文文字トークンは生成できない。
    • e-pTeXでは和文文字トークンが和文カテゴリコードを保持しないため、\Ucharcatは欧文専用になる。
    • カテゴリコードとして有効な値は、1~4、6~8、10~13である。ただしe-upTeXでは和文として16~19が指定できて、カテゴリコードが和文か欧文かに応じて文字コードの有効範囲も異なることに注意。
  • \Umathcharclass‹整数:文字コード›:その文字に対する数式クラス*3の値(整数)。
    ※LuaTeXで利用可能。

  • \Umathcharfam‹整数:文字コード›:その文字に対する数式ファミリの値(整数)。
    ※LuaTeXで利用可能。

  • \Umathcharslot‹整数:文字コード›:その文字に対する数式スロット(数式フォント中の文字コード)の値(整数)。
    ※LuaTeXで利用可能。

(続く)

*1:もちろんパラメタだから\theを付ければ展開されるのであるが。

*2:具体的には\XeTeXinputencoding、\XeTeXdefaultencoding、\XeTeXlinebreaklocaleの3つ。

*3:「文字に対する数式クラス・数式ファミリ・数式スロット」というのは元祖TeXの数式コードに対応する概念である。例えば、文字Xに対する数式コード(\mathcode`\X)が"7158だとすると「数式クラスは7、数式ファミリは1、数式スロットは"58」ということになる。