我目前正在使用包\autoref
中的命令hyperref
来引用我的定理等。然而,我希望能够(轻松地)引用两个或多个定理/引理/......,例如通过调用类似的命令\autoref{lemma1,lemma2,lemma5}
——其中引理 1、2 和 5 分别标记为lemma1
和lemma2
——lemma5
以便引用显示:“引理 1、2 和 5”。
有人能帮我吗?我觉得这个hyperref
包似乎没有提供这个功能。
最小示例
\documentclass{memoir}
\usepackage{amsmath,amssymb}
\usepackage{mathtools}
\usepackage{cleveref}
\mathtoolsset{showonlyrefs,showmanualtags}
\begin{document}
This is the first equation
\begin{equation}
a^2 + b^2 = c^2
\end{equation}
and this is the second equation
\begin{equation}
\label{test}
\alpha^2 + \beta^2 = \gamma^2
\end{equation}
Referring to second equation here: \eqref{test}.
\end{document}
答案1
编辑增加了设置复数名称的方法,实际上提供了外语支持
我决定我需要\autoref
今天的这个功能,然后我很惊讶我找不到它……所以这里有一种方法可以定义一个\Autoref
可以执行此操作的命令。具体来说,
\Autoref{ref1,ref2,...}
将扩展为第一个参考文献的复数形式,后跟所有参考文献的超链接。以下是 MWE 的示例输出:
宏假设存在一些小限制(?):
所有参考文献都属于同一“类型”(因此所有引理或所有定理等)
不处理可选参数
\autoref
或*
-form(很容易修复......)它可能不能很好地与方程引用配合使用
默认情况下,复数形式只需在
s
“单数”名称中添加一个即可获得(因此它以英语为中心)。可以通过定义 autorefname 的复数版本来覆盖这一点,例如\providecommand*{\lemmaautorefnameplural}{Lots of lemmas}
。更现实的应用是为其他语言定义复数。...autorefnameplural
形式是可选的
该\Autoref
宏的行为就像\autoref
给定一个引用时一样。
无论如何,这是代码:
\documentclass[a4paper]{amsart}
\usepackage[colorlinks=true]{hyperref}
\makeatletter
% define a macro \Autoref to allow multiple references to be passed to \autoref
\newcommand\Autoref[1]{\@first@ref#1,@}
\def\@throw@dot#1.#2@{#1}% discard everything after the dot
\def\@set@refname#1{% % set \@refname to autoefname+s using \getrefbykeydefault
\edef\@tmp{\getrefbykeydefault{#1}{anchor}{}}%
\xdef\@tmp{\expandafter\@throw@dot\@tmp.@}%
\ltx@IfUndefined{\@tmp autorefnameplural}%
{\def\@refname{\@nameuse{\@tmp autorefname}s}}%
{\def\@refname{\@nameuse{\@tmp autorefnameplural}}}%
}
\def\@first@ref#1,#2{%
\ifx#2@\autoref{#1}\let\@nextref\@gobble% only one ref, revert to normal \autoref
\else%
\@set@refname{#1}% set \@refname to autoref name
\@refname~\ref{#1}% add autoefname and first reference
\let\@nextref\@next@ref% push processing to \@next@ref
\fi%
\@nextref#2%
}
\def\@next@ref#1,#2{%
\ifx#2@ and~\ref{#1}\let\@nextref\@gobble% at end: print and+\ref and stop
\else, \ref{#1}% print ,+\ref and continue
\fi%
\@nextref#2%
}
\makeatother
\newtheorem{lemma}{Lemma}
\providecommand*{\lemmaautorefname}{Lemma}
%\providecommand*{\lemmaautorefnameplural}{Lots of lemmas}
\parindent=0pt
\begin{document}
\begin{lemma}1+1=2\label{one}\end{lemma}
\begin{lemma}2+2=4\label{two}\end{lemma}
\begin{lemma}3+3=6\label{three}\end{lemma}
By \autoref{one}, \autoref{two} and \autoref{three} we are amazed.
By \Autoref{one} we are not amazed.
By \Autoref{one,two} we are a little amazed.
By \Autoref{one,two,three} we are quite amazed.
\end{document}
如果你取消注释该行
\providecommand*{\lemmaautorefnameplural}{Lots of lemmas}
那么输出是:
该功能更实际的用途是添加外语支持。