![在 Plain TeX 中,是否可以根据翻译引擎有条件地执行语句?](https://linux22.com/image/299028/%E5%9C%A8%20Plain%20TeX%20%E4%B8%AD%EF%BC%8C%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%A0%B9%E6%8D%AE%E7%BF%BB%E8%AF%91%E5%BC%95%E6%93%8E%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E6%89%A7%E8%A1%8C%E8%AF%AD%E5%8F%A5%EF%BC%9F.png)
请注意,这个问题是关于 Plain TeX 的,不是LaTeX.考虑以下示例。
\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
;它们都可以用 以 Plain 形式加载\input if<...>.sty
。
还有“all-in-one”包iftex.sty
,但其实现对于ifpdf
、ifxetex
和来说非常基础ifluatex
。它不提供任何检查 e-TeX 扩展的方法。