是否可以在 Plain TeX 中根據翻譯引擎有條件地執行語句?

是否可以在 Plain TeX 中根據翻譯引擎有條件地執行語句?

請注意,這個問題是關於 Plain TeX 的,不是乳膠。考慮以下範例。

\pdfpagewidth 8.5 in
\pdfpageheight 11 in

foobar
\bye

在 下pdftex,這會很好地工作。但是,如果我嘗試運行tex它,將會拋出以下令人討厭的錯誤。

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

是否可以編寫我的文檔,以便它在運行時不會執行這兩行tex而不是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

請注意,有些 LaTeX 套件也可以與 Plain TeX 一起使用。其中您可以考慮ifetex,因為 Knuth TeX 的一個顯著特徵是沒有 e-TeX 擴充。所以你可以做

\input ifetex.sty

並做

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

可以<code for non Knuth TeX>透過使用來區分 PDF 和 DVI 輸出

\input ifpdf.sty

以及所提供的\ifpdf條件。還有ifxetex.styifluatex.sty;所有這些都可以以普通格式載入\input if<...>.sty

還有「一體式」包iftex.sty,但其實現對於ifpdfifxetex和來說確實很基本ifluatex。它不提供任何檢查 e-TeX 擴充的方法。

相關內容