(完整的源代码如下。)
(注意:不确定我使用的是 LaTeX 还是 TeX。我正在使用 TeXworks 进行编辑,因为 TeXStudio 无法在没有 +20 秒延迟的情况下呈现我输入的内容。)
如果这个问题已经有人问过,我深表歉意。我搜索了 tex.stackexchange.com、互联网和文档fancyhdr
,但找不到解决方案。
简单来说,我曾经设置过页眉,但是尽管重新定义了样式fancyhdr
,章节页面仍然无法正确显示。fancyhdr
plain
我从文档中得到的最佳线索fancyhdr
如下:
标准 LATEX 类中的标记的另一个问题是,更高级别的分段命令(例如 \chapter)使用空的 right 参数调用 \markboth。这意味着在章节(或文章样式中的部分)的第一页上,\rightmark 将为空。如果这是一个问题,您必须手动插入额外的 \markright 命令或重新定义 \chaptermark(\sectionmark)命令以发出具有两个合适参数的 \markboth 命令。
尽管尝试了很多次,但我仍不清楚如何实现这个解决方案。
具体来说,这就是我正在尝试做的事情(粗体项目导致了问题):
- 左页眉:[作者姓名]
- 右标题:[书籍作者姓名]>[“章节”+章节编号]>[小节名称]
- 所有页面(包括章节页面)必须显示相同的页眉,且不包括目录。[解决方案请参见 egreg 的回复。]
- 子节不能自动编号,即它们必须是“* 命令”。
- 尽管是“* 命令”,但子部分必须出现在目录中。
附言[已解决,请参阅下面的解决方案:]有没有办法 (1) 不让子部分自动编号,(2) 包含在目录中,但又不必输入每个子部分标题三次?只是好奇。见下文:
\subsection*{Title of Subsection 3\markright{Title of Subsection 3}{}}
\addcontentsline{toc}{subsection}{Title of Subsection 3}
解决方案 #1(最简单):在序言中写下\setcounter{secnumdepth}{1}
。
解决方案#2:在序言中,通过以下方式创建一个新命令:
\newcommand{\newsubsection}[1]{\subsection*{#1\markright{#1}}%
\addcontentsline{toc}{subsection}{#1}}
为了节省大家的编译时间,左边是章节页面,右边显示章节页面标题应如下所示:
\documentclass{report}
% PACKAGES
\usepackage{fancyhdr}
\usepackage{lastpage} % Allows referencing of the last page to allow footer to read: "Page [Current page] of [Total number of pages]."
\usepackage{comment} % Allows comments of the type: \begin{comment}This text is commented out.\end{comment}
%\usepackage[colorlinks=true]{hyperref} % Turns table of contents and labels into clickable links. Commented out to speed up compiling.
\usepackage[T1]{fontenc} % Allows use of ">" symbol.
\usepackage{lmodern} %Not really sure what this is for.
% FORMATTING
% Header and Footer
\pagestyle{fancy}
% Allows calling chapter and section names in headers and footers.
\renewcommand{\chaptermark}[1]{\markboth{\chaptername\ \thechapter}{}}
\renewcommand{\subsectionmark}[1]{\markright{#1}{}}
% General Header and Footer
\lhead{\DocumentAuthor}
\chead{}
\rhead{\BookAuthor>\leftmark>\rightmark}
\lfoot{}
\cfoot{}
\rfoot{Page \thepage\ of \pageref{LastPage}}
% Chapter Header and Footer
\fancypagestyle{plain}{%
\lhead{\DocumentAuthor}
\chead{}
\rhead{\BookAuthor>\leftmark>\rightmark}
\lfoot{}
\cfoot{}
\rfoot{Page \thepage\ of \pageref{LastPage}}}
% Header/Footer Separation-line Width
\renewcommand\headrulewidth{0.5pt}
\renewcommand\footrulewidth{0.5pt}
\setlength\parindent{0pt} % Remove paragraph indentation.
% NAME AND CLASS SECTION
\newcommand{\DocumentAuthor}{Author Name}
\newcommand{\BookAuthor}{Book Author}
%DOCUMENT
\begin{document}
\tableofcontents{}
\thispagestyle{empty}
\chapter{Title of Chapter 1}
\section{Sample Problems}
\subsection*{Title of Subsection 1\markright{Title of Subsection 1}{}}
\addcontentsline{toc}{subsection}{Title of Subsection 1}
\pagebreak{}
\subsection*{Title of Subsection 2\markright{Title of Subsection 2}{}}
\addcontentsline{toc}{subsection}{Title of Subsection 2}
\subsection*{Title of Subsection 3\markright{Title of Subsection 3}{}}
\addcontentsline{toc}{subsection}{Title of Subsection 3}
\pagebreak{}
\subsection*{Title of Subsection 4\markright{Title of Subsection 4}{}}
\addcontentsline{toc}{subsection}{Title of Subsection 4}
\end{document}
答案1
我们必须为命令发出的正确标记提供更多结构\chapter
;所以我们这样做
\renewcommand{\chaptermark}[1]{%
\markboth{\chaptername\ \thechapter}
{\noexpand\firstsubsectiontitle}}
该\subsectiontitle
宏将由命令定义\subsection
;当然,如果第一页没有子部分开始,它将不起作用:
\renewcommand{\subsectionmark}[1]{%
\markright{#1}\gdef\firstsubsectiontitle{#1}}
这是一个例子;请注意我对你的代码所做的一些更改。例如,我重新定义了命令,\sectionmark
因此它不会发出任何标记。
小节编号问题的解决办法是\setcounter{secnumdepth}{1}
。
\documentclass{report}
% PACKAGES
\usepackage{fancyhdr}
\usepackage{lastpage} % Allows referencing of the last page to allow footer to read: "Page [Current page] of [Total number of pages]."
\usepackage{comment} % Allows comments of the type: \begin{comment}This text is commented out.\end{comment}
%\usepackage[colorlinks=true]{hyperref} % Turns table of contents and labels into clickable links. Commented out to speed up compiling.
\usepackage[T1]{fontenc} % Allows use of ">" symbol.
\usepackage{lmodern} %Not really sure what this is for.
% FORMATTING
% Header and Footer
\pagestyle{fancy}
% Allows calling chapter and section names in headers and footers.
\renewcommand{\chaptermark}[1]{%
\markboth{\chaptername\ \thechapter}
{\noexpand\firstsubsectiontitle}}
\renewcommand{\sectionmark}[1]{}
\renewcommand{\subsectionmark}[1]{%
\markright{#1}\gdef\firstsubsectiontitle{#1}}
\newcommand\firstsubsectiontitle{}
% General Header and Footer
\fancyhf{}
\fancyhead[L]{\DocumentAuthor}
\fancyhead[R]{\BookAuthor>\leftmark>\rightmark}
\fancyfoot[C]{Page \thepage\ of \pageref{LastPage}}
% Chapter Header and Footer
\fancypagestyle{plain}{%
\fancyhf{} \fancyhead[L]{\DocumentAuthor}%
\fancyhead[R]{\BookAuthor>\leftmark>\rightmark}%
\fancyfoot[C]{Page \thepage\ of \pageref{LastPage}}%
}
% Header/Footer Separation-line Width
\renewcommand\headrulewidth{0.4pt}
\renewcommand\footrulewidth{0.4pt}
\setlength\parindent{0pt} % Remove paragraph indentation.
% NAME AND CLASS SECTION
\newcommand{\DocumentAuthor}{Author Name}
\newcommand{\BookAuthor}{Book Author}
\setcounter{secnumdepth}{1}
%DOCUMENT
\begin{document}
\tableofcontents
\thispagestyle{empty}
\chapter{Title of Chapter 1}
\section{Sample Problems}
\subsection{Title of Subsection 1}
\pagebreak{}
\subsection{Title of Subsection 2}
\subsection{Title of Subsection 3}
\pagebreak{}
\subsection{Title of Subsection 4}
\end{document}
使用此代码,页面中的第一个小节将被放在页眉中。
这是\noexpand\firstsubsectiontitle
在做什么?\markboth
和\markright
命令必须记录计数器和标题的当前值,因此它们的参数通过 传递\edef
;在第一章和英语的情况下,这将设置一个值为 的左标记Chapter\ 1
。如果我们只\firstsubsectiontitle
在第二个参数中说,它将被展开,留下一个错误的右标记,因为它对于第一章来说是空的,并且将包含前一章的最后一小节!
所以我们说“亲爱的 TeX,现在不要扩展\firstsubsectiontitle
,只有当你设置标题时才扩展。”
实际上,如果章节页面中可以有多个小节,则应使用不同的解决方案:
% Allows calling chapter and section names in headers and footers.
\renewcommand{\chaptermark}[1]{%
\markboth{\chaptername\ \thechapter}
{\noexpand\firstsubsectiontitle}%
\global\firstsubsectionmarktrue}
\renewcommand{\sectionmark}[1]{}
\renewcommand{\subsectionmark}[1]{%
\markright{#1}%
\iffirstsubsectionmark
\gdef\firstsubsectiontitle{#1}%
\fi
\global\firstsubsectionmarkfalse}
\newif\iffirstsubsectionmark
\def\firstsubsectiontitle{}
所以这样第一的小节将会作出标记。
答案2
对于目录中包含的未编号子节,请将其添加\setcounter{secnumdepth}{1}
到序言中,并在正文中使用\subsection
而不是。再加上您已经重新定义(顺便说一句,只接受一个参数),这也(基本上)消除了在正文中使用 的需要。\subsection*
\subsectionmark
\markright
\markright
解决主要问题的方法是添加\clearpage\markright{Title of subsection 1}
前 章节开始。
\documentclass{report}
% PACKAGES
\usepackage{fancyhdr}
\usepackage{lastpage} % Allows referencing of the last page to allow footer to read: "Page [Current page] of [Total number of pages]."
\usepackage{comment} % Allows comments of the type: \begin{comment}This text is commented out.\end{comment}
%\usepackage[colorlinks=true]{hyperref} % Turns table of contents and labels into clickable links. Commented out to speed up compiling.
\usepackage[T1]{fontenc} % Allows use of ">" symbol.
\usepackage{lmodern} %Not really sure what this is for.
% FORMATTING
% Header and Footer
\pagestyle{fancy}
% Allows calling chapter and section names in headers and footers.
\renewcommand{\chaptermark}[1]{\markboth{\chaptername\ \thechapter}{}}
\renewcommand{\subsectionmark}[1]{\markright{#1}}
% General Header and Footer
\lhead{\DocumentAuthor}
\chead{}
\rhead{\BookAuthor>\leftmark>\rightmark}
\lfoot{}
\cfoot{}
\rfoot{Page \thepage\ of \pageref{LastPage}}
% Chapter Header and Footer
\fancypagestyle{plain}{%
\lhead{\DocumentAuthor}
\chead{}
\rhead{\BookAuthor>\leftmark>\rightmark}
\lfoot{}
\cfoot{}
\rfoot{Page \thepage\ of \pageref{LastPage}}}
% Header/Footer Separation-line Width
\renewcommand\headrulewidth{0.5pt}
\renewcommand\footrulewidth{0.5pt}
\setlength\parindent{0pt} % Remove paragraph indentation.
% NAME AND CLASS SECTION
\newcommand{\DocumentAuthor}{Author Name}
\newcommand{\BookAuthor}{Book Author}
\setcounter{secnumdepth}{1}
%DOCUMENT
\begin{document}
\tableofcontents{}
\thispagestyle{empty}
\clearpage
\markright{Title of Subsection 1}
\chapter{Title of Chapter 1}
\section{Sample Problems}
\subsection{Title of Subsection 1}
\clearpage
\subsection{Title of Subsection 2}
\subsection{Title of Subsection 3}
\clearpage
\subsection{Title of Subsection 4}
\end{document}