É comum que você precise saber em que “mecanismo” suas macros estão rodando (mecanismo é o processador derivado do TeX ou similar ao TeX que faz a composição de seu documento). O motivo pelo qual você precisa saber é que o conjunto de funções disponíveis em cada mecanismo é diferente. Assim, para que as macros do TeX rodem em qualquer mecanismo, elas precisam “saber” o que elas podem ou não fazer, o que depende do mecanismo que estiver sendo usado. Obter a resposta certa é surpreendentemente complicado (veja abaixo uma elaboração de um teste aparentemente simples).
Existe, agora, um conjunto abrangente de pacotes que respondem à pergunta para você. Todos eles criam um comando condicional do TeX:
\ifpdf,
\ifxetex e
\ifluatex.
\ifthenelse{\boolean{pdf}}{‹if pdf›}{‹if not pdf›}
O pacote ifxetex também fornece um comando
\RequireXeTeX que cria um erro se o código não estiver rodando em XeTeX; embora os outros pacotes não forneçam tal comando, não é muito difícil escrever um você mesmo.
Agora, para aqueles que querem fazer o trabalho por conta própria: aqui está uma discussão sobre como fazer o trabalho para PDFTeX e \ifpdf — o programador entusiasmado pode regenerar \ifxetex ou \ifluatex da mesma maneira. Não é recomendável…
Suponha que você precise testar se sua saída será PDF ou
DVI. O natural é verificar se você tem acesso a alguma primitiva exclusivamente do PDFTeX; um boa para tentar (até porque estava presente nos primeiros lançamentos do PDFTeX) é a
\pdfoutput. Então, você tenta
Mas nenhum ramo dessa condicional é muito sólido. A primeira ramificação pode ser enganosa, já que o usuário “desajeitado” poderia ter escrito:\ifx\pdfoutput\undefined ... % not running PDFTeX \else ... % running PDFTeX \fi
de modo que seu teste falsamente escolha a primeira alternativa. Embora, em tese, este seja um problema, é improvável que ele seja importante.\let\pdfoutput\undefined
Mais importante é o usuário carregar um pacote que use o teste do estilo LaTeX que verifica a existência do nome do comando (por exemplo, o pacote graphics do LaTeX, que é útil até mesmo para o usuário do Plain TeX). Esse pacote pode ter se antecipado a você, e o teste pode precisar ser elaborado:
\ifx\pdfoutput\undefined
... % not running PDFTeX
\else
\ifx\pdfoutput\relax
... % not running PDFTeX
\else
... % running PDFTeX
\fi
\fi
Se você quiser saber apenas se alguma extensão para PDFTeX (como “marginal kerning”) está presente, você pode parar neste ponto: você já sabe o suficiente. No entanto, se você precisar saber se está criando saída em PDF
, também vai precisar saber o valor do \pdfoutput:
\ifx\pdfoutput\undefined
... % not running PDFTeX
\else
\ifx\pdfoutput\relax
... % not running PDFTeX
\else
% running PDFTeX, with...
\ifnum\pdfoutput>0
... % PDF output
\else
... % DVI output
\fi
\fi
\fi
This answer last edited: 2012-02-13
This question on the Web: http://latex.net.br/faq/FAQ-whatengine.html
Do you have any question? Ask on: latex.net.br - we love qood questions!