使用 \autoref 进行多重引用

使用 \autoref 进行多重引用

我目前正在使用包\autoref中的命令hyperref来引用我的定理等。然而,我希望能够(轻松地)引用两个或多个定理/引理/......,例如通过调用类似的命令\autoref{lemma1,lemma2,lemma5}——其中引理 1、2 和 5 分别标记为lemma1lemma2——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 的示例输出:

多个 <code>\autoref</code> 的示例

宏假设存在一些小限制(?):

  • 所有参考文献都属于同一“类型”(因此所有引理或所有定理等)

  • 不处理可选参数\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}

那么输出是:

在此处输入图片描述

该功能更实际的用途是添加外语支持。

相关内容