정의 수정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{소개}

문제가 있는 위치를 정확히 찾아내는 데 도움을 줄 수 있는 사람이 있습니까?

  • 문서 클래스를 기사로 변경하면 제대로 작동합니다.
  • \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은 이 페이지를 위해 영어 동반자를 만들었습니다.TeX Live, MacTeX 또는 MiKTeX와 함께 최신 KOMA 스크립트 사용.

이 실험적 버전을 사용하지 않고 (KOMA-Script) 패키지를 로드 하고 Gonzalo가 제안한 것과 유사한 scrlayer-scrpage페이지 스타일을 사용해야 합니다.scrheadings(내 눈에는 버전 3.12에서는 더 이상 package 를 사용할 필요가 없습니다 . 내부 명령을 사용한 적이 없는 한 하위 호환되기 scrpage2때문입니다 .)scrlayer-scrpagescrpage2

답변2

처럼Speravir의 답변지적합니다. 이것은 버그입니다. 페이지 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의 답변에서 설명했듯이 이것은 현재 (비실험적) 버전의 클래스에 있는 버그입니다. headingsGonzalo Medina의 답변에 있는 해결 방법보다 표준을 사용하려는 경우 다음 수정 사항을 시도해 볼 수 있습니다.

정의 수정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) 패치는 사용자가 수행하지 않는 작업도 수행하지 않습니다. 레거시 소스를 다시 다루려고 합니다.

관련 정보