Skip to content

Bug when enquote starts with duplicated character in section with Hyperref. #70

@LustigePerson

Description

@LustigePerson

I found a really weird behavior:
If I "enquote" (csquotes) something that starts with two identical characters in a section header AND use hyperref I get the error:

! Argument of \csq@pdf@quote@ii has an extra }.
<inserted text> 
                \par 
l.19 \section{Foo Bar \enquote{AA}}

When the "double" character is not at the start everything is fine.

MWE:

\documentclass{article}

\usepackage{csquotes}

%Hyperref
\usepackage{hyperref}
 
 
\begin{document}
\section{Foo Bar \enquote{AA}}
\end{document}

See here for discussion.

There is also an explanation from another user.
I quote his comment here:
It's a bug in csquotes: if I modify two definitions to have \if*#1 instead of \if#1*, the run is successful.

The \if#1* test is obviously wrong: with \tracingmacros=1 I get

\enquote #1->\if #1*\relax \expandafter \@firstoftwo \else \expandafter \@secon
doftwo \fi {\csq@pdf@quote@ii } {\csq@pdf@quote@i {#1}}
#1<-AA

but clearly the macro is supposed to check if there's a leading *.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions