Как переопределить \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}

введите описание изображения здесь

Обратите внимание на несоответствия, которые вносит переопределение: вы ссылаетесь на section (1), но в вашем документе есть section 1; аналогичная проблема возникнет для плавающих элементов и других объектов в вашем документе.

Приложение

Возможно, если вы заинтересованы в переопределении формата перекрестных ссылок для определенного типа объекта,cleverefpackage мог бы быть лучшим вариантом; небольшой пример, в котором я изменил форматирование для перекрестных ссылок на рисунки, оставив все остальные перекрестные ссылки без изменений:

\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}и так далее.

Связанный контент