Corrección de la definición deheadings

Corrección de la definición deheadings

Con un documento mínimo como

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

Recibo el siguiente error conlatex filename.tex

! Más \ más.
\@sect ...nombre }{\scr@ds@tocentry }\fi \fi \else
                                              \def \@svsechd {#6{\hskip ...
l.49 \section{Introducción}

¿Alguien puede ayudarme a identificar dónde podría estar el problema?

  • Si cambio la clase de documento para que sea artículo, funciona bien
  • Si elimino el \pagestyle{headings}, funciona bien
  • Si cambio los títulos a vacíos, funciona bien.

Versiones:

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

y KOMA-Script ( scrartcl.cls)

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

Respuesta1

Así como además dela respuesta de gonzalo. Te has topado con un error conocido de KOMA-Script versión 3.12.

Cfr. (por desgracia sólo en alemán)Bekannte Probleme und Änderungen en 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.

Significa que el error que observó se eliminó en una versión experimental que puede descargar desde una página, que está vinculada detrás de las palabras "experimentellen Release", pero nuevamente está en alemán. Afortunadamente Markus Kohm creó para esta página un complemento en inglés:Usando el KOMA-Script más actual con TeX Live, MacTeX o MiKTeX.

Sin usar esta versión experimental debes cargar el paquete (KOMA-Script) scrlayer-scrpagey usar el estilo de página scrheadings, similar al sugerido por Gonzalo.(En mi opinión, con la versión 3.12 ya no es necesario usar el paquete scrpage2porque scrlayer-scrpagees compatible con versiones anteriores, siempre y cuando nunca hayas usado comandos internos de scrpage2).

Respuesta2

ComoLa respuesta de Speravirseñala que esto es un error; el headingsestilo de la páginadeberíatrabajar con clases KOMA. Una posible solución es cargar el scrpage2paquete y cambiar al useheadingsestilo:

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

La página 206 del scrguiendocumento menciona esto:

El paquete scrpage2está pensado principalmente para el uso de los estilos suministrados o para definir los propios estilos. Sin embargo, puede ser necesario volver también a un estilo proporcionado por la clase de documento. Podría parecer que esto debería hacerse con \pagestyle{headings}, pero tiene la desventaja de que los comandos \automarky \manualmark, que veremos en breve, no funcionan como se esperaba. Por esta razón, uno debe volver a los estilos originales usando v\pagestyle{useheadings}`, que elige automáticamente los estilos de página correctos para los encabezados de ejecución manual y automática.

Respuesta3

El uso de headingsproduce el siguiente error:

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

? 

Como se explica en la respuesta de Speravir, esto es un error en la versión actual (no experimental) de la clase. Si prefiere utilizar el estándar headingsen lugar de la solución alternativa en la respuesta de Gonzalo Medina, puede probar la siguiente solución.

Corrección de la definición deheadings

La siguiente redefinición parece resolver el problema. La línea marcada MODIFIEDcontiene un extra \fien el original que no está presente en otros usos de \MakeMarkcase. La solución modifica esa línea para eliminarla \fien línea con otros usos de la macro.

\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}

El resultado

encabezados

Respuesta4

Como ya se ha explicado, este es un error que KOMA 3.12los desarrolladores conocen desde finales de diciembre de 2013 y se solucionó en una versión experimental. Como me encontré con el error a principios de enero, tuve que parchearlo para mis propias fuentes y aquí está mi parche:

\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

La idea es que una vez que su instalación tenga la próxima versión en KOMAscriptla que se haya solucionado este problema, el parche no hará nada (porque la \ifxprueba detectará que \sectionmarkya no es el que tiene errores) y el parche no hará nada que usted no tenga. para jugar de nuevo con sus fuentes heredadas.

información relacionada