マクロツイーター

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

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

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

pdfTeX関連の補足事項

  • 「文字列」の引数については、与えられたトークン列を完全展開して脱トークン化した結果の文字列が使われる。
  • 整数・寸法値・グルー値の情報を返すプリミティブは、他のエンジンでは「読取専用のパラメタ」(例えば\lastkern)として提供されることが多いが、pdfTeXは「その値を表す\the-文字列に展開する展開可能プリミティブ」であることが多い。その場合、値を表す書式は「その型のパラメタの値を\theで出力する場合」と同じになる。
    ※例えば寸法値10ptは10.0ptという\the-文字列で表される。
  • ◇印は、内部状態の変化を行った上で空でないトークン列に展開されるもの。
    ※なお★・☆印の意味はシリーズ初回と同じ。
  • pdfTeXのマニュアルでは\pdfincludecharsが展開可能プリミティブとして挙げられているが、実際には展開不能であるようだ。恐らくこれは単純な記述ミス……?

pdfTeXのやつ

  • 追加のif-トークン(\ifincsname\ifpdfabsdim\ifpdfabsnum\ifpdfprimitive)☆
  • \expanded{‹トークン列›} ★:そのトークン列の完全展開の結果。
    ※つまり“展開の加速”(一回展開で完全展開をひき起こす)ができる。
    ※「pdfTeX拡張プリミティブ」という扱いなのであるが、事情があって、一番先にLuaTeXで実装された。pdfTeXで実装されたのはずっと後になってからである(参考)
  • \leftmarginkern‹ボックス番号›: ボックスの左側マージンカーンの幅(寸法値)。
  • \pdfcolorstackinit[page] [direct]{‹PDF命令列›} ◇: 色スタックを新規作成した上で、その色スタック番号の整数に展開される。
  • \pdfcreationdate:処理開始日時をPDF日時形式で現した文字列。
    ※「PDF日時形式」はD:20060102150405+07'00'のような形式。
  • \pdfescapehex{‹文字列›}:その文字列の16進ダンプの文字列。
    ※「16進ダンプ」は各文字の符号値の16進表記(0埋め、大文字)を並べたもの。
  • \pdfescapename{‹文字列›}`:その文字列に対して「PDF名前」用のエスケープを適用した結果の文字列。
  • \pdfescapestring{‹文字列›}:その文字列に対して「PDF文字列」用のエスケープを適用した結果の文字列。
    ※PDF文字列を現す外側の丸括弧()は付かない。
  • \pdffiledump[offset‹開始位置›] [length‹長さ›]{‹ファイル名›}:そのファイルの指定の位置の内容(バイト列)の16進ダンプの文字列。
  • \pdffilemoddate{‹ファイル名›}:そのファイルの更新日時をPDF日時形式で現した文字列。
  • \pdffilesize{‹ファイル名›}:そのファイルのサイズ(整数)。
  • \pdffontname‹フォント›:そのフォントを一意に指定する番号(整数)。
    ※PDF中でF‹番号›という名前がそのフォントに対応する。
  • \pdffontobjnum‹フォント›:そのフォントに対応するPDFのFontオブジェクトの番号(整数)。
  • \pdffontsize‹フォント›:そのフォントのサイズ(寸法値)。
  • \pdfinsertht‹insert番号›:そのinsertの現状での高さ(寸法値)。
  • \pdflastmatch‹番号›:最後に実行した正規表現検索(\pdfmatch)の指定番号のマッチの情報で、「‹位置›->‹文字列›」という形式の文字列。
    ※位置は0起点。指定番号のマッチが無効の時は「-1->」となる。
    ※一般の正規表現検索の慣習に従い、番号0は全体のマッチを表す。もし最後の検索が失敗だった場合は0も含めて全てのマッチが無効になる。
  • \pdfmatch[icase] [subcount‹グループ数上限›]{‹パターン›}{‹検索対象›} ◇:正規表現検索を行った上で、結果を表す整数に展開される:-1=不正パターンエラー、0=失敗、1=成功。icaseオプションは大小文字同一視指定。
    POSIX拡張正規表現、らしい(多分egrepのものと同じ)。
  • \pdfmdfivesum[file]{‹文字列›}:その文字列のMD5ハッシュ値の16進ダンプの文字列。fileオプション付きの場合は、引数の名前のファイルのハッシュ値になる。
  • \pdfnormaldeviate:平均0、標準偏差65536の正規分布に従う乱数(整数)。
  • \pdfpageref‹ページ番号›:そのページ番号に対するPDFのPageオブジェクトの番号(整数)。
  • \pdfstrcmp{‹文字列1›}{‹文字列2›}:2つの文字列を比較した結果を表す整数:-1=文字列1が小、0=等しい、1=文字列1が大。
    ※e-(u)pTeXの場合、和文文字はUTF-8のバイト列に変換した上で比較される。(※内部漢字コードは無関係)
    ※なお、XeTeXの\strcmpUTF-16のユニット列として比較する。
  • \pdftexbanner:エンジンのバナー文字列。
    ※「バナー文字列」とは起動時に端末に出力される「This is pdfTeX, …」のような文字列。
  • \pdftexrevision:エンジンのリビジョン番号。
    \pdftexversionは読取専用整数パラメタ。
    ※例えばバージョン番号が「1.40.21」の場合、pdftexrevision21に展開される(ドットは付かない)。\pdftexversionは140になる。
  • \pdfunescapehex{‹16進数字列›}:その16進ダンプが表す文字列。
    ※英字は大文字でも小文字でもよい。16進数字以外の文字は無視される。
  • \pdfuniformdeviate‹上限›:0以上‹上限›未満の一葉乱数(整数)。
  • \pdfxformname‹番号›:その番号のFormオブジェクトを一意に指定するTeX内で使用される番号(整数)。
    ※PDF中でFm‹番号›という名前が当該のFormオブジェクトに対応する。
  • \pdfximagebbox‹Image番号›‹位置番号›:その番号のImageオブジェクトのバウンディングボックスの大きさの情報で、‹位置番号›に応じて以下の値を返す:1=左下隅x、2=左下隅y、3=右上隅x、4=右上隅y。
  • rightmarginkern‹ボックス番号›: ボックスの右側マージンカーンの幅(寸法値)。

そして最後に特殊なもの。

  • \pdfprimitiveは「直後の制御綴を、それが現在保持している値とは無関係に、同名のpdfTeXのプリミティブを保持するものと見なす」という、やや特殊な働きを持つ。\pdfprimitive\制御綴…が展開可能であるかは、「\制御綴と同名のプリミティブ」が展開可能であるかに依存する。
    • プリミティブが展開可能ならば、\pdfprimitive\制御綴…全体が展開可能であり、その展開結果は「プリミティブの\制御綴…の展開結果」となる。
    • プリミティブが展開不能ならば、\pdfprimitive\制御綴…全体も展開可能である。
    • 何れにしても、「プリミティブを保持する特殊な制御綴(あるいはトークン)に展開される」という仕様ではないことに注意。