agregar () alrededor de \ref{}

agregar () alrededor de \ref{}

¿Cómo puedo agregar [y ]rodear \ref{myref}para obtener algo como esto?

[1.1] 

Esto no 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}

Respuesta: comenta \usepackage[colorlinks=true,allcolors=blue]{hyperref}y funciona. Pero necesito hyperref, no quiero usar amsmath, y prefiero no agregar paquetes ya que tienden a chocar con otras cosas más adelante, como usar platex, etc. ¿Qué puedo hacer?

Respuesta1

Dado que hyperrefredefine las cosas después de \begin{document}, puede diferirlo renewcommandpara que sea \AfterBeginDocumentcomo:

ingrese la descripción de la imagen aquí

Notas:

  • Esto no funcionará con la variante destacada \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}

Respuesta2

Estoy actualizando mi comentario a una respuesta, ya que parece serlo.

En lugar de usar \eqref, pon esto en tu preámbulo:

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

de modo que \refaplicado a la etiqueta de una ecuación tiene el estilo \eqrefy normalmente de otro modo, y cuando hyperrefse usa, el enlace abarca los paréntesis.

Tenga en cuenta que, aunque puede utilizar esta técnica para otros tipos de etiquetas, existe un error amsthmque, si la utiliza \newtheoremen el formulario \newtheorem{<new theorem>}[<old theorem>]{...}, <new theorem>tendráliteralmenteel mismo contador que <old theorem>, y fncylab(y de hecho, cleverref) los etiquetarán de manera idéntica. La solución es que, después de definir los teoremas, también debes duplicar sus contadores:

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

Esto funcionará como se esperaba. Hago esto con muchos contadores en todo lo que escribo.

información relacionada