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/06
,animate
该问题已得到修复,以及评论中指出的其他错误。
答案2
使用而不是\{
宏\lbrace
:
\[ \left\lbrace ....