我发现了一个非常奇怪的行为,我只能猜测为什么会发生这种情况。如果我“引用”(csquotes)以节标题中两个相同字符开头的内容并使用 hyperref,我会收到错误:
! Argument of \csq@pdf@quote@ii has an extra }.
<inserted text>
\par
l.19 \section{Foo Bar \enquote{AA}}
我不知道这是否与扩展或字距调整有关,但我觉得这很奇怪。我能做些什么来解决这个问题?当“双”字符不在开头时,一切都很好。
梅威瑟:
\documentclass{article}
\usepackage{csquotes}
%Hyperref
\usepackage{hyperref}
\begin{document}
\section{Foo Bar \enquote{AA}}
\end{document}
编辑:修正错别字
答案1
这是中的错误csquotes
:如果我将两个定义修改为\if*#1
而不是\if#1*
,则运行成功。
测试\if#1*
显然是错误的:\tracingmacros=1
我得到
\enquote #1->\if #1*\relax \expandafter \@firstoftwo \else \expandafter \@secon
doftwo \fi {\csq@pdf@quote@ii } {\csq@pdf@quote@i {#1}}
#1<-AA
但显然宏应该检查是否存在前导*
。
\documentclass{article}
\usepackage{csquotes}
%Hyperref
\usepackage{hyperref}
% fix the bugs
\makeatletter
\long\def\csq@pdf@quote#1{%
\if*#1\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\csq@pdf@quote@ii}
{\csq@pdf@quote@i{#1}}}
\long\def\csq@pdf@fquote#1{%
\if*#1\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\expandafter\csq@pdf@quote@ii\@gobble}
{\csq@pdf@quote@i}}
\makeatother
\begin{document}
\section{Foo Bar \enquote{AA}}
\end{document}
注意:跟踪消息中显示的定义\enquote
是准备书签时使用的定义。