[XeTeX] Conflicts between AMS document classes and polyglossia
David M. Jones
dmj at ams.org
Mon Dec 29 19:17:08 CET 2008
> From: Ross Moore <ross at ics.mq.edu.au>
> Date: Fri, 26 Dec 2008 16:26:37 +1100
> Reply-To: Unicode-based TeX for Mac OS X and other platforms <xetex at tug.org>
> It occurs because polyglossia scans the contents of the
> left & right header marks, inserting \protect commands
> to allow safer expansion within macros.
Just to clarify, polyglossia doesn't intentionally try to insert
\protect's, per se. It simply redefines \markright and \markboth so
that they subject their arguments to an extra round of expansion via
\unrestored at protected@xdef at a time when this causes \\ to expand to
the two tokens "\protect\\".
> However, there is a piece of coding that AMS classes use
> which is not safe against this strategy.
>
> lines 622--626 of amsart.cls are as follows:
>
> \toks4{\def\\{ \ignorespaces}}% defend against questionable usage
> \edef\@tempa{%
> \@nx\markboth{\the\toks4
> \@nx\MakeUppercase{\the\toks@}}{\the\@temptokena}}%
> \@tempa
Correct. The argument to \markboth here is a token list that is not
invariant under repeated applications of protected edefs.
> These are more robustly written as:
>
> % \toks4{\def\\{ \ignorespaces}}% defend against questionable usage
> \edef\@tempa{%
> \@nx\markboth{\@nx\protect at backslash
> \@nx\MakeUppercase{\the\toks@}}{\the\@temptokena}}%
> \@tempa
>
> using a new internal macro \protect at backslash defined as:
>
> %% RRM --- added 2008/12/26
> \def\protect at backslash{%
> \expandafter\def\noexpand\\{ \ignorespaces}}
But neither is this. This will survives a single round of expansion
(which is admittedly good enough for the case at hand), but not a
second.
A safer implementation is
\DeclareRobustCommand\redefine at backslash{\def\\{ \ignorespaces}}
\protected at edef\@tempa{%
\@nx\markboth{%
\redefine at backslash
\MakeUppercase{\the\toks@}}{\the\@temptokena}%
}%
which takes advantage of LaTeX 2e's apparatus for dealing with these
issues.
David M. Jones
Publications Technical Specialist
American Mathematical Society
http://www.ams.org/
More information about the XeTeX
mailing list