adicionar () em torno de \ref{}

adicionar () em torno de \ref{}

Como posso adicionar [e ]contornar \ref{myref}para obter algo assim:

[1.1] 

Isso não funciona:

\documentclass{article}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}
\let\oldref\ref
\renewcommand{\ref}[1]{[\oldref{#1}]}
\begin{document}
\section{Section}
Why cannot include square brackets around cross references? \ref{S}
\subsection{Subsection\label{S}}
This is a subsection.
\end{document}

Resposta: comente \usepackage[colorlinks=true,allcolors=blue]{hyperref}e funciona. Mas eu preciso hyperref, não quero usar amsmathe prefiro não adicionar pacotes pois eles tendem a entrar em conflito com outras coisas mais tarde, como usar plastex, etc. O que posso fazer?

Responder1

Como hyperrefredefine as coisas após o \begin{document}, você pode adiar o renewcommandpara ser \AfterBeginDocumentcomo:

insira a descrição da imagem aqui

Notas:

  • Isso não funcionará com a variante marcada com estrela \ref*.

Código:

\documentclass{article}
\usepackage{letltxmacro}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}

\AtBeginDocument{%
    \LetLtxMacro\oldref{\ref}%
    \DeclareRobustCommand{\ref}[2][]{[\oldref#1{#2}]}%
}

\begin{document}
\section{Section}
Why cannot include square brackets around cross references? \ref{S}
\subsection{Subsection\label{S}}
This is a subsection.
\end{document}

Responder2

Estou atualizando meu comentário para uma resposta, pois parece ser uma.

Em vez de usar \eqref, coloque isto no seu preâmbulo:

\usepackage{fncylab}
\labelformat{equation}{(#1)}

de modo que \refaplicado ao rótulo de uma equação tenha o mesmo estilo \eqrefe normalmente de outra forma e, quando hyperrefusado, o link abrange os parênteses.

Observe que embora você possa usar esta técnica para outros tipos de rótulo, há um bug para amsthmque, se você usar \newtheoremno form \newtheorem{<new theorem>}[<old theorem>]{...}, o <new theorem>teráliteralmenteo mesmo contador que <old theorem>, e fncylab(e de fato, cleverref) irá rotulá-los de forma idêntica. A solução alternativa é que, após definir os teoremas, você também deve duplicar seus contadores:

\usepackage{aliascnt}
\newaliascnt{<new theorem>}{<old theorem>}
\labelformat{<new theorem>}{...}

Isso funcionará conforme o esperado. Faço isso com muitos contadores em tudo que escrevo.

informação relacionada