由于小节原因,标题在章节页面上显示不正确

由于小节原因,标题在章节页面上显示不正确

(完整的源代码如下。)

(注意:不确定我使用的是 LaTeX 还是 TeX。我正在使用 TeXworks 进行编辑,因为 TeXStudio 无法在没有 +20 秒延迟的情况下呈现我输入的内容。)

如果这个问题已经有人问过,我深表歉意。我搜索了 tex.stackexchange.com、互联网和文档fancyhdr,但找不到解决方案。

简单来说,我曾经设置过页眉,但是尽管重新定义了样式fancyhdr,章节页面仍然无法正确显示。fancyhdrplain

我从文档中得到的最佳线索fancyhdr如下:

标准 LATEX 类中的标记的另一个问题是,更高级别的分段命令(例如 \chapter)使用空的 right 参数调用 \markboth。这意味着在章节(或文章样式中的部分)的第一页上,\rightmark 将为空。如果这是一个问题,您必须手动插入额外的 \markright 命令或重新定义 \chaptermark(\sectionmark)命令以发出具有两个合适参数的 \markboth 命令。

尽管尝试了很多次,但我仍不清楚如何实现这个解决方案。


具体来说,这就是我正在尝试做的事情(粗体项目导致了问题):

  1. 左页眉:[作者姓名]
  2. 右标题:[书籍作者姓名]>[“章节”+章节编号]>[小节名称]
  3. 所有页面(包括章节页面)必须显示相同的页眉,且不包括目录。[解决方案请参见 egreg 的回复。]
  4. 子节不能自动编号,即它们必须是“* 命令”。
  5. 尽管是“* 命令”,但子部分必须出现在目录中。

附言[已解决,请参阅下面的解决方案:]有没有办法 (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}

相关内容