
Beachten Sie, dass es sich bei dieser Frage um Plain TeX handelt.nichtLaTeX. Betrachten Sie das folgende Beispiel.
\pdfpagewidth 8.5 in
\pdfpageheight 11 in
foobar
\bye
Unter pdftex
funktioniert das einwandfrei. Allerdings wird beim Versuch, tex
es auszuführen, der folgende schwerwiegende Fehler ausgegeben.
! Undefined control sequence.
l.1 \pdfpagewidth
8.5 in
Ist es möglich, mein Dokument so zu schreiben, dass diese beiden Zeilen nicht ausgeführt werden, wenn es unter tex
statt ausgeführt wird pdftex
?
Antwort1
Die tex
ausführbare Datei führt das „Original-Knuth-TeX“ aus, wobei es \pdfpagewidth
sich um ein pdftex
primitives Programm handelt.
Das Übliche
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdfpagewidth\endcsname\relax
\else
\pdfpagewidth 8.5 truein
\pdfpageheight 11 truein
\fi
wird reichen. Danach \pdfpagewidth
und \pdfpageheight
werden nicht definiert, wenn sie nicht von Anfang an definiert wurden.
Beachten Sie, dass es einige LaTeX-Pakete gibt, die auch mit Plain TeX verwendet werden können. Von diesen könnten Sie Folgendes in Betracht ziehen ifetex
, da eine Besonderheit von Knuth TeX darin besteht, dass es keine e-TeX-Erweiterungen gibt. Sie könnten also Folgendes tun:
\input ifetex.sty
und TU
\ifetex
<code for non Knuth TeX>
\else
<code for Knuth TeX>
\fi
Die <code for non Knuth TeX>
Unterscheidung von PDF- und DVI-Ausgabe erfolgt durch die Verwendung
\input ifpdf.sty
und die bereitgestellte \ifpdf
Bedingung. Es gibt auch ifxetex.sty
und ifluatex.sty
; alle können im Plain-Format mit geladen werden \input if<...>.sty
.
Es gibt auch das „All-in-One“-Paket iftex.sty
, dessen Implementierung jedoch in Bezug auf ifpdf
, ifxetex
und sehr einfach ist ifluatex
. Es bietet keine Möglichkeit zum Überprüfen von e-TeX-Erweiterungen.