如何使用命令 \autoref 达到与使用命令 \eqref 相同的效果?

如何使用命令 \autoref 达到与使用命令 \eqref 相同的效果?

例如,tex文件中第1节的第一个方程的编号形式为(1.1),当我们使用命令\autoref\eqref引用它时,编译后的pdf文件将分别显示方程1.1和(1.1)。

现在的问题是,我怎样才能仅使用命令\autoref来实现与使用命令相同的效果\eqref

顺便说一句,请不要使用该包cleveref

答案1

\autorefhyperref调用的宏\<counter>autorefname后跟一个不可分割的空格~和数字。最后\null附加(从 LaTeX 继承了一些)。这可用于定义\equationautorefname为捕获参数中的方程编号的宏。

\documentclass{article}
\usepackage{amsmath,hyperref}
\hypersetup{colorlinks=true}

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

\begin{document}
\begin{equation}\label{eq:pythagoras}
a^2+b^2=c^2\,.
\end{equation}
As may be seen in equation \eqref{eq:pythagoras} or, alternatively,
in \autoref{eq:pythagoras}, \ldots
\end{document}

带有红色链接的结果

答案2

您无需摆弄 的定义\autoref,而是可以使用\tagform@命令(由软件包提供amsmath)自动在交叉引用的方程编号周围插入括号。无论您使用什么交叉引用命令( 、 等),此操作\ref均可\autoref行。以下 MWE 显示了如何执行此操作:

\documentclass{article} 
\usepackage{amsmath,hyperref}
\hypersetup{colorlinks=true}

    % First, save the current form of `\theequation`
    \let\oldtheequation\theequation
    \makeatletter
    \def\tagform@#1{\maketag@@@{\ignorespaces#1\unskip\@@italiccorr}}
    \renewcommand{\theequation}{(\oldtheequation)}
    \makeatother 

\begin{document} 
\begin{equation}\label{eq:pythagoras}
a^2+b^2=c^2\,.
\end{equation}
Looking at equation \ref{eq:pythagoras}, equation \eqref{eq:pythagoras}, or 
\autoref{eq:pythagoras}, \ldots
\end{document} 

在此处输入图片描述

答案3

我认为,要\autoref在公式编号周围加上括号,而不是在部分编号周围加上括号,等等,需要进行大量的黑客攻击(尽管我可能错了)。但是,您可以创建一个新命令\eqautoref,例如,它可以代替使用\eqref

\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\numberwithin{equation}{section}
\makeatletter
\renewcommand\equationautorefname{\@gobble}
\makeatother
\newcommand\eqautoref[1]{(\autoref{#1})}
\begin{document}
\section{A section}
\begin{equation}
a = b \label{eqn}
\end{equation}
\eqautoref{eqn}
\end{document}

\@gobble宏消除了通常\equationautorefname扩展为(默认为“方程式”)和方程式编号之间的空格。

相关内容