
Observe que esta pergunta é sobre Plain TeX,nãoLátex. Considere o seguinte exemplo.
\pdfpagewidth 8.5 in
\pdfpageheight 11 in
foobar
\bye
Em pdftex
, isso funcionará bem. No entanto, isso gerará o seguinte erro desagradável se eu tentar executá tex
-lo.
! Undefined control sequence.
l.1 \pdfpagewidth
8.5 in
É possível escrever meu documento de forma que ele não execute essas duas linhas se estiver sendo executado tex
em vez de pdftex
?
Responder1
O tex
executável executa o “Knuth TeX original”, embora \pdfpagewidth
seja um pdftex
primitivo.
O habitual
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdfpagewidth\endcsname\relax
\else
\pdfpagewidth 8.5 truein
\pdfpageheight 11 truein
\fi
vai fazer. Depois disso, \pdfpagewidth
e \pdfpageheight
não serão definidos se não forem, para começar.
Observe que existem alguns pacotes LaTeX que também podem ser usados com Plain TeX. Destes você poderia considerar ifetex
, porque uma característica distintiva do Knuth TeX é não ter extensões e-TeX. Então você poderia fazer
\input ifetex.sty
e fazer
\ifetex
<code for non Knuth TeX>
\else
<code for Knuth TeX>
\fi
O <code for non Knuth TeX>
pode distinguir da saída PDF e DVI usando
\input ifpdf.sty
e a \ifpdf
condicional fornecida. Existem também ifxetex.sty
e ifluatex.sty
; todos eles podem ser carregados em formato simples com arquivos \input if<...>.sty
.
Há também o pacote “tudo em um” iftex.sty
, mas sua implementação é realmente básica em relação a ifpdf
, ifxetex
e ifluatex
. Ele não fornece nenhuma maneira de verificar extensões do e-TeX.