是否可以使用 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
更新:添加了其他页面样式内的定义解决方案。
- 一个解决方案是将其重新定义
plain
为tocstyle
与 ToC 等之前的样式相同,然后将其重新定义为plain
文档之后的所需样式,\clearpage
这些样式将这些 ToC 页面与主文档分开。一个全面的方法是将\fancypagestyle{plain}...
其他\fancypagestyle
定义包含在内,从而将它们与这些页面样式捆绑在一起。请参阅解决方案 1。 \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}