[tex-live] beamer vs. hyperref

Till Tantau tantau at tcs.uni-luebeck.de
Tue Jul 15 09:13:10 CEST 2008


Hello everyone,


hmm... I really hate this driver mess...

Anyway, I do not think that packages should use the *existence* of the  
pdfoutput counter for determining whether *xetex* is present. I know  
that beamer is not the only package that uses the define-pdfoutput-if- 
it-is-not-defined-strategy. Admittedly, this strategy is not perfect,  
but it does not seem so bad either.

I presume mankind really, really needs a central ultra-portable  
package for determining the backend driver...

I think the right way to discern the driver is, indeed, the one  
suggested in the mail, namely making hyperref smarter.


Best regards,
Till


Am 11.07.2008 um 22:30 schrieb Jonathan Kew:

> It has just come to my attention (though it may not actually be a  
> new issue) that beamer and hyperref don't get along perfectly when  
> used with xelatex.
>
> First, consider a simple test using the "article" class:
>
>  \documentclass{article}
>  \usepackage{hyperref}
>  \title{A Test}
>  \author{A. N. Author}
>  \begin{document}
>  \maketitle
>  \end{document}
>
> When this is run with xelatex, hyperref recognizes that it should  
> use a dvipdfm-style driver:
>
>  This is XeTeXk, Version 3.1415926-2.2-0.999.2 (Web2C 7.5.6)
>  .....
>  LaTeX2e <2005/12/01>
>  Babel <v3.8j> and hyphenation patterns for english, usenglishmax,  
> dumylang,
>  .....
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/base/article.cls
>  Document Class: article 2005/09/16 v1.4f Standard LaTeX document  
> class
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/base/ 
> size10.clo))
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/hyperref/ 
> hyperref.sty
>  .....
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/generic/oberdiek/ 
> ifpdf.sty)))
>  *hyperref using default driver hdvipdfm*
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/hyperref/ 
> hdvipdfm.def)
>  .....
>
> and the result is that hyperref features work as expected.
>
> However, changing the document class to "beamer" leads to a  
> surprising result:
>
>  This is XeTeXk, Version 3.1415926-2.2-0.999.2 (Web2C 7.5.6)
>  .....
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/beamer/ 
> beamer.cls
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/beamer/ 
> beamerbasercs.sty)
>  Document Class: beamer 2007/03/11 cvs version 3.07 A class for  
> typesetting pres
>  entations (rcs-revision 1.70)
>  .....
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/hyperref/ 
> hyperref.sty
>  .....
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/generic/oberdiek/ 
> ifpdf.sty))
>
>  Package hyperref Warning: Option `pdfpagelabels' is turned off
>  (hyperref)                because \thepage is undefined.
>
>  Hyperref stopped early
>  )
>  *hyperref using default driver hdvips*
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/hyperref/ 
> hdvips.def
>  (/Users/jonathan/texlive/Master/texmf-dist/tex/latex/hyperref/ 
> pdfmark.def))
>  .....
>
> Hyperref has chosen the dvips driver, with the result that xetex's  
> output driver xdvipdfmx generates a mass of warnings for all the  
> dvips-specific \specials that it doesn't recognize.
>
> So beamer is interfering with hyperref's attempt to choose the  
> appropriate driver by default, which otherwise works well. This  
> happens because beamer.cls actually defines a \count register  
> \pdfoutput, if the pdfTeX primitive is not present:
>
>  \ifx\pdfoutput\@undefined \newcount\pdfoutput \fi
>  \ifx\pdfoutput\relax \newcount\pdfoutput \fi
>
> (beamer.cls, lines 25-26.)
>
> I'm not sure what else in beamer depends on having defined  
> \pdfoutput; in a minimal test, removing these lines solves the  
> hyperref problem and the output looks fine. However, there are  
> probably many more implications that need to be considered.  
> Alternatively, it would be possible to revise the tests in  
> hyperref.sty to check for XeTeX before testing for the existence of  
> \pdfoutput, so that it is not "fooled" by beamer's tricks. In any  
> case, I suspect that defining \pdfoutput is a risky strategy, as it  
> may mislead other packages besides hyperref, so I hope that beamer  
> can be updated to eliminate this.
>
> In the meantime, I suggest that in TeX Live, we add a hyperref.cfg  
> file to the texmf-dist/tex/xelatex/xetexconfig/ directory, which  
> will check that it is running under xelatex and then define  
> \Hy at defaultdriver appropriately. Something like this:
>
>  \ProvidesFile{hyperref.cfg}%
>    [2008/07/11 v1.2 hyperref configuration for XeLaTeX]
>  \ifx\XeTeXversion\undefined \else
>    % Change default driver to "dvipdfm" instead of "hypertex",
>    % requires hyperref 2002/06/05 v6.72s
>    \providecommand*{\Hy at defaultdriver}{hdvipdfm}%
>  \fi
>  \endinput
>
> By placing this file in a tex/xelatex subtree, it will be found in  
> preference to the existing file under tex/latex *only* when running  
> under xelatex, and so other engines will not be affected.
>
> Unless there are objections (or better suggestions), I propose to  
> add this to the xetexconfig directory shortly.
>
> Comments welcome....  JK
>

--
Prof. Dr. Till Tantau <tantau at tcs.uni-luebeck.de>
http://www.tcs.uni-luebeck.de



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4780 bytes
Desc: not available
Url : http://tug.org/pipermail/tex-live/attachments/20080715/bbf3460e/attachment.bin 


More information about the tex-live mailing list