When using hyperref and compiling via pdflatex or dvips, I do not need to specify the driver with \usepackage{hyperref}. However when compiling via dvipdfm this fails and I have to specify the driver using \usepackage[dvipdfm]{hyperref}. A similar situation occurs with the use of graphicx.

Why is that so? Is there a way to fix the hyperref or graphicx packages so that dvipdfm need not be manually specified each time?


A short answer is 'no, you always need to specify dvipdfm as a driver option'. To explain why, you need to remember that TeX does not handle things like colour, hyperlinks or including graphics directly. Instead, these are left to the driver to sort out. Each driver has its own way of doing things, and so the instructions needed for dvips are different from those for dvipdfm (or other drivers). These instructions are called 'specials' as they are included in a TeX file using the \special primitive. Things are a bit different when using pdfLaTeX as there are a whole family of PDF-specific primitives which do the same job. I'll just call all of these 'specials' in the following.

So why can hyperref and graphicx detect pdfLaTeX versus dvips but not dvips versus dvipdfm? At the (La)TeX level, it is possible to see that direct PDF output is being used, as the primitive \pdfoutput will be set to 1. So the code which determines which specials to use can check this value and make a simple decision: if it is 1, use the specials for direct PDF creation. On the other hand, if the value is 0 then there are more possibilities. The two major ones are, as you say, dvips and dvipdfm. There is no way to tell which of these will be used from within the LaTeX file, and they need different specials. So a decision was made that dvips would be assumed unless the user says otherwise. This is why you need to explicitly say dvipdfm as an option: once it is set then both graphicx and hyperref should pick up the setting.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy