
\nameref
参照されるキャプションを引用符で囲むようにコマンドを再定義するにはどうすればよいですか?
私が試したことは次のとおりです:
\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}
期待される結果:
図1に示すように「白い長方形」
答え1
\nameref
\DeclareRobustCommand
は、パッケージおよびでをnameref
介しhyperref
て定義されます\begin{document}
。したがって、多くのことを考慮する必要があります。
の再定義は
\nameref
、\AtBeginDocument
後パッケージhyperref
がロードされます。パッケージは
letltxmacro
、 によって定義された内部コマンドを処理します\DeclareRobustCommand
。マクロは
\nameref
、 によって堅牢なコマンドとして定義できます\DeclareRobustCommand
。\nameref
リンクのない参照の場合は、の星印形式も提供する必要があります。babel
適切な言語のパッケージは、省略形"`
とを定義します"'
。パッケージも
csquotes
一見の価値があります。
完全な例:
\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}
答え2
別のコマンドを使用して、以下を利用することを好みます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}
英語だけを使うのであれば、もちろんロードはbabel
不要です。本当に を再定義したいのであれば\nameref
、コードは次のようになります。
\usepackage{letltxmacro} % in addition to the previous packages
\AtBeginDocument{\LetLtxMacro{\oldnameref}{\nameref}%
\RenewDocumentCommand{\nameref}{sm}{%
\enquote{%
\IfBooleanTF{#1}{\oldnameref*{#2}}{\oldnameref{#2}}%
}%
}%
}