マクロツイーター

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

次世代の pTeX に関する何か (2)

前回の続き)

前回*1に引き続いて、“次世代の pTeX”のお話。

今回は組版エンジン(あるいは言語処理系)としての機能について述べる。

※この記事は飽くまで現時点での状態を述べたものである。

pTeX-ng の起動コマンド

W32TeX においては、以下のコマンドが用意されている。

  • ptex-ng: plain TeX フォーマット。
  • platex-ngLaTeX フォーマット。((前回の記事を読めば解るように、これは「ptex-ng &platex-ng」と等価なはずである。実は 2014 年 10 月頃の W32TeX では等価ではなく少しややこしいことになっていたが、現在は等価になっている(はず)。))

もちろん、この plain TeXLaTeX は(up(La)TeX と同じ)日本語対応が施されたものである。

pTeX-ng は「pdfTeX 版の (u)pTeX」か?

結論から言うと、否である。pTeX-ng は DVI ファイルを出力せずに PDF ファイルを直接出力する。しかしそれ以外の点では、pdfTeX との共通点は非常に少ない。

pTeX-ng がサポートする機能は以下のものである。

注意すべきこととして、pTeX-ng は upTeX の上位互換となっているが、e-upTeX と比較すると完全な上位互換ではない。e-(u)pTeX でも pdfTeX 拡張の一部をサポートしているが、それらの多く(\pdffilemoddate\pdfsavepos 等)は pTeX-ng ではサポートされていない。

pdfTeX 拡張のプリミティブ
  • \pdfstrcmp :〔展開可能〕 文字列の比較をする。
    • 詳しくは、「\pdfstrcmp プリミティブのお話」を参照。これがあるため、pTeX-ng で expl3 パッケージを用いることは可能である。(ただし、例のアレの話と同じく、エンジンの判定の問題がある。)
  • \pdfpagewidth : 〔寸法パラメタ;読書可能〕 出力ページの横幅。
  • \pdfpageheight : 〔寸法パラメタ;読書可能〕 出力ページの縦幅。
    • この 2 つは出力の用紙サイズを定めるもので、dvips・dvipdfmx の papersize special 命令(後述のように、これらは pTeX-ng では使えない)に相当する。初期値はともに 0pt である。*2
  • \pdfhorigin : 〔寸法パラメタ;読書可能〕 TeX の座標系の横方向オフセット。
  • \pdfvorigin : 〔寸法パラメタ;読書可能〕 TeX の座標系の縦方向オフセット。
    • 周知の通り、TeX の座標系の原点は、用紙の左端および上端からそれぞれ 1 インチ内側に入った点になっている。pdfTeX ではこの値が可変になっていて、それを設定するのがこの 2 つの寸法パラメタである。当然、初期値はどちらも 1in となっている。LaTeX の普通の使用では意識する必要がなさそうに見えるが、実は \mag パラメタを変更する場合は、これらのパラメタについても考慮する必要がある。特に、pTeX-ng の場合、jsarticle のような \mag を内部で利用している文書クラスの使用が将来に一般的になる可能性があるので注意を要する。この辺りの話については後日に詳しく述べたいが、要点は以下の通り:\mag を変えた場合には \pdfhorigin\pdfVorigin の値を 1truein に変更する必要がある。
  • \pdfminorversion :〔整数パラメタ;読書可能〕 出力する PDF のマイナーバージョン。可能な値の範囲は 3〜7 で、*3既定値は 5。*4
  • \pdfcompresslevel : 〔整数パラメタ;読書可能〕 ストリームの圧縮の使用を設定する。可能な値の範囲は 0〜9 で、既定値は 9。
  • \quitvmode : 〔命令〕 垂直モードから水平モードに移行する。(つまり段落を開始する。)
    • 要するに plain TeX で定義されたマクロ \leavevmode と同じ機能をもつ。マクロとしての実装だと \everypar の影響で不都合が生じるケースがあるらしい(詳細不明)ので、pdfTeX でプリミティブが新設されている。
pTeX-ng 独自のプリミティブ
  • \ngostype :〔展開可能〕 OSの種別を表す \the-文字列に展開される。
    • Win64Win32LinuxDarwinAndroidUnknown の何れか。
  • \ngbanner :〔展開可能〕 起動時に最初に表示される“バナー”の \the-文字列に展開される。
    • This is pTeX-ng,」から始まる文字列。pdfTeX の \pdftexbanner に相当するもの。現状では、「エンジンが pTeX-ng であること」を自動で判定したい場合は、\ngbanner の定義を見ればよいであろう。
(つづけ)

*1:2015-01-04 の改訂に合わせて前回の記事を修正した。

*2:しかし、TeX Live で用いられるフォーマットでは、tlmgr での設定に応じて A4 またはレターサイズの何れかで再設定されていて、これが“実際にコマンドを起動した時の既定値”となっている。

*3:範囲外の値も代入できるが、実際に適用されるマイナーバージョンはこの値の範囲に修正される。

*4:pdfTeX と異なり、エンジンでの既定値が 5 である。