动画包和数学分隔符之间存在冲突吗?

动画包和数学分隔符之间存在冲突吗?

animate我在包和数学分隔符的使用中遇到了一个不寻常的问题,例如\left\{

编译 MWE 时,我Missing delimiter (. inserted).在数学行上收到错误。

但是:如果我改变顺序——将数学行放在animategraphics行之前——它可以毫无问题地进行编译。

分隔符与后续使用之间是否存在已知冲突animategraphics?您有想法如何克服此问题吗?

\documentclass{article}
\usepackage{amsmath}
\usepackage{animate}

\begin{document}
\animategraphics[scale=0.5]{6}{animfile}{}{}
\[\left\{\begin{array}{l}y=2x\\y=x+1\end{array}\right.\]
\end{document}

答案1

这是 中的一个错误animate。该宏\@anim@@sanitize被执行多次,对列表.:;?!/"'*+,->=<$&@][)(^_|~` 中的每个标记执行一次,每次执行时都会

\global\let\@anim@leftbrace=\{\global\let\{=\@anim@lbr

第一次,\@anim@leftbrace保存了 的含义\{,但第二次,它只保存了 的含义\@anim@lbr。后来,\@anim@endsanitize却恢复了\global\let\{=\@anim@leftbrace,恢复了错误的值。

\\\}和 也会发生同样的情况\%

您可以通过以不同的方式执行循环来解决该错误:

\documentclass{article}
\usepackage{amsmath}
\usepackage{animate}

\makeatletter
\def\@anim@@sanitize#1\@nil{%
  \@tfor\next:=#1\do{%
    \expandafter\xdef\csname @anim@\number\expandafter`\next\endcsname{%
      \the\catcode\expandafter`\next
    }%
    \global\catcode\expandafter`\next=12
  }
  \global\catcode`\#=12
  \global\let\@anim@newline=\\\global\let\\=\@anim@bksl
  \global\let\@anim@leftbrace=\{\global\let\{=\@anim@lbr
  \global\let\@anim@rightbrace=\}\global\let\}=\@anim@rbr
  \global\let\@anim@percent=\%\global\let\%=\@anim@per
}
\def\@anim@@endsanitize#1\@nil{%
  \@tfor\next:=#1\do{%
    \global\catcode\expandafter`\next=\csname @anim@\number\expandafter`\next\endcsname
  }
  \global\let\%=\@anim@percent%
  \global\let\}=\@anim@rightbrace%
  \global\let\{=\@anim@leftbrace%
  \global\let\\=\@anim@newline%
  \global\catcode`\#=6%
}
\makeatother

\begin{document}

\animategraphics[scale=0.5]{6}{whatever}{}{}

\[\left\{\begin{array}{l}y=2x\\y=x+1\end{array}\right.\]

\end{document}

应尽快将此事提请软件包维护人员注意。

更新

从 版本开始2014/08/06animate该问题已得到修复,以及评论中指出的其他错误。

答案2

使用而不是\{\lbrace

\[ \left\lbrace ....

相关内容