![IEEEtrantools 打破重述定理(thm-restate)](https://linux22.com/image/434203/IEEEtrantools%20%E6%89%93%E7%A0%B4%E9%87%8D%E8%BF%B0%E5%AE%9A%E7%90%86%EF%BC%88thm-restate%EF%BC%89.png)
我真的很喜欢这个问题/答案(最小示例中的“修补定理定义”),我想将其改编为我的自定义论文类文件。但是,我在使用包时遇到了一些问题IEEEtrantools
,我“需要”用它来排版一些数学。
最初,我的定理定义放在\AtEndPreamble
钩子内部,虽然我不记得为什么,但它与 一起工作IEEEtrantools
。但如果将上述问答应用到钩子内部,则补丁无效。如果我将其放在钩子外部,IEEEtrantools
则会导致错误。
我可以尝试避免IEEEtrantools
,但我宁愿不这样做。那么你能找出问题的原因并提供解决方案吗?
先感谢您!
平均能量损失
\documentclass{scrbook}
\usepackage{etoolbox}
\usepackage{xpatch}
%\RequirePackage{IEEEtrantools} % <==== breaks patched theorem defintion
%% patched theorem defintion ==============
\usepackage{thmtools}
\usepackage{thm-restate}
\makeatletter
\xpatchcmd{\thmt@restatable}% Edit \thmt@restatable
{\csname #2\@xa\endcsname\ifx\@nx#1\@nx\else[{#1}]\fi}% Replace this code
{\ifthmt@thisistheone\csname #2\@xa\endcsname\ifx\@nx#1\@nx\else[{#1}]\fi\else\csname #2\@xa\endcsname\fi}% with this code
{}{} % execute code for success/failure instances
\makeatother
%% ========================================
\AtEndPreamble{
\usepackage{hyperref}
\usepackage[sort&compress]{cleveref}
% <=== theorem definition could be moved here and originally was here, but then the patch does not work.
}
\newtheorem{thm}{Theorem}
\begin{document}
\section{Introduction}
\begin{restatable}[\S\ref{SectionNumber}]{thm}{TheoremName}
theorem contents
\end{restatable}
\section{Some Section}
\label{SectionNumber}
\TheoremName*
\end{document}
答案1
cleveref
和子方程之间有时存在问题。请参阅@Toby Cubitt 在
https://tex.stackexchange.com/a/375140/161015
虽然cleveref
代码已被修改以使用其自己的版本,但在加载\@addtoreset
时似乎仍然会失败。IEEEtrantools
补丁可能会跳过编译错误,例如通过将IEEEsubequation
从属设为equation
而不是subequation
(在\cref@addtoreset{IEEEsubequation}{subequation}
)但我认为最好等待开发人员提供更好的修复。