\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[top=1in, bottom=1in, left=1in, right=1in, headheight=13.6pt]{geometry}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{0pt}
\fancyhead[LE]{\leftmark}
\fancyhead[RO]{\rightmark}
\begingroup\lccode`~=`:
\lowercase{\endgroup
\newcommand{\partmark}[1]{%
\markboth{\MakeUppercase{\partname\space\thepart~ #1}}{}%
}
\renewcommand{\chaptermark}[1]{%
\markright{\MakeUppercase{\chaptername\space\thechapter~ #1}}%
}
}% end of \lowercase
\makeatletter
\patchcmd{\H@old@part}% would be \@part without hyperref
{\markboth{}{}}
{\partmark{#1}}
{}{}
\makeatother
\begin{document}
\frontmatter
\part*{Préambule}
\tableofcontents
\chapter{Introduction}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\mainmatter
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Second chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\part{Deuxieme partie}
\chapter{Troisieme chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Quatrieme chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\appendix
\part*{Annexes}
\chapter{Premère annexe}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Seconde annexe}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\end{document}
首先,对于该问题的主题标题来说,这不能正常工作:
- 在前言中,标题中的章节标题(应为序言)是错误的。
- 章节标题的格式很奇怪(例如:“Première PARTIE I: PREMIERE PARTIE”)
- 在章节中,标题基于节而不是章
实际上,我希望能够在书中使用命令“手动”定义自己的标题(示例未显示这一点,但我的书的结构很复杂)。例如,通过在每个部分/章节上重新定义命令:
\renewcommand{\currentpartheader}{Blablabla}
\renewcommand{\currentchapterheader}{BLABLABLA}
知道我想要\currentpartheader
显示在偶数页上并\currentchapterheader
显示在奇数页上。
怎么做?
fancyhdr
注意:如果其他包可以完成这项工作,我就不需要使用它。
答案1
\part*{}
不会改变标题。如果您想要更改它们,您可以\markboth{}{}
手动发出一个包含所需内容的 。为了避免标题中出现部分,您可以重新定义\sectionmark
为\relax
。最后,使用 egreg 的前缀,标题中没有任何奇怪的大小写混合。
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[top=1in, bottom=1in, left=1in, right=1in, headheight=13.6pt]{geometry}
\usepackage{fancyhdr}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}
%Note: this is a very preliminary attempt...,
%Fancier solutions are welcome
%The page numbering does not work correctly
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{0pt}
\fancyhead[LE]{\leftmark}
\fancyhead[RO]{\rightmark}
\begingroup\lccode`~=`:
\lowercase{\endgroup
\newcommand{\partmark}[1]{%
\markboth{\MakeUppercase{\partname\space\thepart~ #1}}{}%
}
\renewcommand{\chaptermark}[1]{%
\markright{\MakeUppercase{\chaptername\space\thechapter~ #1}}%
}
}% end of \lowercase
\makeatletter
\patchcmd{\H@old@part}% would be \@part without hyperref
{\markboth{}{}}
{\partmark{#1}}
{}{}
\makeatother
\def\sectionmark#1{\relax}
\begin{document}
\frontmatter
\part*{Préambule}
\tableofcontents
\markboth{\MakeUppercase{Préambule}}{}
\chapter{Introduction}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\mainmatter
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Second chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\part{Deuxieme partie}
\chapter{Troisieme chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Quatrieme chapitre}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\appendix
\part*{Annexes}
\chapter{Premère annexe}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\chapter{Seconde annexe}
\lipsum
\section{Première section}
\lipsum
\lipsum
\lipsum
\section{Deuxième section}
\lipsum
\lipsum
\lipsum
\end{document}
如果你想手动设置标题,为什么不直接说
\fancyhf[LE]{whatever}
\fancyhf[RO]{whatever else}
摆弄标记的唯一原因是为了让事情自动化。如果你不自动化,你就不需要那么复杂。
答案2
书籍类的默认标题如下
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
尽管默认情况下标题下不包含一行。这些使您可以完全控制标题内容,但对于您的目的,只需更改 \leftmark 和/或 \rightmark 即可。
只要关闭默认页眉,就可以使用 everypage 包创建更奇特的页眉或页脚。下图在页眉下方画了一条线。
\documentclass{book}
\usepackage{everypage}
\usepackage{lipsum}
\newif\ifspecialpage
\let\oldpagestyle=\thispagestyle
\renewcommand\thispagestyle[1]{\specialpagetrue\oldpagestyle{#1}}
\makeatletter
\AddEverypageHook{% draw line in \headsep
\ifspecialpage\global\specialpagefalse\else
\raisebox{\dimexpr -\topmargin-\headheight-0.5\headsep-.2pt}[0pt][0pt]%
{\rlap{\ifodd\c@page\relax\hspace{\oddsidemargin}\else\hspace{\evensidemargin}\fi
\rule{\textwidth}{.4pt}}}\fi}
\makeatother
\begin{document}
\chapter{Chapter One}
\lipsum[1-12]
\end{document}