
Обратите внимание, что этот вопрос касается 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
.
Есть также пакет «все в одном» iftex.sty
, но его реализация действительно базовая по отношению к ifpdf
, ifxetex
и ifluatex
. Он не предоставляет никаких возможностей для проверки расширений e-TeX.