
請注意,這個問題是關於 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.sty
和ifluatex.sty
;所有這些都可以以普通格式載入\input if<...>.sty
。
還有「一體式」包iftex.sty
,但其實現對於ifpdf
、ifxetex
和來說確實很基本ifluatex
。它不提供任何檢查 e-TeX 擴充的方法。