
\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
by 패키지 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}}%
}%
}%
}