请注意,这个问题是关于 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 扩展的方法。