例如,tex文件中第1节的第一个方程的编号形式为(1.1),当我们使用命令\autoref
和\eqref
引用它时,编译后的pdf文件将分别显示方程1.1和(1.1)。
现在的问题是,我怎样才能仅使用命令\autoref
来实现与使用命令相同的效果\eqref
。
顺便说一句,请不要使用该包cleveref
!
答案1
\autoref
包hyperref
调用的宏\<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
扩展为(默认为“方程式”)和方程式编号之间的空格。