マクロツイーター

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

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

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

pdfTeX関連の注意事項

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

  • 整数・寸法・グルー値の情報を返すプリミティブは、他のエンジンでは「読取専用のパラメタ」として提供される(例えば\lastkern)ことが多いが、pdfTeXでは「その値を表す\the-文字列に展開する展開可能プリミティブ」であることが多い。
  • pdfTeXのマニュアルでは\pdfincludecharsが展開可能プリミティブとして挙げられているが、実際には展開不能であるようだ。恐らくこれは単純な記述ミス……?

pdfTeXのやつ

  • 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の場合(プリミティブ名は\strcmp)、文字列をUTF-16のユニット列に変換した上で比較する。従って、BMP外の文字が含まれる場合は必ずしもUnicode符号値の順にはならない。
  • \pdftexbanner:エンジンのバナー文字列。

    • 「バナー文字列」とは起動時に端末に出力される「This is pdfTeX, …」のような文字列。
  • \pdftexrevision:エンジンのリビジョン番号。

    • なお\pdftexversionは読取専用整数パラメタである。
    • 例えばバージョン番号が「1.40.21」の場合、\pdftexrevision21に展開される(ドットは付かない)。\pdftexversionは140になる。
  • \pdfunescapehex{‹文字列:16進ダンプ›}:その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\制御綴…全体も展開可能である。
    • 何れにしても、「プリミティブを保持する特殊なトークンに展開される」という仕様ではないことに注意。

(続く)