
Eu gostaria de redefinir \ref
como \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}
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, ocleveref
o 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}
Responder2
A macro \p@equation
pode 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}
Desvantagem: A referência \ref
não deve ser usada dentro \tag
, caso contrário o resultado será duplicado entre parênteses.
Responder3
Você pode definir seletivamente o formato de \ref
uso do fncylab
pacote, 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.