Plain TeX 内で、翻訳エンジンに基づいて条件付きでステートメントを実行することは可能ですか?

Plain TeX 内で、翻訳エンジンに基づいて条件付きでステートメントを実行することは可能ですか?

この質問はPlain TeXに関するものであることに注意してください。ないLaTeX。次の例を考えてみましょう。

\pdfpagewidth 8.5 in
\pdfpageheight 11 in

foobar
\bye

ではpdftex、これは問題なく動作します。ただし、これを実行しようとすると、次の厄介なエラーが発生しますtex

! Undefined control sequence.
l.1 \pdfpagewidth
                  8.5 in

texではなく で実行されている場合に、これらの 2 行が実行されないようにドキュメントを作成することは可能ですかpdftex?

答え1

実行可能ファイルtexは「オリジナルの Knuth TeX」を実行しますが、 はプリミティブ\pdfpagewidthですpdftex

いつもの

\begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname pdfpagewidth\endcsname\relax
  \else
    \pdfpagewidth 8.5 truein
    \pdfpageheight 11 truein
  \fi

それで十分です。その後は、\pdfpagewidth最初\pdfpageheightから定義されていなければ定義されません。

Plain TeXでも使用できるLaTeXパッケージがいくつかあることに注意してください。Knuth ifetexTeXの特徴はe-TeX拡張機能を持たないことです。そのため、次のようにすることができます。

\input ifetex.sty

そして、やります

\ifetex
  <code for non Knuth TeX>
\else
  <code for Knuth TeX>
\fi

PDFとDVI出力を区別する<code for non Knuth TeX>には、

\input ifpdf.sty

および提供された条件文。および\ifpdfもあります。これらはすべて を使用して Plain に読み込むことができます。ifxetex.styifluatex.sty\input if<...>.sty

「オールインワン」パッケージもありますが、その実装は、、およびiftex.styに関して非常に基本的なものです。e -TeX 拡張機能をチェックする方法は提供されていません。ifpdfifxetexifluatex

関連情報