Problema com o fancyhdr imprimindo o título da seção errado

Problema com o fancyhdr imprimindo o título da seção errado

Estou com um problema em fancyhdrcombinação com o appendixpacote. O problema ocorre - pelo que observei até agora - somente quando compilo um documento de uma página. No twosidemodo tudo parece compilar corretamente.

Como você pode ver no MWE, o título da seção principal está em cada página. Na página da bibliografia, o título também está no cabeçalho. No entanto, permanece nas páginas seguintes do documento, embora os anexos tenham título próprio.

No twosidemodo este não é o caso.

Tenho um bug no meu código ou é um bug no pacote fancyhdrou appendix?

Estou muito grato por qualquer ajuda.


MWE

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

Capturas de tela

Seção normal no modo onesideoutwoside Seção normal


Referências no modo onesideoutwoside Referências


Apêndice em twosidemodo Apêndice no modo dois lados


Apêndice em onesidemodo Apêndice no modo unilateral

Responder1

O mesmo efeito pode ser reproduzido no seguinte MWE simplificado

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

O problema reside especificamente na opção headerpassada para appendix. A opção é descrita no manual como

Adiciona um nome (por exemplo, 'Apêndice') antes de cada apêndice nos cabeçalhos das páginas. O nome é dado pelo valor de \appendixname. Observe que este é o comportamento padrão para classes que possuem capítulos.

Se a opção estiver habilitada, \sectionmarkserá redefinido da seguinte forma no início do appendicesambiente

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

Observe como a definição difere entre twosidee oneside. Esta definição é consistente com as definições usuais em article.cls.

Quando fancyhdré carregado, a definição de classes \sectionmarkin article-like sempre envolve apenas \markbothindependentemente da configuração twoside/ . onesideSempre é

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

A solução simples é não usar a headeropção , já que aparentemente ela não foi escrita pensando appendixnas idiossincrasias . fancyhdrEntão você não verá oApêndiceno cabeçalho, no entanto. Se quiser manter isso, você pode corrigir appendicesquando fancyhdrfor carregado.

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

O cabeçalho mostra "Apêndice A Quisque ullamcorper placerat ipsum."

informação relacionada