
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 \proj
verursacht 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 hyperref
bietet \texorpdfstring
oder \pdfstringdefDisableCommands
zur Handhabung von Befehlen, die in Lesezeichen neu definiert oder herausgefiltert werden sollten:
\section{Project\texorpdfstring{\protect\proj}{\theprojno}}
Oder \proj
Sie geben den hyperref
Lesezeichencode bekannt:
...
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\proj\theprojno}
...
\begin{document}
...
\section{Project\protect\proj}
Hinweise:
Wenn Sie
\proj
mit definiert haben\DeclareRobustCommand
, ist ein explizites\protect
, bei Verwendung von nicht erforderlichproj
:\newcommand*{\proj}{}% check, whether \proj is undefined \DeclareRobustCommand*{\proj}{\stepcounter{projno}}
Wichtiger Hinweis von egreg insein Kommentar:
\stepcounter
sollte besser genutzt werdenVor\section
Andernfalls wird der Zähler auch durch die Einträge im Inhaltsverzeichnis und in den Überschriften hochgezählt (abhängig vom Seitenstil).