我想重申某一部分中的一个定理,例如:
\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
要了解我们在上下文中替换的代码,你必须仔细查看定理工具可重写代码。