引用符付きの\nameref

引用符付きの\nameref

\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}}%
    }%
  }%
}

関連情報