我想以某种方式将定理的证明称为定理本身。
实际上如何\label
才能知道它目前位于该定理内?是否有某种方法可以欺骗标签系统(例如通过更改某些宏的值),以便即使它目前位于该定理之外,它仍认为它位于该定理内?
下面是 MWE。
\documentclass{article}
\usepackage{amsthm,create-theorem}
\CreateTheorem{theorem}{}
\begin{document}
\begin{theorem}\label{thm}
Some text.
\end{theorem}
Some text.
\begin{proof}[Proof of the {\cref{thm}}]
% perhaps do something here
\label{proof-thm1}
Some text
\end{proof}
\cref{proof-thm1} % I would like this to be "theorem 1"
\end{document}
这个问题的动机是,在包中
cleveref-usedon
,如果打开模式usedby
,那么为了使此功能正常工作,proof
环境必须包含在相应的定理类型环境中,这不是一个理想的写法。因此,我想知道是否有某种方法可以欺骗标签系统,使其认为它正在标记另一种类型的东西。
答案1
\cref@currentlabel
只需存储您想要引用的环境的值,并在设置标签之前恢复该值即可。
\documentclass{article}
\usepackage{amsthm,create-theorem}
\CreateTheorem{theorem}{}
\begin{document}
\begin{theorem}\label{thm}
\makeatletter
\ExplSyntaxOn
\tl_gset:No \g_tmpa_tl { \cref@currentlabel }
\ExplSyntaxOff
\makeatother
Some text.
\end{theorem}
Some text.
\begin{proof}[Proof of the {\cref{thm}}]
\makeatletter
\ExplSyntaxOn
\RenewCommandCopy \cref@currentlabel \g_tmpa_tl
\ExplSyntaxOff
\makeatother
\label{proof-thm1}
Some text
\end{proof}
\cref{proof-thm1} % I would like this to be "theorem 1"
\end{document}