É possível executar instruções condicionalmente com base no mecanismo de tradução, dentro do Plain TeX?

É possível executar instruções condicionalmente com base no mecanismo de tradução, dentro do Plain TeX?

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 texem vez de pdftex?

Responder1

O texexecutável executa o “Knuth TeX original”, embora \pdfpagewidthseja um pdftexprimitivo.

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, \pdfpagewidthe \pdfpageheightnã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 \ifpdfcondicional fornecida. Existem também ifxetex.stye 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, ifxetexe ifluatex. Ele não fornece nenhuma maneira de verificar extensões do e-TeX.

informação relacionada