Paket-Hyperref steht im Konflikt mit dem Zähler im Abschnittstitel

Paket-Hyperref steht im Konflikt mit dem Zähler im Abschnittstitel

Das folgende Minimaldokument

\documentclass{article}

\usepackage{hyperref}

\newcounter{projno}
\newcommand{\proj}{%
\stepcounter{projno}%
\theprojno}


\begin{document}

\section{Project \protect\proj }

\end{document}

erzeugt den Fehler

! Missing \endcsname inserted.
<to be read again> 
                   \csname\endcsname
l.14 \section{Project \protect\proj }

Der Fehler verschwindet, wenn ich ihn auskommentiere \usepackage{hyper ref}. Sieht jemand einen Ausweg aus diesem Dilemma?

Antwort1

Das Makro \projverursacht Probleme in den Lesezeichen. Der Großteil der Magenmaschinerie von TeX funktioniert hier nicht. Erweiterbare Befehle funktionieren in Lesezeichen einwandfrei, Zuweisungen (Zählerinkremente, ...) jedoch nicht. Das Paket hyperrefbietet \texorpdfstringoder \pdfstringdefDisableCommandszur Handhabung von Befehlen, die in Lesezeichen neu definiert oder herausgefiltert werden sollten:

\section{Project\texorpdfstring{\protect\proj}{\theprojno}}

Oder \projSie geben den hyperrefLesezeichencode bekannt:

...
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\proj\theprojno}
...
\begin{document}
...
\section{Project\protect\proj}

Hinweise:

  • Wenn Sie \projmit definiert haben \DeclareRobustCommand, ist ein explizites \protect, bei Verwendung von nicht erforderlich proj:

    \newcommand*{\proj}{}% check, whether \proj is undefined
    \DeclareRobustCommand*{\proj}{\stepcounter{projno}}
    
  • Wichtiger Hinweis von egreg insein Kommentar: \stepcountersollte besser genutzt werdenVor \sectionAndernfalls wird der Zähler auch durch die Einträge im Inhaltsverzeichnis und in den Überschriften hochgezählt (abhängig vom Seitenstil).

verwandte Informationen