Beim zweiten LaTeX-Lauf des Dokuments
\documentclass{scrbook}
\usepackage[dvips,naturalnames=true]{hyperref}! Missing \endcsname inserted.
\begin{document}
\chapter{Kapitel}
Text
\section{Abschnitt}
Text
\end{document}
tritt ein Fehler auf. In der.out-Datei taucht der Befehl \relax auf.
Ich denke, der Fehler liegt im section-Befehl der Komascript-Klasse.
Bei mir tritt bereits im ersten Lauf ein Fehler auf
nämlich:
Du hast also nicht nur die Formatierungshinweise, auf die Du bereits beim Abschicken Deines Beitrags hingewiesen wurdest, komplett missachtet, sondern auch ein ungetestetes Beispiel gepostet. Nächstes Mal also bitte etwas mehr Sorgfalt!
Ansonsten ist das kein Fehler von KOMA-Script, sondern ggf. ein Problem von hyperref, denn die out-Datei wird nicht von KOMA-Script, sondern von hyperref geschrieben. Das Problem löst sich in Wohlgefallen auf, wen man auf die Option
naturalnames=true
verzichtet. Wenn Du das nicht kannst, wende Dich an den Maintainer von hyperref.Fehler im Zusammenspiel mit hyperref
Zeile 2 meines Beispiels sollte wie folgt lauten
\usepackage[dvips,naturalnames=true]{hyperref}
Der Fehler liegt bei Komascript:
Der Fehler tritt erst beim zweiten Durchlauf auf. Hier die Antwort von
Heiko Oberdiek:
Das liegt an KOMA-Script, getestet mit aktueller TL2008:
scrbook.cls 2009/04/03 v3.03a KOMA-Script document class (book)
\thesection expandiert zu etwas, was \relax enthält und das
als Ankername hyperrefs Lesezeichenbaumaufbau stört.
Ausgabe von "\tracingmacros=1":
\thesection ->\ifnum \scr@compatibility >\@nameuse {scr@v@2.97d}\relax
\if@mainmatter \thechapter .\fi \else \thechapter .\fi \@arabic \c@section
Ein Leerzeichen anstelle des \relax und das Problem wäre behoben.
Oder die \scr@v@X.Yz-Befehle werden gleich als \chardef o.ä. definiert.
In hyperref kann ich da nicht viel machen, schließlich kann ich \relax
nicht als leer umdefinieren (Nach \numexpr wird das originale \relax
manchmal zwingend benötigt.)
\relax
In LaTeX2e ist nirgendwo dokumentiert, dass in
\the
Counter kein\relax
vorkommen darf. Damit ist KOMA-Script korrekt.Übrigens kann ich auch in er hyperref-Doku keinen Hinweis finden, dass es Probleme mit
\relax
in\the
Counter hat. Nur weil es eventuell nicht ganz trivial ist, das Schreiben des\relax
in die out-Datei zu verhindern, heißt das nicht, dass hyperref sich hier korrekt verhält und schon gar nicht, dass andere Klassen und Pakete fehlerhaft sind, weil hyperref dieses Problem hat.Die Anweisung
\relax
ist übrigens eine in TeX häufig verwendete Anweisung. Allein im LaTeX-Kern, latex.ltx, finde ich 336 Zeilen, in denen min. ein\relax
steht. In hyperref.sty selbst sind es immerhin noch 187, in scrbook nur 118. Sie dient u. a. dazu dem Parser zu erklären, dass das Einlesen einer Zahl zu beenden ist.Bevor ich die
\relax
drin hatte, hatte ich übrigens mal ein Leerzeichen vorgesehen. Leerzeichen vergisst man aber leicht und machen den Code deutlich schwerer wartbar als leicht zu sehende\relax
. Nachdem genau ein solches verlorenes Leerzeichen zu einem Bug führte, habe ich einheitlich die\relax
bei den Vergleichen eingefügt.