重述章节中没有“定理 X”部分的定理文本

重述章节中没有“定理 X”部分的定理文本

我想重申某一部分中的一个定理,例如:

\documentclass{article}
\usepackage{thmtools}
\usepackage{thm-restate}


\declaretheorem{theorem}

\begin{document}
\begin{restatable}{theorem}{hello}
Hello!
\end{restatable}
\hello*
\section{\protect\hello*}
\end{document}

输出

正如您在图片中看到的,节号“1”单独占一行,并且打印了不需要的“定理 1”。想要的输出是:

Theorem 1 Hello!
Hello!
1 Hello!

不幸的是,我找不到只获取定理文本的方法(没有“定理 1”):

因此,我正在寻找一个类似于的命令,该命令\hello*仅产生定理的文本。在大多数情况下,我仍然需要\hello*完全重述定理,只有在某些情况下我才只需要文本,而不需要换行符和“定理 X”。因此,修复不应该破坏的行为\hello*,而只是给我一种仅使用文本重述定理的额外方法。

谢谢你!

马库斯

答案1

此代码源自此站点上其他密切相关的答案,但我丢失了与它们的链接,并且在此期间添加和删除了我自己所做的修改。本质上,我们修补了 theoremtools 可重写环境,以便它不会每次都包含标头,利用内置的 \if 检查我们是否将其插入原始调用位置。

尝试将其添加到您的序言中:

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\thmt@restatable}% Edit \thmt@restatable
   {\csname #2\@xa\endcsname\ifx\@nx#1\@nx\else[{#1}]\fi}% Replace this code,
                 % which calls the internal "begin theorem" header code...
   {\ifthmt@thisistheone% ... with this, which only does so at the original call site.
       \csname #2\@xa\endcsname\ifx\@nx#1\@nx\else[{#1}]\fi%
       \else\fi}
   {}{\typeout{FIRST PATCH TO THM RESTATE FAILED}} % execute on success/failure 
\xpatchcmd{\thmt@restatable}% A second edit to \thmt@restatable, so that we also
   % have the appropriate # of endgroups in all cases.
   {\csname end#2\endcsname}
   {\ifthmt@thisistheone\csname end#2\endcsname\else\fi}%
   {}{\typeout{FAILED SECOND THMT RESTATE PATCH}}
\makeatother

要了解我们在上下文中替换的代码,你必须仔细查看定理工具可重写代码

相关内容