我知道如何使用 \label 和 \ref 来获取我之前在文档中创建的结果(或其他任何内容)的引用。但这很繁琐,每次都需要我创建标签名称。
我想知道的是,是否有更系统/更强大的方法来实现这一点。我想有很多方法可以解决一个问题,所以我将这样表述这个问题;
您如何在 LaTeX 文档中引用类似定理的环境,以及为什么以这种方式这样做?
由于我提问的方式会给出多个答案和一些观点,因此我标记了此 CW 并加上了 Big-list 标签。如果这是错误的,请随意更改。
答案1
几年前,我在不了解theoremref
或ntheorem
包的情况下自己解决了这个问题,但是它们本身并不能满足你的要求。
我在使用标准设置时遇到的问题如下:
您必须为每种定理类型赋予不同的环境,该环境具有包含定理名称的“开始”和“结束”标签。如果您想进行更改,则必须更改两个不相邻的单词。
\label
每次你都必须写。无论何时使用,你都必须记住定理类型的名称
\ref
。这也是要解决的问题theoremref
,尽管我认为他们解决的方式与我略有不同。ref
(使用时)产生的超链接hyperref
仅包含数字而不包含名称(“定理 2”等),这是一个很小的目标,但更改它却很尴尬。
theorem
我通过使用具有以下语法的环境来处理 1 和 2
\begin{theorem}{theorem type}{name of label} ... \end{theorem}
从而解决了定理类型的局部性问题,也允许我省略\label
。对于 3,我使用fncylab
包来完成工作theoremref
(请注意,当时有一个错误,如果amsthm
不做一些工作,就无法完成这项工作。现在可能已经修复了)。这也解决了 4,因为现在单词“定理”是 生成的文本的一部分\ref
,它全部包裹在超链接中,我不需要做任何事情。
我非常喜欢这个解决方案。我写了类似的东西
\begin{theorem}{lem}{little lemma} This is a small lemma. \end{theorem}
It follows from \ref{little lemma} that we have
\begin{theorem*}{thm} The main result. \end{theorem*}
theorem*
当然,你可以猜测环境的影响。如果你有兴趣,你可以在我的网站上看到 .sty 文件。
之后:我刚刚发现了这个thmtools
软件包。天哪,那东西太棒了。我真希望我早知道它。它可以完成上述所有功能(甚至更多),并使用 keyval 语法来设置参数,这比使用多个参数要好得多。阅读其手册的第 8 页,看看我的 hack 是否正确。(它并不完全相同:它没有解决第 1 点。但是,我可以想象编写一个包装器环境,采用一个可以重复上述示例的键“类型”。)
答案2
如果您使用ntheorem
包,这将允许您\thref
以智能方式引用定理环境。因此,它将自动将定理引用为“定理 1”,将引理引用为“引理 2”。
hyperref
也会自动用其命令做同样的事情\autoref
。
答案3
查看该coolthms
软件包(诚然,我是它的作者之一)。我们遇到了类似的问题,尤其是关于嵌套在定理环境中的标签列表(参见这个相关问题) 并用于ntheorem
格式化和cleveref
引用,允许单个 (!) 引用具有以下形式(例如)“定理 1 (a)”。我们仍在寻找可以测试并提供反馈的人 :)
\Label
这个想法是为嵌套在“类似定理”环境中的列表创建一个新命令,该列表的格式包括定理名称和编号。
答案4
自动标记如何工作?如果有一种方法可以生成,比如说,,\label{thm1}
等等\label{thm2}
,那么你就无法重新排列定理或插入新定理,而不会自动更改标签。如果你愿意放弃这样的编辑,那么你不妨Theorem 1
在源代码中写入,\label
完全跳过这一步。