Corrigindo a definição deheadings

Corrigindo a definição deheadings

Com um documento mínimo como

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

Estou recebendo o seguinte erro comlatex filename.tex

! Extra \outro.
\@sect ...sname }{\scr@ds@tocentry }\fi \fi \else
                                              \def \@svsechd {#6{\hskip ...
1.49 \seção{Introdução}

Alguém pode ajudar a identificar onde pode estar o problema?

  • Se eu alterar a classe do documento para artigo, tudo funcionará bem
  • Se eu remover o \pagestyle{títulos}, tudo funcionará bem
  • Se eu mudar os títulos para vazios, funciona bem

Versões:

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

e KOMA-Script ( scrartcl.cls)

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

Responder1

Assim como além deA resposta de Gonçalo. Você encontrou um bug conhecido do KOMA-Script versão 3.12.

Cf. (infelizmente, apenas em alemão)Solução de problemas e soluções no 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.

Isso significa que o erro que você observou foi removido em uma versão experimental que você pode baixar de uma página, cujo link está atrás das palavras “experimentellen Release”, mas está novamente em alemão. Felizmente Markus Kohm criou para esta página um companheiro em inglês:Usando o KOMA-Script mais atual com TeX Live, MacTeX ou MiKTeX.

Sem usar esta versão experimental você deve carregar o pacote (KOMA-Script) scrlayer-scrpagee usar o pagestyle scrheadings, semelhante ao sugerido por Gonzalo.(A meu ver, com a versão 3.12 não há mais necessidade de usar package scrpage2, porque scrlayer-scrpageé compatível com versões anteriores, desde que você nunca tenha usado comandos internos de scrpage2.)

Responder2

ComoA resposta do Speraviraponta, isso é um bug; o headingsestilo da páginadevetrabalhar com aulas KOMA. Uma possível solução é carregar o scrpage2pacote e mudar para useheadingso estilo:

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

A página 206 do scrguiendocumento menciona isso:

O pacote scrpage2destina-se principalmente ao uso dos estilos fornecidos ou à definição de estilos próprios. Contudo, pode ser necessário voltar também para um estilo fornecido pela classe de documento. Pode parecer que isso deveria ser feito com \pagestyle{headings}, mas tem a desvantagem de que os comandos \automarke \manualmark, que serão discutidos em breve, não funcionam como esperado. Por esta razão, deve-se voltar aos estilos originais usando v\pagestyle{useheadings}`, que escolhe automaticamente os estilos de página corretos para títulos de execução manual e automática.

Responder3

O uso de headingsproduz o seguinte erro:

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

? 

Conforme explicado na resposta do Speravir, este é um bug na versão atual (não experimental) da classe. Se você preferir usar o padrão headingsem vez da solução alternativa na resposta de Gonzalo Medina, tente a seguinte correção.

Corrigindo a definição deheadings

A seguinte redefinição parece resolver o problema. A linha marcada MODIFIEDcontém um extra \fino original que não está presente em outros usos de \MakeMarkcase. A correção modifica essa linha para remover a \filinha com outros usos da 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}

O resultado

títulos

Responder4

Como já foi explicado, este é um bug KOMA 3.12conhecido pelos desenvolvedores desde o final de dezembro de 2013 e corrigido em uma versão experimental. Como encontrei o bug no início de janeiro, tive que corrigi-lo para minhas próprias fontes e aqui está meu 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

A ideia é que assim que sua instalação tiver a próxima versão KOMAscriptonde esse problema terá sido corrigido, o patch não fará nada (porque o \ifxteste detectará que \sectionmarknão é mais o bugado) e o patch não fará nada que você não tenha para mexer novamente com suas fontes legadas.

informação relacionada