Festlegung der Definition vonheadings

Festlegung der Definition vonheadings

Mit einem minimalen Dokument wie

\documentclass{scrartcl}
\pagestyle{headings}
\begin{document}
\section{Introduction}
\end{document}

Ich erhalte die folgende Fehlermeldung mitlatex filename.tex

! Zusätzliches \else.
\@sect ...sname }{\scr@ds@tocentry }\fi \fi \else
                                              \def \@svsechd {#6{\hskip …
l.49 \section{Einleitung}

Kann jemand helfen, das Problem herauszufinden?

  • Wenn ich die Dokumentklasse auf Artikel ändere, funktioniert es einwandfrei
  • Wenn ich die \pagestyle{headings} entferne, funktioniert es einwandfrei
  • Wenn ich die Überschriften auf leer ändere, funktioniert es einwandfrei

Versionen:

pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013/Arch Linux)
kpathsea version 6.1.1
...
Compiled with libpng 1.6.10; using libpng 1.6.10
Compiled with zlib 1.2.8; using zlib 1.2.8
Compiled with poppler version 0.24.5

und KOMA-Script ( scrartcl.cls)

%%% From File: $Id: scrkernel-version.dtx 1560 2013-12-19 07:13:30Z mjk $

Antwort1

Nur als Ergänzung zuGonzalos Antwort. Sie sind auf einen bekannten Fehler von KOMA-Script Version 3.12 gestoßen.

Vgl.Bekannte Probleme und Änderungen in KOMA-Script 3.12:

scrartcl:
[…]
Wenn man den Seitenstil headings aktiviert, wird man mit Fehlern wegen eines \fi zu viel
bombadiert.
Workaround: Paket scrlayer-scrpage (oder notfalls scrpage2) laden und Seitenstil
scrheadings verwenden.
Hinweis: Der Fehler ist in der experimentellen Release behoben.

Das heißt, der von dir beobachtete Fehler ist in einer experimentellen Version behoben, die du von einer Seite herunterladen kannst, die hinter den Worten „experimentellen Release“ verlinkt ist, aber wieder auf Deutsch ist. Glücklicherweise hat Markus Kohm für diese Seite eine englische Entsprechung erstellt:Nutzung der aktuellsten KOMA-Script-Versionen mit TeX Live, MacTeX oder MiKTeX.

Wenn Sie diese experimentelle Version nicht verwenden, sollten Sie das (KOMA-Script)-Paket laden scrlayer-scrpageund den Seitenstil verwenden scrheadings, ähnlich wie von Gonzalo vorgeschlagen.(Meiner Meinung nach besteht ab Version 3.12 keine Notwendigkeit mehr, das Paket zu verwenden scrpage2, da scrlayer-scrpagees abwärtskompatibel ist, solange Sie noch nie interne Befehle von verwendet haben scrpage2.)

Antwort2

AlsSperavirs Antwortweist darauf hin, dass dies ein Fehler ist; der headingsSeitenstilsollenmit KOMA-Klassen arbeiten. Ein möglicher Workaround ist, das scrpage2Paket zu laden und den useheadingsStil zu ändern:

\documentclass{scrartcl}
\usepackage{scrpage2}
\pagestyle{useheadings}
\begin{document}
\section{Introduction}
\end{document}

Auf Seite 206 des scrguienDokuments heißt es dazu:

