\nameref con comillas

\nameref con comillas

¿Cómo puedo redefinir el \namerefcomando para que el título al que se hace referencia esté entre comillas?

Esto es lo que he probado:

\documentclass{article} 

\let\oldnameref\nameref
\renewcommand{\nameref}[1]{"`\oldnameref{#1}"'} % Error: \nameref undefined.

\usepackage[pdfborder={0 0 0}]{hyperref}

\begin{document} 

\begin{figure}
\caption{white rectangle}
\label{fig:figure}
\end{figure}

As shown in figure~\ref{fig:figure} \nameref{fig:figure}

\end{document}

Resultado Esperado:

Como se muestra en la figura 1 "rectángulo blanco"

Respuesta1

\namerefse define mediante \DeclareRobustCommandpaquetes namerefy hyperrefen \begin{document}. Por tanto, hay que tener en cuenta muchas cosas:

  • La redefinición de \namerefse puede hacer en\AtBeginDocument despuésEl paquete hyperrefestá cargado.

  • El paquete letltxmacrose encarga del comando interno, definido por \DeclareRobustCommand.

  • La macro \namerefse puede definir como un comando robusto mediante \DeclareRobustCommand.

  • \namerefTambién se debe proporcionar la forma de estrella para una referencia sin enlace.

  • El paquete babelcon el lenguaje apropiado define las abreviaturas "`y "'.

    También csquotesvale la pena echarle un vistazo al paquete.

Ejemplo completo:

\documentclass{article}

\usepackage[ngerman]{babel}% some language for the shorthand
\usepackage{letltxmacro}
\usepackage[hidelinks]{hyperref}

\makeatletter
\shorthandon{"}
\AtBeginDocument{%
  \LetLtxMacro\oldnameref\nameref
  \DeclareRobustCommand*{\nameref}{%
    \@ifstar{\my@nameref*}{\my@nameref{}}%
  }%
  \newcommand*{\my@nameref}[2]{%
    "`\oldnameref#1{#2}"'%
  }%
}
\shorthandoff{"}
\makeatother

\begin{document}

\begin{figure}
\caption{white rectangle}
\label{fig:figure}
\end{figure}

As shown in figure~\ref{fig:figure} \nameref{fig:figure}

Star form: figure~\ref*{fig:figure} \nameref*{fig:figure}

\end{document}

Respuesta2

Preferiría usar un comando diferente y explotar csquotes:

\documentclass{article}

\usepackage[ngerman,english]{babel}% some language for the shorthand

\usepackage[autostyle=true]{csquotes}
\usepackage{xparse}
\usepackage[colorlinks]{hyperref}

\NewDocumentCommand{\qnameref}{sm}{%
  \enquote{%
    \IfBooleanTF{#1}{\nameref*{#2}}{\nameref{#2}}%
  }%
}

\begin{document}

\begin{figure}
\caption{white rectangle}
\label{fig:figure}
\end{figure}

As shown in figure~\ref{fig:figure} \qnameref{fig:figure}

Star form: figure~\ref*{fig:figure} \qnameref*{fig:figure}

\selectlanguage{ngerman}

Abbildung~\ref{fig:figure} \qnameref{fig:figure}

Abbildung~\ref*{fig:figure} \qnameref*{fig:figure}

\end{document}

ingrese la descripción de la imagen aquí

Si solo usa inglés, entonces la carga, babelpor supuesto, no es necesaria. Si realmente desea redefinir \nameref, entonces el código debería convertirse en

\usepackage{letltxmacro} % in addition to the previous packages

\AtBeginDocument{\LetLtxMacro{\oldnameref}{\nameref}%
  \RenewDocumentCommand{\nameref}{sm}{%
    \enquote{%
      \IfBooleanTF{#1}{\oldnameref*{#2}}{\oldnameref{#2}}%
    }%
  }%
}

información relacionada