
Wie kann ich den \nameref
Befehl neu definieren, um die referenzierte Überschrift in Anführungszeichen zu setzen?
Folgendes habe ich versucht:
\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}
Erwartetes Ergebnis:
Wie in Abbildung 1 "weißes Rechteck" dargestellt
Antwort1
\nameref
\DeclareRobustCommand
wird über Pakete nameref
und hyperref
in definiert \begin{document}
. Dabei sind viele Dinge zu beachten:
Eine Neudefinition von
\nameref
kann erfolgen in\AtBeginDocument
nachPakethyperref
wird geladen.Das Paket
letltxmacro
kümmert sich um den internen Befehl, definiert durch\DeclareRobustCommand
.Makros
\nameref
können als robuster Befehl definiert werden\DeclareRobustCommand
.\nameref
Für eine Referenz ohne Link sollte auch die Sternform angegeben werden.Paket
babel
mit der entsprechenden Sprache definiert die Abkürzungen"`
und"'
.Auch das Paket
csquotes
ist einen Blick wert.
Vollständiges Beispiel:
\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}
Antwort2
Ich würde lieber einen anderen Befehl verwenden und Folgendes ausnutzen 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}
Wenn Sie nur Englisch verwenden, babel
ist das Laden natürlich unnötig. Wenn Sie wirklich neu definieren möchten \nameref
, sollte der Code lauten:
\usepackage{letltxmacro} % in addition to the previous packages
\AtBeginDocument{\LetLtxMacro{\oldnameref}{\nameref}%
\RenewDocumentCommand{\nameref}{sm}{%
\enquote{%
\IfBooleanTF{#1}{\oldnameref*{#2}}{\oldnameref{#2}}%
}%
}%
}