我如何才能检索定理的名称?
我知道如何使用标签来引用定理,并负责自己给出“定理”或“引理”的标题。我还知道诸如这样的软件包ntheorem
可以更进一步,并给出“定理”或“引理”的名称,然后为我保持一致性。但是,我找不到允许我定义定理并恢复其标题的软件包。
例如,请看以下代码片段:
\begin{theorem}[Rely-to-Atomic] For any predicate @{term "p"}, and relations @{term "r"}
and @{term "q"}, such that @{term "❙[p,q❙]"} tolerates interference @{term "r"},
\begin{IEEEeqnarray*}{c}
@{thm (concl) Law_7_4_Rely_To_Atomic_Ref}
\end{IEEEeqnarray*}\label{RTA_Ref}
\end{theorem}
系统处理完@块内的搞笑引语后,生成相应的latex,并编译为:
我想要的是一种检索字符串“依赖原子“来自标签RTA_Ref
。如果我有这个,我可以引用包括标题在内的定理以方便我的读者。例如,通过输入:
Law~\ref{RTA_Ref}~(\nameofthm{RTA_Ref})
获得方法:
定律 3.95 (Rely-to-Atomic)
因为我知道有些包可以提供定理表,所以我相信应该有一种方法来访问定理的标题或适合此目的的包。
答案1
该thmtools
软件包可以轻松实现这一点:
\documentclass{article}
\usepackage{hyperref}
\usepackage{thmtools}
\declaretheorem{Theorem}
\begin{document}
\begin{Theorem}[My Theorem]\label{thm}
$1 + 3 = 4$
\end{Theorem}
As we saw in Theorem~\ref{thm} (\nameref{thm})
\end{document}
您可以使用以下方法获得相同的结果amsthm
:
\documentclass{article}
\usepackage{hyperref}
\usepackage{amsthm}
\newtheorem{thm}{Theorem}
\begin{document}
\begin{thm}[My Theorem]\label{thm}
$1 + 3 = 4$
\end{thm}
As we saw in Theorem~\ref{thm} (\nameref{thm})
\end{document}
最后,如果您想要一个链接而不是两个,您可以使用以下命令:
\documentclass{article}
\usepackage{hyperref}
\usepackage{thmtools}
\declaretheorem{Theorem}
\begin{document}
\begin{Theorem}[My Theorem]\label{thm}
$1 + 3 = 4$
\end{Theorem}
As we saw in \hyperref[thm]{Theorem~\ref*{thm} (\nameref*{thm})}.
\end{document}
如果您不想要任何链接,只需使用\nameref*{thm}
。
我想您将能够调整代码以打印“Law”而不是“Theorem”。
答案2
这里有一个额外的解决方案,它使用amsthm
并且独立于hyperref
。它模仿了 cross-ref-routine 中内置的 LaTeX:
\documentclass{article}
\usepackage{amsthm}
\usepackage{amssymb}
\newtheorem{law}{Law}
\makeatletter
\let\sv@law\law
\let\sv@label\label
\renewcommand\law[1][]{\sv@law[#1]\def\curr@thmname{#1}}
\renewcommand\label[1]{%
\immediate\write\@auxout{%
\noexpand\global\noexpand\@namedef{#1-thmname}{\curr@thmname}}
\sv@label{#1}
}
\newcommand\nameofthm[1]{\@nameuse{#1-thmname}}
\makeatother
\begin{document}
%Law~\ref{RTA_Ref}~(\nameofthm{RTA_Ref})
%
\begin{law}[Rely-to-Atomic]\label{RTA_Ref}
For any predicate $p$, and relations $r$ and $q$, such that $[p,q]$ tolerates interference $r$,
\[
\mathbf{rely}\,r\cdot[p,q]\sqsubseteq\langle p,q\rangle
\]
\end{law}
...
Law~\ref{RTA_Ref}~(\nameofthm{RTA_Ref})
\end{document}