我正在使用 TeXLive 2014。这是 MWE:
\documentclass{article}
\usepackage{tkz-fct} % Must appear before {thmtools}
\usepackage{thmtools}
\declaretheorem{theorem}
\begin{document}
\begin{tikzpicture}
\tkzInit % No need to even plot anything!
\end{tikzpicture}
\begin{theorem}[A Silly Theorem]
Let $a = 1$. Then $a > 0$.
\end{theorem}
\end{document}
错误信息是:
! Extra \endcsname.
\kv@processor@default ...fincsname\@xa \endcsname
\csname iftrue\endcsname \...
l.12 \begin{theorem}[A Silly Theorem]
如果删除可选的定理名称,则一切正常。添加\protect{}
无济于事。
知道如何消除这个冲突吗?
谢谢!
答案1
这两个包都\@xa
使用非常含义不同。对于 Tkz 套件,\@xa
代表坐标,而 则thmtools
希望它表示\expandafter
。
在我看来,他们的假设都是错误的:Tkz 应该使用带前缀的私有名称,而 Tkzthmtools
应该使用\@xp
类似的amsmath
或本身带有前缀的名称。
通过将 Tkz 套件中的所有出现更改\@xa
为不同的名称,您应该能够解决这个问题。\@xa
标记仅出现在tkz-tools-base.tex
和中tkz-fct.sty
;我还更改了名称相似的标记,以保持一致性。
\documentclass{article}
\usepackage{etoolbox}
\usepackage{tkz-fct} % Must appear before {thmtools}
\usepackage{thmtools}
\declaretheorem{theorem}
\makeatletter
%%% patch tkz-tools-base.tex
\let\tkz@g@xa\tkz@init@xmin % don't undef \@xa or thmtools will be upset
\let\tkz@g@xb\tkz@init@xmax\undef\@xb
\let\tkz@g@ya\tkz@init@ymin\undef\@ya
\let\tkz@g@yb\tkz@init@ymax\undef\@yb
\patchcmd{\tkz@Init}
{\global\let\@xa\tkz@init@xmin
\global\let\@xb\tkz@init@xmax
\global\let\@ya\tkz@init@ymin
\global\let\@yb\tkz@init@ymax}
{\global\let\tkz@g@xa\tkz@init@xmin
\global\let\tkz@g@xb\tkz@init@xmax
\global\let\tkz@g@ya\tkz@init@ymin
\global\let\tkz@g@yb\tkz@init@ymax}
{}{}
\patchcmd{\tkz@Grid}
{(\@xa,\@ya)(\@xb,\@yb)}
{(\tkz@g@xa,\tkz@g@ya)(\tkz@g@xb,\tkz@g@yb)}
{}{}
%%% patch tkz-fct.sty
\patchcmd{\tkz@fct}
{\@xa:\@xb}
{\tkz@g@xa:\tkz@g@xb}
{}{}
\makeatother
\begin{document}
\begin{tikzpicture}
\tkzInit % No need to even plot anything!
\end{tikzpicture}
\begin{theorem}[A Silly Theorem]
Let $a = 1$. Then $a > 0$.
\end{theorem}
\end{document}
也许应该让 Tkz 套件和的维护人员知道这个问题thmtools
。