使用 fancyhdr 定义多个页面样式(也可以定义多个普通样式)

使用 fancyhdr 定义多个页面样式(也可以定义多个普通样式)

是否可以使用 fancyhdr 包为 toc 和文档定义多种页面样式,并以不同的模式设置 toc 的普通页面和文档的普通页面。

这是我的代码:

\documentclass[a4paper,12pt,oneside]{report}

\usepackage[utf8]{inputenc}

\usepackage{fancyhdr}
\usepackage{blindtext}
\usepackage{lastpage}

\fancypagestyle{document}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
}

\fancypagestyle{plain}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
}

\fancypagestyle{tocstyle}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage}
}

\begin{document}\sloppy
    
    \pagenumbering{Roman}
    \pagestyle{tocstyle}
    \tableofcontents
    \listoffigures
    \listoftables  
    \clearpage 
    
    \pagenumbering{arabic}
    \pagestyle{document}
    
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    
\end{document}

文档的格式很好,但目录格式不好,因为目录中的普通页面会受到文档页面相同排列的影响。

有没有办法为文档的不同部分定义完整的页面样式,或抑制“普通”页面的存在?

答案1

ToC、LoF、LoT 的第一页始终为 页面样式plain,与所有其他第一章页面一样。这导致所选的页面样式tocstyle对这些第一页无效。

plain更新:添加了其他页面样式内的定义解决方案。

  1. 一个解决方案是将其重新定义plaintocstyle与 ToC 等之前的样式相同,然后将其重新定义为plain文档之后的所需样式,\clearpage这些样式将这些 ToC 页面与主文档分开。一个全面的方法是将\fancypagestyle{plain}...其他\fancypagestyle定义包含在内,从而将它们与这些页面样式捆绑在一起。请参阅解决方案 1
  2. \thispagestyle{tocstyle}另一种方法是使用以下命令在 ToC、LoF 和 LoT 中注入附加项
\addtocontents{toc}{\protect\thispagestyle{tocstyle}}

这需要额外运行 LaTeX 才能实现。请参阅解决方案 2

以下是这些想法的完整解决方案。为了演示目的,我在左页脚中添加了页面样式的名称,以便您可以清楚地看到它的来源。

解决方案 1:

\documentclass[a4paper,12pt,oneside]{report}

\usepackage[utf8]{inputenc}

\usepackage{fancyhdr}
\usepackage{blindtext}
\usepackage{lastpage}

\fancypagestyle{document}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
  \fancyfoot[L]{document}
  \fancypagestyle{plain}{%
    \fancyhf{}
    \renewcommand{\headrulewidth}{0pt}
    \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
    \fancyfoot[L]{plain-document}
  }
}

\fancypagestyle{tocstyle}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage}
  \fancyfoot[L]{tocstyle}
  % Make plain pagestyle the same as tocstyle
  % The optional argument needs fancyhdr version 4.0 or later.
  % Otherwise you have to copy all the definitions from tocstyle.
  \fancypagestyle{plain}[tocstyle]{\fancyfoot[L]{plain-tocstyle}} 
}

\begin{document}\sloppy
    \pagenumbering{Roman}
    \pagestyle{tocstyle}
    \tableofcontents
    \listoffigures
    \listoftables  
    \clearpage 
    
    \pagenumbering{arabic}
    \pagestyle{document}
    
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    
\end{document}

解决方案 2:

\documentclass[a4paper,12pt,oneside]{report}

\usepackage[utf8]{inputenc}

\usepackage{fancyhdr}
\usepackage{blindtext}
\usepackage{lastpage}

\fancypagestyle{document}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
  \fancyfoot[L]{document}
}

\fancypagestyle{plain}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage\ |\ \pageref{LastPage}}
  \fancyfoot[L]{plain}
}

\fancypagestyle{tocstyle}{%
  \fancyhf{}
  \renewcommand{\headrulewidth}{0pt}
  \fancyfoot[R]{\thepage}
  \fancyfoot[L]{tocstyle}
}

\begin{document}\sloppy
    \pagenumbering{Roman}
    \pagestyle{tocstyle}
    \addtocontents{toc}{\protect\thispagestyle{tocstyle}}
    \addtocontents{lot}{\protect\thispagestyle{tocstyle}}
    \addtocontents{lof}{\protect\thispagestyle{tocstyle}}
    \tableofcontents
    \listoffigures
    \listoftables  
    \clearpage 
    
    \pagenumbering{arabic}
    \pagestyle{document}
    
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    \Blinddocument
    
\end{document}

在此处输入图片描述

相关内容