IEEEtrantools 打破重述定理(thm-restate)

IEEEtrantools 打破重述定理(thm-restate)

我真的很喜欢这个问题/答案(最小示例中的“修补定理定义”),我想将其改编为我的自定义论文类文件。但是,我在使用包时遇到了一些问题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})但我认为最好等待开发人员提供更好的修复。

相关内容