\pdfstringdefDisableCommands mit markierten und nicht markierten Befehlen

\pdfstringdefDisableCommands mit markierten und nicht markierten Befehlen

Der folgende MCE:

\documentclass{article}
\usepackage{hyperref}
\ExplSyntaxOn
\NewDocumentCommand { \foo } { s m } {
  \IfBooleanTF {#1}{
    Foo~ #2
  }{
    #2
  }
}
\pdfstringdefDisableCommands{
  \def\foo*#1{Foo~ #1}
  % \def\foo#1{#1}
}
\ExplSyntaxOff
\begin{document}
\section{\foo*{bar}}
% \section{\foo{bar}}
\end{document}

wird wie am Schnürchen kompiliert, außer wenn es \section{\foo{bar}}unkommentiert ist. In diesem Fall lautet die Fehlermeldung:

! Use of \foo doesn't match its definition.
<argument> ...rline {\csname thesection\endcsname }\fi \foo {
                                                  bar}

Gibt es eine Möglichkeit, \pdfstringdefDisableCommandssowohl mit Sternchen markierte als auch nicht mit Sternchen markierte Befehle zu verwenden?

Antwort1

Sie müssen den Befehl mit derselben Signatur wie den ursprünglichen Befehl neu definieren. Da es s msich um eine gültige Signatur für einen erweiterbaren Befehl handelt, können Sie ihn einfach mit folgendem neu definieren \RenewExpandableDocumentCommand:

\documentclass{article}
\usepackage{hyperref}
\ExplSyntaxOn
\NewDocumentCommand { \foo } { s m } {
  \IfBooleanTF {#1}{
    Foo~ #2
  }{
    #2
  }
}
\pdfstringdefDisableCommands{
  \RenewExpandableDocumentCommand \foo { s m }
    { Foo~ #2 }
}
\ExplSyntaxOff
\begin{document}
\section{\foo*{bar}}
\section{\foo{bar}}
\end{document}

Beachten Sie, dass der Befehl in Ihrem Beispiel \foonur erweiterbare Makros enthält und daher in einem Nur-Erweiterungskontext funktionieren kann. Wenn Sie ihn also \NewExpandableDocumentCommanddirekt mithilfe von definieren, müssen Sie for nicht neu definieren hyperref:

\documentclass{article}
\usepackage{hyperref}
\ExplSyntaxOn
\NewExpandableDocumentCommand { \foo } { s m } {
  \IfBooleanTF {#1}{
    Foo~ #2
  }{
    #2
  }
}
\ExplSyntaxOff
\begin{document}
\section{\foo*{bar}}
\section{\foo{bar}}
\end{document}

verwandte Informationen