É 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:
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\ifx\pdfoutput\undefined ... % not running PDFTeX \else \ifx\pdfoutput\relax ... % not running PDFTeX \else ... % running PDFTeX \fi \fi
\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!