fancyhdr、frontmatter 和 toc

fancyhdr、frontmatter 和 toc

我已经完成了我的工作,只是进行了视觉调整:我想从目录中删除任何页眉/页脚,但不是从每一章的开头删除。我\frontmatter发现\mainmatter可以解决问题,但这只能从第 2 页删除任何页眉/页脚(这很棒)。

\documentclass[a4paper,12p,twoside]{book}想要实现:

i) 仅含页脚的标题页

ii) 完全空白

iii)目录 - 无页眉/页脚

iv) 目录续 - 无页眉/页脚

第 1 页)前言 - 仅页脚

第 2 页)页眉/页脚

ETC。

以下是代码:

\documentclass[a4paper,12p,twoside]{book}
\usepackage[table]{xcolor}                   %% allow colour
\definecolor{Tmaroon}{RGB}{119,36,50}
\definecolor{Lblue}{RGB}{0,65,101}
\definecolor{Cgray}{RGB}{169,178,177}
\definecolor{Hyellow}{RGB}{242,223,116}

\usepackage[textwidth=450pt, textheight=680pt,top=3cm, left=2.5cm]{geometry} %margins
%
\setcounter{tocdepth}{1}
\usepackage{setspace}
\usepackage{soul}

\usepackage{titletoc}% http://ctan.org/pkg/titletoc
    \titlecontents{chapter}% <section-type>
      [0pt]% <left>
      {}% <above-code>
      {\bfseries\chaptername\ \thecontentslabel\quad}% <numbered-entry-format>
      {}% <numberless-entry-format>
      {\bfseries\hfill\contentspage}% <filler-page-format>

% dots for chapters
\usepackage{tocloft}
\renewcommand{\cftsecfont}{\scshape}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % for chapters
\setlength\cftparskip{0pt}
\setlength\cftbeforechapskip{5pt}

\usepackage{fancyhdr}       %% allow header, footer
\setlength{\headheight}{15.2pt}
\pagestyle{fancy}
\fancyhf{} % clear header and footer fields
\fancyheadoffset{1 cm}
\fancyfootoffset{1 cm}
\lhead[\bfseries \textcolor{Lblue} {ST Handbook}]{}
\rhead[]{\textcolor{Tmaroon} {\leftmark}}
\lfoot[\textcolor{Cgray} {page \thepage}]{\textcolor{Cgray} {Chartered XXX}}
\rfoot[]{\textcolor{Cgray} {page \thepage}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}


\fancypagestyle{pchap}{ % pchap
    \fancyhf{}
    \fancyheadoffset{1 cm}
    \fancyfootoffset{1 cm}
    \lhead[]{}
    \rhead[]{}
    \lfoot[\textcolor{Cgray} {page \thepage}]{\textcolor{Cgray} {Chartered XXX}}
    \rfoot[]{\textcolor{Cgray} {page \thepage}}
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0.4pt}
    } % pchap
\makeatletter
\let\ps@plain\ps@pchap
\makeatother


    \fancypagestyle{firstpage}{% first page different
    \lhead{}
    \chead{}
    \rhead{}
    \renewcommand{\headrulewidth}{0pt}
    \lfoot{\textcolor{Cgray} {Chartered XXX}}
    \rfoot{\bfseries \textcolor{Lblue} {ST}}
    \renewcommand{\footrulewidth}{0.4pt}
    }% first page different

\usepackage{datetime} % dates - my altered dates below
    \newdateformat{monthyeardate}{%
      \monthname[\THEMONTH] \THEYEAR} %just month written and Year
    
    \newdateformat{normal}{%
      \longdate \ordinaldate{\THEDAY} \monthname[\THEMONTH] \THEYEAR} %normal date
    
    \newcommand\twodigits[1] {\ifnum#1<10 0#1\else #1\fi}
    \newdateformat{quoteNo}{%
       \THEYEAR--\twodigits{\THEMONTH}--\twodigits{\THEDAY}} % digit date for quote no.

\setlength{\parindent}{0pt} % never indent first line

\usepackage{etoc}

\begin{document}

\frontmatter
\pagestyle{empty}

\pagenumbering{gobble}
\thispagestyle{firstpage}
    \begin{center}
    \vspace{0.9cm}
      { \bfseries \textcolor{Lblue} {\Huge{ST HANDBOOK}}}
    
    \vspace{15cm}
    
    {\footnotesize
     \hfill revised \normal \today \\
    }
    \end{center}

\cleardoublepage
%\thispagestyle{empty}
\doublespacing
\thispagestyle{firstpage}
\tableofcontents
\onehalfspacing
\thispagestyle{empty}
\cleardoublepage

\pagenumbering{arabic} 

\mainmatter
\pagestyle{fancy}

\chapter{ONE}

\section {A}

\chapter{TW0}

    \section {B}
    
    \newcount\cntas
    \loop
    \section{\the\cntas}
     soeoco \vspace{5cm} 
    \ifnum\cntas<20
    \advance\cntas 1
    \repeat

\newcount\cnta
\loop
\chapter{\the\cnta}
 soeoco \vspace{5cm} 
\ifnum\cnta<15
\advance\cnta 1
\repeat

\end{document}

我能区分\frontmatter\mainmatter吗?

答案1

目录的问题在于它使用的内容\thispagestyle{plain}与所有章节开头的页面一样。

添加\thispagestyle{empty}不会有帮助:如果你把它放在前面,\tableofcontents它将被嵌入的覆盖\thispagestyle{plain},如果你把它放在后面,它将应用于最后一页。

诀窍是将\thispagestyle{empty}作为目录的第一个元素潜入其中,这将在第一页执行,但在标题(及其\thispagestyle{plain})设置之后。

\newpage
\pagestyle{empty}
\addtocontents{toc}{\protect\thispagestyle{empty}}
\tableofcontents
\newpage

答案2

我发现了一个可能的解决方法(不确定是否有效,但它对我的工作有用):

代替

\makeatletter
\let\ps@plain\ps@pchap
\makeatother

\makeatletter
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                \if@mainmatter
                  \thispagestyle{pchap}% plain page style in mainmatter
                \else
                  \thispagestyle{empty}% empty page style outside of mainmatter
                \fi%
                \global\@topnum\z@
                \@afterindentfalse
                \secdef\@chapter\@schapter}
\makeatother

我很想知道是否有更好的解决方案/结构适合我的工作。

相关内容