定義を修正するheadings

定義を修正するheadings

次のような最小限の文書で

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

以下のエラーが発生しますlatex filename.tex

! 追加の \else。
\@sect ...sname }{\scr@ds@tocentry }\fi \fi \else
                                              \def \@svsechd {#6{\hskip ...
l.49 \section{はじめに}

問題がどこにあるのかを正確に特定するのを手伝ってくれる人はいますか?

  • ドキュメントクラスをarticleに変更すると、正常に動作します
  • \pagestyle{headings}を削除すると、問題なく動作します
  • 見出しを空に変更すると正常に動作します

バージョン:

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

および KOMA スクリプト ( scrartcl.cls)

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

答え1

加えてゴンサロの答えKOMA-Script バージョン 3.12 の既知のバグに遭遇しました。

参照(残念ながらドイツ語のみ)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.

これは、あなたが観察したエラーが、あるページからダウンロードできる実験バージョンで削除されていることを意味します。そのページは「experimentellen Release」という単語の後ろにリンクされていますが、これもドイツ語です。幸いなことに、Markus Kohm がこのページの英語版を作成しました。最新のKOMAスクリプトをTeX Live、MacTeX、MiKTeXで使用する

この実験バージョンを使用しない場合は、Gonzalo が提案したように、(KOMA-Script) パッケージをロードしscrlayer-scrpageてページスタイルを使用する必要があります。scrheadings(私の考えでは、バージョン 3.12 では、 の内部コマンドを使用していない限り、 は下位互換性があるscrpage2ため、パッケージ を使用する必要はもうありません。)scrlayer-scrpagescrpage2

答え2

としてスペラビルの答え指摘するが、これはバグである。headingsページスタイルすべきKOMA クラスで動作します。回避策としてはscrpage2、パッケージをロードしてスタイルを変更することが考えられますuseheadings

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

文書の206ページにはscrguien次のように書かれています。

このパッケージはscrpage2、主に提供されているスタイルの使用や独自のスタイルの定義を目的としています。ただし、ドキュメント クラスによって提供されるスタイルに戻す必要がある場合もあります。これは を使用して行う必要があるように思われますが、これには、後述するコマンドとが期待どおりに機能しないという\pagestyle{headings}欠点があります。このため、v\pagestyle{useheadings}` を使用して元のスタイルに戻す必要があります。これにより、手動および自動のランニング ヘッダーの両方に対して適切なページ スタイルが自動的に選択されます。\automark\manualmark

答え3

を使用すると、headings次のエラーが発生します。

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

? 

Speravir の回答で説明されているように、これはクラスの現在の (非実験的な) バージョンでのバグです。Gonzalo headingsMedina の回答の回避策よりも標準を使用したい場合は、次の修正を試してみてください。

定義を修正するheadings

次の再定義により、問題は解決されるようです。 マークされた行には、元の には含まれていないMODIFIED余分な\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}

結果

見出し

答え4

すでに説明したように、これはKOMA 3.122013 年 12 月下旬から開発者に知られているバグであり、実験的なリリースで修正されています。1 月初旬に私自身もこのバグに遭遇したため、自分のソースにパッチを当てる必要がありました。以下は私のパッチです。

\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

アイデアとしては、インストールにKOMAscriptこの問題が修正された次のリリースがあれば、パッチは何も実行されず (\ifxテストによってバグのないリリースであることが検出されるため\sectionmark)、パッチは何も実行されないため、レガシー ソースを再度いじる必要がなくなります。

関連情報