tkz-fct 和 thmtools 之间有冲突吗?

tkz-fct 和 thmtools 之间有冲突吗?

我正在使用 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

相关内容