Here is a patch and an analysis of my problem.

Patch:

--- /usr/share/texmf/tex/latex/preview/preview.sty      Sun Apr  3 15:28:162005
+++ preview.sty Sat Jun  4 21:10:33 2005
@@ -117,10 +117,12 @@
   \DeclareOption{textmath}{%
     \PreviewEnvironment{math}%
     [EMAIL PROTECTED]@undefined \let#1=$%$
       \fi\catcode`\$=\active
-      [EMAIL PROTECTED]
+      [EMAIL PROTECTED]
+        \count255=\the\catcode`\@
+        [EMAIL PROTECTED]
     [EMAIL PROTECTED]@ship\([EMAIL PROTECTED] \)
     [EMAIL PROTECTED]@[EMAIL PROTECTED]
         [EMAIL PROTECTED]@textmathcheck}}{}}%
   [EMAIL PROTECTED]@endaftergroup
     [EMAIL PROTECTED]@gobbletwo\fi#2}}


The aim of the patch is ensuring that \xyunrecatcode is called with @ having
category character and then restoring the category of @.  The category code
of @ is temporarily stored in \count255. (There is no particular reason for
choosing \count255.  Any temporary storage will do.)

Analysis:

1) preview.sty intentionally changes the category of $ to active with
   the options active and textmath.

2) The xy-pic package sometimes also changes the category code of characters
   and then changes them back.  This backward change is done by the
   \xyuncatcode macro which contains _explicitly_ the category codes valid
   when processing the document.

3) The macro \xyreuncatcode configures \xyuncatcode to contain the correct
   codes. It should be called when the category codes are that for the
   document.

4) It follows that if preview.sty changes the category code of $ _after_ xy_pic
   is loaded then it must call \xyreuncatcode to correctly setup \xyuncatcode.

5) However, the problem is then while loading a package LaTeX temporarily
   changes the category code of @.  That is why we need to change the category
   of @ before \xyreuncatcode and then restore it for proper operation.

6) There is a further complication: this part of code is in the argument of
   [EMAIL PROTECTED]  This means that it is executed immediately (during loading
   the package) if preview.sty is given the option 'active' but not 'delayed'.
   If 'delayed' is also given the code is executed at \begin{document} time
   when the category of @ is other.

7) It follows that to what category we need to restore @ depends on when the
   code is executed.  So the patch saves the category code in advance to know
   what to restore.

Kind regards,

 Gabor Braun


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to