我的目标是实现一本书的这种布局(可能使用 fancyhdr,但我愿意接受一切):
当前布局以灰色表示。换句话说,我想要:
- 将页码放在每页的页脚上(部分标题页除外)
- 将当前部分的名称放在偶数(非特殊)页面上(格式如图所示:PART I: XXX)+ 在其下加一行
- 将当前章节的名称放在奇数页(非特殊页)(格式如图:CHAPTER I: XXX)+ 在其下加一行
我所说的“特殊页”是部分标题的页面或每章的第一页。
- 怎么做?
- 从专业编辑的角度来看,我应该为偶数页的页眉选择什么样的对齐方式(部分标题在左/中/右?)以及奇数页的页眉选择什么样的对齐方式(章节标题在左/中/右?)(是否有一种更可取/更“自然”的对齐方式?)
以下是基本文档的示例:
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{hyperref}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage{fancyhdr}
\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]{\thepart} %How do I get the part name in capital letters
\fancyhead[RO]{\thechapter} %How do I get the chapter name in capital letters
\begin{document}
\mainmatter
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Second chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\part{Deuxieme partie}
\chapter{Troisieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Quatrieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
答案1
您可以尝试
\documentclass[11pt,a4paper]{book}
\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{hyperref}
\usepackage[head=15pt, top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage{lipsum}
\newcommand*\parttitle{}
\let\origpart\part
\renewcommand*{\part}[2][]{%
\ifx\\#1\\% optional argument not present?
\origpart{#2}%
\renewcommand*\parttitle{#2}%
\else
\origpart[#1]{#2}%
\renewcommand*\parttitle{#1}%
\fi
}
\usepackage{fancyhdr}\pagestyle{fancy}
\fancyhead{}
\fancyhead[RO]{\leftmark}
\fancyhead[LE]{Partie \thepart: \parttitle}
\fancyfoot{}
\fancyfoot[C]{\thepage}
\begin{document}
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Second chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\part{Deuxieme partie}
\chapter{Troisieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Quatrieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
\fancyhead[RO]{\leftmark}
您必须在和中编辑字体样式\fancyhead[LE]{Partie \thepart: \parttitle}
。此外,您可能需要\thispagestyle{empty}
在新章节和新部分之前使用白页。
我%
之前\usepackage[T1]{fontenc}
曾提出过在线 latex 编译器的问题。另外
答案2
下面的操作将按照您的要求进行。我不确定这是否是您想要的,但您的里程可能会有所不同。
\pagestyle{fancy}
\fancyhf{}
\fancyhf[coh]{\rightmark}
\fancyhf[ceh]{\leftmark}
\fancyhf[cf]{\thepage}
\renewcommand\chaptermark[1]{\markright{\MakeUppercase{\chaptername{} \thechapter: #1}}}
\makeatletter
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{\MakeUppercase{\partname{} \thepart: #1}}{}%
{\centering
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\huge\bfseries \partname\nobreakspace\thepart
\par
\vskip 20\p@
\fi
\Huge \bfseries #2\par}%
\@endpart}
\makeatother
完整代码:
\documentclass[11pt,a4paper,french]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[top=1in, bottom=1in, left=1in, right=1in]{geometry}
\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}
\fancyhf{}
\fancyhf[coh]{\rightmark}
\fancyhf[ceh]{\leftmark}
\fancyhf[cf]{\thepage}
\renewcommand\chaptermark[1]{\markright{\MakeUppercase{\chaptername{} \thechapter: #1}}}
\makeatletter
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{\MakeUppercase{\partname{} \thepart: #1}}{}%
{\centering
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\huge\bfseries \partname\nobreakspace\thepart
\par
\vskip 20\p@
\fi
\Huge \bfseries #2\par}%
\@endpart}
\makeatother
\begin{document}
\mainmatter
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
编辑
我不确定上述内容是否符合您的要求,因为我认为章节之间有空白页看起来很奇怪。您可能不同意,但如果不同意,您可以根据需要将其删除。
如果您不想在章节之间的页面上显示页眉,但想要页码,请添加
\usepackage{etoolbox,nextpage}
\patchcmd{\chapter}{\cleardoublepage}{\cleartooddpage[\thispagestyle{plain}]}{\typeout{Chapters successfully patched for no headers on pages between chapters.}}{\typeout{Could not patch chapters to eliminate headers on pages between chapters.}}
如果您不想要页码,请更改plain
为empty
。
顺便说一句,我个人认为这些标题太重,太分散注意力了。它们都用大写字母加下划线,并且居中。我建议采用更巧妙的方法,既能提供信息,又不会将视线从文本内容上移开。(删除规则或将标题移到一侧或另一侧,并去掉大写字母或……)
答案3
您可以修补\part
问题\partmark
而不是\markboth{}{}
,类似于\chapter
问题\chaptermark
。然后只需适当地定义这两个宏即可。
\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
\begin{document}
\mainmatter
\part{Premiere partie}
\chapter{Premier chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Second chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\part{Deuxieme partie}
\chapter{Troisieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\chapter{Quatrieme chapitre}
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
请注意,需要使用特殊技巧才能在标题中获得法式冒号。基本上,\partmark
和\chaptermark
是用冒号的活动版本定义的。
因为我们在加载之后进行修补hyperref
,所以我们需要修补\H@old@part
而不是“\@part”。
不要忽视fancyhdr
有关头部高度的警告;我将建议的设置添加到了选项中geometry
。