Das Paket scrpage2ist in erster Linie für die Verwendung der bereitgestellten Stile oder für die Definition eigener Stile gedacht. Es kann jedoch erforderlich sein, auch auf einen von der Dokumentklasse bereitgestellten Stil zurückzuwechseln. Dies scheint mit geschehen zu müssen \pagestyle{headings}, hat jedoch den Nachteil, dass die Befehle \automarkund \manualmark, die in Kürze erläutert werden, nicht wie erwartet funktionieren. Aus diesem Grund sollte man mit v\pagestyle{useheadings}` auf die ursprünglichen Stile zurückwechseln, wodurch sowohl für manuelle als auch für automatische Laufüberschriften automatisch die richtigen Seitenstile ausgewählt werden.

Antwort3

Die Verwendung von headingserzeugt den folgenden Fehler:

! Extra \else.
\@sect ...sname }{\scr@ds@tocentry }\fi \fi \else 
                                                  \def \@svsechd {#6{\hskip ...
l.6 \section{Introduction}

? 

Wie in Speravirs Antwort erklärt, handelt es sich hierbei um einen Fehler in der aktuellen (nicht experimentellen) Version der Klasse. Wenn Sie lieber den Standard headingsals den Workaround in Gonzalo Medinas Antwort verwenden möchten, können Sie den folgenden Fix ausprobieren.

Festlegung der Definition vonheadings

Die folgende Neudefinition scheint das Problem zu lösen. Die markierte Zeile enthält im Original MODIFIEDeinen Zusatz , der bei anderen Verwendungen von nicht vorhanden ist . Der Fix ändert diese Zeile, um den Zusatz bei anderen Verwendungen des Makros zu entfernen.\fi\MakeMarkcase\fi

\documentclass{scrartcl}
\usepackage{kantlipsum}
\makeatletter
  \renewcommand*{\ps@headings}{\let\@mkboth\markboth
    \renewcommand*{\@evenhead}{%
      \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
          \hb@xt@ \@tempdima{{\headfont\strut\leftmark\hfil}}%
          \if@hsl \vskip 1.5\p@ \hrule \fi}}}%
    \renewcommand*{\@oddhead}{%
      \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
          \hb@xt@ \@tempdima{{\headfont\hfil\strut\rightmark
              \if@twoside\else\hfil\fi}}%
          \if@hsl \vskip 1.5\p@ \hrule \fi}}\hss}%
    \renewcommand*{\@evenfoot}{%
      \set@tempdima@hw\hss\hb@xt@ \@tempdima{\vbox{%
          \if@fsl \hrule \vskip 3\p@ \fi
          \hb@xt@ \@tempdima{{\pagemark\hfil}}}}}%
    \renewcommand*{\@oddfoot}{%
      \set@tempdima@hw\hb@xt@ \@tempdima{\vbox{%
          \if@fsl \hrule \vskip 3\p@ \fi
          \hb@xt@ \@tempdima{{\hfil\pagemark
              \if@twoside\else\hfil\fi}}}}\hss}%
    \renewcommand*{\sectionmark}[1]{%
      \if@twoside\expandafter\markboth\else\expandafter\markright\fi
      {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat}{}##1}}{}}% MODIFIED
    \renewcommand*{\subsectionmark}[1]{%
      \if@twoside
        \markright{%
          \MakeMarkcase{\ifnumbered{subsection}{\subsectionmarkformat}{}##1}%
        }%
      \fi
    }%
  }%
\makeatother
\pagestyle{headings}

\begin{document}
\section{Introduction}
\kant[1]
\subsection{Subsection}
\kant[2]
\section{Another Section}
\kant[3]
\section{Yet Another Section}
\kant[4]
\subsection{Another Subsection}
\kant[5]
\end{document}

Das Ergebnis

Überschriften

Antwort4

Wie bereits erklärt, handelt es sich hierbei um einen Fehler, KOMA 3.12der den Entwicklern seit Ende Dezember 2013 bekannt ist und in einer experimentellen Version behoben wurde. Da ich den Fehler Anfang Januar selbst entdeckte, musste ich ihn für meine eigenen Quellen patchen und hier ist mein Patch:

\pagestyle{headings}% must be before the patch
\makeatletter
\def\buggysectionmark #1{% KOMA 3.12 as released to CTAN December 2013
    \if@twoside\expandafter\markboth\else\expandafter\markright\fi
    {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat\fi}{}#1}}{}}
\ifx\buggysectionmark\sectionmark
\def\sectionmark #1{%
    \if@twoside\expandafter\markboth\else\expandafter\markright\fi
    {\MakeMarkcase{\ifnumbered{section}{\sectionmarkformat}{}#1}}{}}
\fi
\makeatother

Die Idee dahinter ist, dass der Patch nichts mehr bewirkt, sobald Ihre Installation über die nächste Version verfügt KOMAscript, in der dieses Problem behoben wurde (weil der \ifxTest erkennt, dass es \sectionmarksich nicht mehr um die fehlerhafte Version handelt) und der Patch nichts mehr bewirkt, sodass Sie nicht erneut an Ihren Legacy-Quellen herumfummeln müssen.

verwandte Informationen