josephwright / csquotes

Con­text sen­si­tive quo­ta­tion fa­cil­i­ties
LaTeX Project Public License v1.3c
29 stars 18 forks source link

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

Open LustigePerson opened 6 months ago

LustigePerson commented 6 months ago

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}
josephwright commented 6 months ago

Duplicate of #60