在“section”中使用 csquotes 与“hyperref”和双字符时出错

在“section”中使用 csquotes 与“hyperref”和双字符时出错

我发现了一个非常奇怪的行为,我只能猜测为什么会发生这种情况。如果我“引用”(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是准备书签时使用的定义。

相关内容