autoref 和公式编号周围的括号

autoref 和公式编号周围的括号

我正在为一本期刊撰写一篇文章,采用 AMS 数学方程式格式,例如“Eq. (1)”。我想超链接整个“Eq. (1)”,而不仅仅是“1”。目前我使用的是\renewcommand{\equationautorefname}{Eq.}。但这会产生一个超链接的“Eq. 1”。我更喜欢可以继续使用 的解决方案\autoref

解决方案如下:如何使用命令 \autoref 达到与使用命令 \eqref 相同的效果?,但它使用\def并且期刊风格禁止使用 Tex 的低级命令,如\def\edef\gdef

答案1

如果你不愿意 —— 或者不允许! —— 修改一些低级 TeX 宏,你仍然可以通过 (a) 在序言中执行以下指令来实现自动在交叉引用的方程编号周围放置括号的目标:

\usepackage[nameinlink,capitalize]{cleveref}

以及 (b) 使用\cref而不是\autoref来生成交叉引用。

在此处输入图片描述

\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink,capitalize]{cleveref}
\setlength\textwidth{3in} %% just for this example
\begin{document}
\begin{equation}\label{eq:pythag}
a^2+b^2=c^2
\end{equation}
A cross-reference to \cref{eq:pythag} via \verb+\cref+.
\end{document}

有关各种交叉引用包的更多信息,特别是hyperrefcleveref在这方面的功能,请参阅帖子交叉引用包:使用哪一个,哪些有冲突?


附录: 如果你必须使用\autoref和 想要在交叉引用的方程编号周围放置括号,则需要重新定义宏\theequation。假设您还使用amsmath包,则还需要修改辅助宏\tagform@。以下 MWE 显示了如何完成此操作。(需要指令\makeatletter和 ,\makeatother因为部分代码涉及“特殊”字符@。)

附注:如果期刊的指导方针禁止\def在您的文档中使用,那么使用\renewcommand可能也会被反对。如果是这样,您可能应该使用\cref而不是\autoref来创建方程式的交叉引用...

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\makeatletter
\let\oldtheequation\theequation
\renewcommand\tagform@[1]{\maketag@@@{\ignorespaces#1\unskip\@@italiccorr}}
\renewcommand\theequation{(\oldtheequation)}
\makeatother

\usepackage[colorlinks]{hyperref}
\renewcommand{\equationautorefname}{Eq.}

\usepackage[nameinlink,capitalize]{cleveref}
%% Need to undo the effect of redefinition of "\theequation" to use \cref:
\creflabelformat{equation}{#2\textup{#1}#3}  % No more parentheses around "#1"

\setlength\textwidth{3in} %% just for this example
\begin{document}
\begin{equation}\label{eq:pythag}
a^2+b^2=c^2
\end{equation}

A cross-reference to \autoref{eq:pythag} via \verb+\autoref+.

A cross-reference to Eq.~\eqref{eq:pythag} via \verb+\eqref+.

A cross-reference to \cref{eq:pythag} via \verb+\cref+.
\end{document}

答案2

以下示例定义了\myeqref,它将公式引用添加到 前面,Eq.~并将前缀和括号包含在链接中。前缀可以被第一个可选参数覆盖。

名称\autoref宏无法访问计数器,因此下面的定义\equationautorefname只是一个肮脏的黑客行为。

\documentclass[a5paper]{article}
\usepackage{amsmath}
\usepackage{hyperref}
\newcommand*{\myeqref}[2][Eq.~]{%
  \hyperref[{#2}]{#1(\ref*{#2})}%
}
\def\equationautorefname#1#2\null{%
  Eq.#1(#2\null)%
}

\begin{document}
\begin{equation}
\label{eq:einstein}
E=mc^2
\end{equation}
References: \myeqref{eq:einstein} and \myeqref[equation~]{eq:einstein}.\\
Reference: \autoref{eq:einstein}.
\end{document}

结果

答案3

有点肮脏的黑客行为,但只要hyperref不改变其\autoref实现,它就可以起作用。

\documentclass{article}

\usepackage{hyperref}

\makeatletter
  \AtBeginDocument{%
    \let\plain@equationautorefname\equationautorefname
    \def\equationautorefname{\plain@equationautorefname\@autoref@insert@tagform}%
    \def\@autoref@insert@tagform~#1\null{~(#1\null)}%
  }
\makeatother

\begin{document}

\begin{equation}
  \label{foo}
  a + b = c
\end{equation}

\autoref{foo}

\end{document}

MWE 输出

相关内容