
¿Cómo puedo redefinir el \nameref
comando 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
\nameref
se define mediante \DeclareRobustCommand
paquetes nameref
y hyperref
en \begin{document}
. Por tanto, hay que tener en cuenta muchas cosas:
La redefinición de
\nameref
se puede hacer en\AtBeginDocument
despuésEl paquetehyperref
está cargado.El paquete
letltxmacro
se encarga del comando interno, definido por\DeclareRobustCommand
.La macro
\nameref
se puede definir como un comando robusto mediante\DeclareRobustCommand
.\nameref
También se debe proporcionar la forma de estrella para una referencia sin enlace.El paquete
babel
con el lenguaje apropiado define las abreviaturas"`
y"'
.También
csquotes
vale 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}
Si solo usa inglés, entonces la carga, babel
por 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}}%
}%
}%
}