更改标签系统引用的当前对象

更改标签系统引用的当前对象

我想以某种方式将定理的证明称为定理本身。

实际上如何\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}

在此处输入图片描述

相关内容