我尝试按照定理环境对方程进行编号。所以我写
\declaretheorem[name=Theorem,sibling=equation]{thm}
但随后出现了错误:
命令 \@thm 已定义。
没有定义计数器“thm”。
\thm 未定义。
然而,即使我将代码改为
\declaretheorem[name=Theorem,sibling=equation]{theorem}
或者“thm”以外的其他内容,问题就消失了。
我想知道为什么会发生这种情况?
这是我的示例:
\documentclass{article}
\usepackage{amsmath}
\usepackage{thmtools}
\numberwithin{equation}{section}
\declaretheorem[name=Theorem,sibling=equation]{thm}
\begin{document}
\section{MWS}
\begin{thm}
content
\end{thm}
\end{document}
答案1
这暴露了一个严重的错误thmtools
。在辅助包的第 59 行,aliasctr.sty
我们发现
\@ifdefinable{c@#1}{%
作为 定义的一部分\@counteralias
。这是一个严重的错误,因为它\@ifdefinable
期望一个标记作为其参数,并且如果执行这部分代码,就会造成严重后果。
解决方案:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{etoolbox}
% fix the bug in aliasctr.sty
\makeatletter
\patchcmd{\@counteralias}
{\@ifdefinable{c@#1}}
{\expandafter\@ifdefinable\csname c@#1\endcsname}
{}{}
\makeatother
\numberwithin{equation}{section}
\declaretheorem[
name=Theorem,
sibling=equation,
]{thm}
\begin{document}
\section{MWS}
\begin{thm}
content
\end{thm}
\begin{equation}
1=1
\end{equation}
\end{document}