\
pdfoutput
. So you try
\ifx\pdfoutput\undefined ... % not running PDFTeX \else ... % running PDFTeX \fi
Except that neither branch of this conditional is rock-solid. The first branch can be misleading, since the “awkward” user could have written:
\let\pdfoutput\undefined
so that your test will falsely choose the first alternative. While this is a theoretical problem, it is unlikely to be a major one.
More important is the user who loads a package that uses LaTeX-style testing for the command name’s existence (for example, the LaTeX graphics package, which is useful even to the Plain TeX user). Such a package may have gone ahead of you, so the test may need to be elaborated:\ifx\pdfoutput\undefined ... % not running PDFTeX \else \ifx\pdfoutput\relax ... % not running PDFTeX \else ... % running PDFTeX \fi \fi
If you only want to know whether some PDFTeX extension (such as marginal kerning) is present, you can stop at this point: you know as much as you need.
However, if you need to know whether you’re creating PDF output, you also need to know about the value of\
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
The above is, in essence, what Heiko Oberdiek’s ifpdf package does; the reasoning is the FAQ’s interpretation of Heiko’s explanation.
As an aside: there are now analogous packages ifxetex and ifluatex, for the two up-and-coming TeX-like engines (see the “TeX project” answers covering XeTeX, and LuaTeX).This question on the Web: http://www.tex.ac.uk/cgi-bin/texfaq2html?label=ifpdf