结合 \autoref 和 \eqref

结合 \autoref 和 \eqref

假设方程是

\begin{equation}
r^2 = x^2 + y^2 \text{.} \label{eq:circ}
\end{equation}

现在,如果我使用

\autoref{eq:circ}

我得到了Equation 1。我如何获得Equation (1)(使用 时获得的括号\eqref)同时仍保持超链接?

根据以下答案进行编辑。

我定义了两个版本的命令,分别用于句首和句中:

\def\chapterautorefname{Chap.}
\def\sectionautorefname{Sec.}
\def\subsectionautorefname{sub--Sec.}
\def\figureautorefname{Fig.}
\def\tableautorefname{Tab.}
\def\equationautorefname{Eq.}

\newcommand{\Autoref}[1]{%
  \begingroup%
  \def\chapterautorefname{Chapter}%
  \def\sectionautorefname{Section}%
  \def\subsectionautorefname{Sub--Section}%
  \def\figureautorefname{Figure}%
  \def\tableautorefname{Table}%
  \def\equationautorefname~#1{Equation~(#1)}%
  \autoref{#1}%
  \endgroup%
}

在使用\Autoref它时说

的使用\equationautorefname与其定义不符\Autoref{eq:llg1}

我如何解决它?

答案1

我在我的一份旧文档中发现了这个技巧,但我感觉这个想法来自别人:

\documentclass{article}

\usepackage{hyperref}

\def\equationautorefname~#1\null{Equation~(#1)\null}

\begin{document}

\begin{equation}
  \label{eq:circ}
  r^2 = x^2 + y^2.
\end{equation}
\autoref{eq:circ}

\end{document}

输出

答案2

Svend Tveskæg 的回答中描述的技巧来自于此回答作者:Heiko Oberdiek。

如果您希望它与您的设置(命令\Autoref)一起工作,您必须按如下方式使用:

\newcommand{\Autoref}[1]{%
  \begingroup%
  \def\chapterautorefname~##1\null{Chapter~(##1)\null}%
  \def\sectionautorefname~##1\null{Section~(##1)\null}%
  \def\subsectionautorefname~##1\null{Sub--Section~(##1)\null}%
  \def\figureautorefname~##1\null{Figure~(##1)\null}%
  \def\tableautorefname~##1\null{Table~(##1)\null}%
  \def\equationautorefname~##1\null{Equation~(##1)\null}%
  \autoref{#1}%
  \endgroup%
}

完成 MWE

\documentclass{article}

\usepackage[colorlinks]{hyperref}

\def\chapterautorefname~#1\null{Chap.~(#1)\null}
\def\sectionautorefname~#1\null{Sec.~(#1)\null}
\def\subsectionautorefname~#1\null{sub--Sec.~(#1)\null}
\def\figureautorefname~#1\null{Fig.~(#1)\null}
\def\tableautorefname~#1\null{Tab.~(#1)\null}
\def\equationautorefname~#1\null{Eq.~(#1)\null}

\newcommand{\Autoref}[1]{%
  \begingroup%
  \def\chapterautorefname~##1\null{Chapter~(##1)\null}%
  \def\sectionautorefname~##1\null{Section~(##1)\null}%
  \def\subsectionautorefname~##1\null{Sub--Section~(##1)\null}%
  \def\figureautorefname~##1\null{Figure~(##1)\null}%
  \def\tableautorefname~##1\null{Table~(##1)\null}%
  \def\equationautorefname~##1\null{Equation~(##1)\null}%
  \autoref{#1}%
  \endgroup%
}

\begin{document}

\begin{equation}
  \label{eq:circ}
  r^2 = x^2 + y^2.
\end{equation}

\Autoref{eq:circ} some text \autoref{eq:circ}.

\end{document} 

输出

在此处输入图片描述

答案3

为了\autoref自动在方程编号周围插入括号,即使其表现得像\eqref,您还可以执行以下操作(假定包已加载):修改包的amsmath宏:\tagform@amsmath

\let\origtheequation\theequation
\makeatletter
\def\tagform@#1{\maketag@@@{\ignorespaces#1\unskip\@@italiccorr}}
\makeatother
\renewcommand{\theequation}{(\origtheequation)}

请注意,由于@字符的存在,的重新定义\tagform@将被包装在\makeatletter...对中。顺便说一下,\makeatother宏将继续像以前一样工作。\eqref

完整的 MWE - 请注意,没有必要进一步摆弄以下定义\Autoref

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\let\origtheequation\theequation
\makeatletter
\def\tagform@#1{\maketag@@@{\ignorespaces#1\unskip\@@italiccorr}}
\makeatother
\renewcommand{\theequation}{(\origtheequation)}
\usepackage[colorlinks=true]{hyperref}
\def\equationautorefname{Eq.}
\newcommand{\Autoref}[1]{%
  \begingroup%
    \def\equationautorefname{Equation}%
    \autoref{#1}%
  \endgroup%
}
\setlength{\textwidth}{3in} % just for this example
\begin{document}
\begin{equation} \label{eq:1}
a^2+b^2=c^2.
\end{equation}

Here's a reference to \autoref{eq:1}. 

\Autoref{eq:1} shows us that \dots
\end{document}

相关内容