Como redefinir \ref como \eqref?

Como redefinir \ref como \eqref?

Eu gostaria de redefinir \refcomo \eqref, mas \renewcommand{\ref}{\eqref}não funciona. Eu acho que isso está acontecendo porque \eqrefé definido internamente como \newcommand{\eqref}{(\ref)}, mas não tenho certeza. Algum conselho?

Responder1

Se vocêrealmentequero fazer isso, em amsmath.sty, \eqrefé definido como

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

então você poderia dizer

\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}

insira a descrição da imagem aqui

Observe as inconsistências que a redefinição introduz; você está fazendo referência cruzada de seção (1), mas seu documento tem seção 1; um problema semelhante aparecerá para carros alegóricos e outros objetos no seu documento.

Adendo

Talvez, se você estiver interessado em redefinir o formato de referência cruzada para um determinado tipo de objeto, ocleverefo pacote poderia ser uma opção melhor; um pequeno exemplo em que mudei a formatação das figuras de referência cruzada, deixando todas as outras referências cruzadas inalteradas:

\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}

insira a descrição da imagem aqui

Responder2

A macro \p@equationpode ser usada para alterar as referências das equações de \ref. Geralmente \p@<counter>é usado para adicionar um prefixo à referência do contador <counter>e não aceita argumento. Mas com um adicional \expandafter, o valor do contador pode ser capturado como um argumento simples:

\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}

Resultado

Desvantagem: A referência \refnão deve ser usada dentro \tag, caso contrário o resultado será duplicado entre parênteses.

Responder3

Você pode definir seletivamente o formato de \refuso do fncylabpacote, que é equivalente (mas mais empacotado que) à resposta de Heiko. Por exemplo:

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

imprimirá o número da equação entre parênteses, mas o número da seção normalmente. Tenho um preâmbulo permanente para definir \labelformat{section}{Section~#1}e assim por diante.

informação relacionada