
Я хотел бы переопределить \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}
Обратите внимание на несоответствия, которые вносит переопределение: вы ссылаетесь на section (1)
, но в вашем документе есть section 1
; аналогичная проблема возникнет для плавающих элементов и других объектов в вашем документе.
Приложение
Возможно, если вы заинтересованы в переопределении формата перекрестных ссылок для определенного типа объекта,cleveref
package мог бы быть лучшим вариантом; небольшой пример, в котором я изменил форматирование для перекрестных ссылок на рисунки, оставив все остальные перекрестные ссылки без изменений:
\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 <counter>
и не принимает аргумент. Но с дополнительным \expandafter
значение counter можно перехватить как простой аргумент:
\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
пакета, что эквивалентно (но более упаковано, чем) ответу Хайко. Например:
\usepackage{fncylab}
\labelformat{equation}{(#1)}
\section{A section}\label{s:section}
\[ \label{eq:eqn} ... \]
\ref{s:section}\ref{eq:eqn}
напечатает номер уравнения в скобках, но номер раздела как обычно. У меня есть постоянная преамбула для определения \labelformat{section}{Section~#1}
и так далее.