マクロツイーター

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

徹底解説! TeXエンジンがTectonicであるかを判定する方法

Tectonic、スゴイですね!(多分🙃)

というわけで、本記事では「今動いているTeXエンジンがTectonicであるかを判別する方法」について解説します。

必要な前提知識

  • Tectonicが何か知っている。
  • そもそも「エンジンを判別する」とはどういうことか解っている。
  • 一般的な「エンジンを判別する」ための方針について知っている。

いきなり説明

エンジン判別の一番基本的な方法は「そのエンジンだけの特有の拡張プリミティブ」に注目して、それが定義済であるかを\ifxなり\ifdefinedなりで判断するというものです。

では「Tectonicだけの特有の拡張プリミティブ」はあるのかというと、現状ではただ1つだけ存在します。それは\TectonicCodaTokensというプリミティブです1。トークン列レジスタの一種のようですが、この機能自体はどうでもよくて、要するに「これが定義されていること」が重要です。\TectonicCodaTokensという制御綴が定義済かどうかを調べることで「Tectonicであるか」を判定できます。

% \ifx で判定する方法
\ifx\TectonicCodaTokens\@undefined\else
  % Tectonicである
\fi

% \ifdefined で判定する方法
\ifdefined\TectonicCodaTokens
  % Tectonicである
\fi

もちろん、もっと厳密に判定したいならプリミティブ判定をすることもできます。\ifpdfprimitiveを使うのが簡単ですが、ここで「TectonicはXeTeXの一種である」ことに注意が必要です。XeTeX(とLuaTeX)では\ifpdfprimitive\ifprimitiveに改名されているので、「まずXeTeXであることを判別してから\ifprimitiveを使う」ようにします。

% if-均衡の維持のため少し複雑...
\let\ifTemp\iffalse
\def\next{\let\ifTemp\ifprimitive}
\ifdefined\XeTeXversion \next \fi
\ifTemp\TectonicCodaTokens
  % Tectonicである
\fi

もちろん、“string-meaningテスト”を使うこともできます2

プリミティブ判定の方法については別の記事で詳しく解説しました。

まとめ

ジェミニ氏もチャッピ~氏もデタラメな答えを返してきたのでムシャクシャして書いた(めでたしめでたし🙂)


  1. \TectonicCodaTokensはTectonicのかなり初期の0.1.6版[2017-07-10]から存在するようです。
  2. \TectonicCodaTokens\meaningを適用して得られる文字列は普通に\TectonicCodaTokensです。