如何將 \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套餐可能是更好的選擇;一個小例子,其中我更改了交叉引用圖形的格式,而使所有其他 cross.references 保持不變:

\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不應該用在 inside 中\tag,否則結果是重複的括號。

答案3

\ref你可以選擇性地定義使用包的格式fncylab,這相當於(但比)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}等等。

相關內容