따옴표가 있는 \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\DeclareRobustCommandby 패키지 namerefhyperref를 통해 정의됩니다 \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}}%
    }%
  }%
}

관련 정보