如何将 \ref 重新定义为 \eqref?

如何将 \ref 重新定义为 \eqref?

我想重新定义\ref\eqref,但\renewcommand{\ref}{\eqref}不起作用。我猜这是因为\eqref内部定义为\newcommand{\eqref}{(\ref)},但我不确定。有什么建议吗?

答案1

如果你真的想要做到这一点,在amsmath.sty\eqref定义为

\renewcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}}

所以你可以说

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\let\origref\ref
\renewcommand{\ref}[1]{\textup{\tagform@{\origref{#1}}}}
\makeatother

\begin{document}

\section{Test}\label{a}
Section~\ref{a}? Equation~\ref{b}
\begin{equation}\label{b}
a=b
\end{equation}

\end{document}

在此处输入图片描述

请注意重新定义引入的不一致问题;您正在交叉引用部分(1),但您的文档有部分1;浮点数和文档中的其他对象也会出现类似的问题。

附录

也许,如果您有兴趣重新定义特定类型对象的交叉引用格式,cleveref包可能是一个更好的选择;一个小例子,其中我改变了交叉引用图形的格式,而其他所有交叉引用保持不变:

\documentclass{article}
\usepackage{amsmath}
\usepackage{cleveref}

\crefformat{figure}{figure~(#2#1#3)}
\Crefformat{figure}{Figure~(#2#1#3)}

\begin{document}

\section{Test}\label{a}
Section~\ref{a}. Equation~\ref{b}. \Cref{c}? or \cref{c}?
\begin{equation}\label{b}
a=b
\end{equation}
\begin{figure}
\centering
A
\caption{test figure}
\label{c}
\end{figure}

\end{document}

在此处输入图片描述

答案2

\p@equation可用于更改 的方程引用\ref。通常\p@<counter>用于为计数器的引用添加前缀<counter>,并且不带参数。但通过附加\expandafter,计数器值可以作为简单参数捕获:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\renewcommand*{\p@equation}{%
  \expandafter\@p@equation
}
\newcommand*{\@p@equation}[1]{%
  \textup{\tagform@{#1}}% see definition of `\eqref`
}
\makeatother

\begin{document}
\section{Hello}\label{sec:hello}
\begin{equation}
  \label{eq:einstein}
  E=mc^2
\end{equation}
References: Section \ref{sec:hello} and equation \ref{eq:einstein}.
\end{document}

结果

缺点:引用\ref不应在里面使用\tag,否则结果是重复的括号。

答案3

\ref您可以选择性地定义使用包的格式fncylab,这相当于 Heiko 的答案(但比 Heiko 的答案更打包)。例如:

\usepackage{fncylab}
\labelformat{equation}{(#1)}
\section{A section}\label{s:section}
\[ \label{eq:eqn} ... \]
\ref{s:section}\ref{eq:eqn}

将在括号中打印公式编号,但正常打印章节编号。我有一个要定义的常规序言\labelformat{section}{Section~#1}等等。

相关内容