有时当我工作的时候我会写一些类似
\begin{proposition} \label{my new result}
...
\end{proposition}
...
blah blah in Proposition \ref{my new result} blah...
但后来我意识到这个命题实际上应该变成一个引理。所以我把它改成
\begin{lemma} \label{my new result}
...
\end{lemma}
问题是,我必须找出所有我写过 Proposition 的地方,然后将其改为 Lemma,这很繁琐,而且容易出错。好吧,我们在编辑器中有搜索功能,所以其实并不复杂,但这样做仍然感觉不对。我更愿意写
\begin{proposition} \label{my new result}
...
\end{proposition}
...
blah blah in \labelNameFor{my new result} \ref{my new result} blah...
其中 labelNameFor 是一个假设的魔法命令,输出“Proposition”。然后我可以忘记所有引用结果的地方,只需进行任何我想要的更改即可。
有没有办法做这样的事情?据我所知,标签/引用机制只是基于计数器,所以我没有看到直接的方法,但也许比我更聪明、更勤奋的人已经考虑过这个问题。
答案1
我建议使用cleveref
该包增强了 LaTeX 的交叉引用功能,可以确定交叉引用的类型和上下文。
在你的情况下,\cref{my new result}
将输出命题 1。如果你将这个特定的环境更改为环境,则输出lemma
相同\cref{my new result}
引理 1。
如果您想彻底改变样式,甚至可以更改整个文档中环境的引用名称。例如:
\documentclass{article}
\usepackage{cleveref}
\newtheorem{proposition}{Proposition}
\begin{document}
\begin{proposition}\label{my new result}
...
\end{proposition}
...
blah blah in \Cref{my new result} blah...
\end{document}
输出... 提案 1 中的等等等等...
如果你把这个修改添加到序言中
\Crefname{proposition}{Lemma}{Lemmas}
\crefname{proposition}{lemma}{lemmas}
输出变为...引理 1 中的 blah blah...
具有类似功能的其他软件包ntheorem
(thref
可选),hyperref
(与\autoref
)和fancyref
。您的问题可能可以通过其中任何一个来解决,但cleveref
似乎更灵活并且通常提供更多功能 - 如果您对定理环境或一般交叉引用的更多功能感兴趣,请查看它。
答案2
答案3
如上所述,这个问题与上一个问题非常相似。 这是我对这个问题的回答(已接受)。摘要:使用fncylab
。
针对您关于引用基于计数器的评论:这是真的,但这并不妨碍您想要的更详细的方案!事实上,每个计数器都是几个相关宏的捆绑包(在 C 中它将是一个struct
),其中一个被调用p@<counter name>
并包含在引用中使用时要在计数器编号之前打印的材料。该fncylab
包实际上修改了它(以 LaTeX 源本身建议的方式),因此p@<counter name>
可以是一个以数字为参数的宏。