fancyhdr が間違ったセクション タイトルを印刷する問題

fancyhdr が間違ったセクション タイトルを印刷する問題

fancyhdrパッケージとの組み合わせで問題が発生していますappendix。この問題は、私がこれまで観察した限りでは、1 ページのドキュメントをコンパイルするときにのみ発生します。twosideモードではすべてが正しくコンパイルされるようです。

MWE を見るとわかるように、メイン セクションの見出しは各ページにあります。参考文献ページでは、タイトルもヘッダーにあります。ただし、添付ファイルには独自のタイトルがありますが、ドキュメントの次のページでもタイトルはそのまま残ります。

モードではtwosideそうではありません。

fancyhdr私のコードにバグがあるのでしょうか、それともまたはパッケージのバグでしょうかappendix?

どのような助けでも大変感謝いたします。


ムウェ

\documentclass[11pt]{article}
% \documentclass[11pt, twoside]{article}

\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage[titletoc, title, header]{appendix}
\usepackage{biblatex}
\usepackage{lipsum}

\geometry{%
    a4paper,%
    top = 3cm,%
    bottom = 3.5cm,%
    inner = 2.5cm,%
    outer = 2.5cm,%
    nomarginpar,%
    showframe = false%
}

\fancypagestyle{general}{%
    \fancyhf{}                  % Clean fields
    \renewcommand{\headrulewidth}{0.4pt}
    \renewcommand{\footrulewidth}{0.4pt}
    \fancyhead[R]{\itshape\nouppercase{\leftmark}}
    \fancyfoot[R]{\thepage}
}

\let\printbibliographyCopy\printbibliography
\renewcommand{\printbibliography}{%
    \cleardoublepage%
    \addcontentsline{toc}{section}{\refname}%
    \pagenumbering{Roman}%
    \printbibliographyCopy%
    \cleardoublepage%
}

\AtBeginEnvironment{appendices}{%
    \let\oldSection\section%
    \renewcommand{\section}[1]{%
        \cleardoublepage%
        \oldSection{#1}%
    }%
}

\title{\texttt{fancyhdr} issue}
\author{Sam}
\date{}

\bibliography{refs}

\begin{document}
    \thispagestyle{general}%
    \pagestyle{general}%

    \maketitle

    \section{\lipsum[1][1]}
    \lipsum[1-3]

    \subsection{\lipsum[1][2]}
    \lipsum[4-6]

    \subsection{\lipsum[1][3]}
    \lipsum[7-10]

    \section{\lipsum[2][1]}
    \lipsum[1-3]

    \subsection{\lipsum[2][2]}
    \lipsum[4-6]

    \subsection{\lipsum[2][3]}
    \lipsum[7-10]

    \section{\lipsum[3][1]}
    \lipsum[1-3]

    \subsection{\lipsum[3][2]}
    \lipsum[4-6]

    \subsection{\lipsum[3][3]}
    \lipsum[7-13]\cite{Nobody06}

    \printbibliography

    \begin{appendices}
        \section{\lipsum[4][1]}
        \lipsum[1-3]

        \section{\lipsum[5][1]}
        \lipsum[1-3]

        \section{\lipsum[6][1]}
        \lipsum[1-3]
    \end{appendices}
\end{document}

スクリーンショット

onesideまたはtwosideモードの通常セクション 通常のセクション


onesideまたはtwosideモードでの参照 参考文献


twosideモードの付録 ツーサイドモードの付録


onesideモードの付録 片面モードでの付録

答え1

同じ効果は、次の簡略化されたMWEでも再現できます。

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\usepackage[titletoc, title, header]{appendix}
\usepackage{lipsum}


\fancypagestyle{general}{%
  \fancyhf{}%
  \renewcommand{\headrulewidth}{0.4pt}%
  \renewcommand{\footrulewidth}{0.4pt}%
  \fancyhead[R]{\itshape\nouppercase{\leftmark}}%
  \fancyfoot[R]{\thepage}%
}
\pagestyle{general}%

\begin{document}
  \section{\lipsum[1][1]}
  \lipsum[1-3]

  \begin{appendices}
    \section{\lipsum[4][1]}
    \lipsum[1-3]
  \end{appendices}
\end{document}

header問題は、に渡されるオプションに特に関係していますappendix。このオプションはマニュアルで次のように説明されています。

ページ ヘッダーの各付録の前に名前 (例: 'Appendix') を追加します。名前は の値によって指定されます\appendixname。これは、章を持つクラスのデフォルトの動作であることに注意してください。

オプションが有効になっている場合、環境\sectionmarkの開始時に次のように再定義されます。appendices

\def\sectionmark##1{%
  \if@twoside
    \markboth{\@formatsecmark@pp{#1}}{}
  \else
    \markright{\@formatsecmark@pp{#1}}{}
  \fi}

twosideとでは定義が異なることに注意してくださいoneside。この定義は における通常の定義と一致していますarticle.cls

がロードされると、 -likeクラスのfancyhdrの定義は、/ の設定に関係なく常に のみを含みます。常に\sectionmarkarticle\markbothtwosideoneside

\def\sectionmark##1{%
  \markboth{\MakeUppercase{%
    \ifnum \c@secnumdepth>\z@
      \thesection\hskip 1em\relax
    \fi
    ##1}}{}

簡単な解決策は、headerのオプションを使用しないことですappendix。明らかに、の特異性を考慮して書かれていないためです。fancyhdr念頭に置いて書かれていないようです。 そうすれば、付録ただし、ヘッダーには含まれません。これを保持したい場合は、ロードappendices時にパッチを適用できます。fancyhdr

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\usepackage{fancyhdr}
\usepackage[titletoc, title, header]{appendix}
\usepackage{lipsum}


\fancypagestyle{general}{%
  \fancyhf{}%
  \renewcommand{\headrulewidth}{0.4pt}%
  \renewcommand{\footrulewidth}{0.4pt}%
  \fancyhead[R]{\itshape\nouppercase{\leftmark}}%
  \fancyfoot[R]{\thepage}%
}
\pagestyle{general}%

% patch appendices for fancyhdr
\makeatletter
\@ifpackageloaded{fancyhdr}
  {\apptocmd\appendices{%
     \if@chapter@pp
     \else
       \if@dohead@pp
         \def\sectionmark#1{\markboth{\@formatsecmark@pp{#1}}{}}%
       \fi
     \fi}}
  {}
\makeatother

\begin{document}
  \section{\lipsum[1][1]}
  \lipsum[1-3]

  \begin{appendices}
    \section{\lipsum[4][1]}
    \lipsum[1-3]
  \end{appendices}
\end{document}

ヘッダーには「付録 A Quisque ullamcorper placerat ipsum」と表示されます。

関連情報