我的文档中有一个自定义标题,基于\documentclass{book}
之后的页面\chapter
呈现以下模式:
Chapter X: title
提供方:\fancyhead[L]{\leftmark}
\chapter*
但是,当用户调用where 标题显示之前的位置时会出现错误\chapter
。有办法区分它吗?
編輯符合@david Carlisle 的建议。重现错误的最小示例:
\documentclass{book}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagenumbering{gobble}
\fancyhf{}
\fancyhead[L]{\leftmark}
\begin{document}
\pagestyle{fancy}
\chapter*{Sumary}
\lipsum[2-4]\newpage\lipsum[2-4]
\chapter{Introduction}
\lipsum[2-4]\newpage\lipsum[2-4]
\chapter{Metodology}
\lipsum[2-4]\newpage\lipsum[2-4]
\chapter*{References}
\lipsum[2-4]
\newpage
Here there is a bug in the heading. Should be only 'References' or either empty.
\end{document}
答案1
您想使用\frontmatter
、\mainmatter
和\backmatter
。
发出第一或第三条命令后,\chapter
将生成未编号的章节,这些章节将放在目录中。下面的\mainmatter
章节已编号。
您还需要修改 的定义\chaptermark
(我借此机会删除了可怕的默认大写字母)。但是\tableofcontents
确实如此\MakeUppercase
,所以\nouppercase
仍然是必要的。
如果您不想在前言中使用罗马页码,只需对\frontmatter
和进行简单修改\mainmatter
即可。
\documentclass{book}
\usepackage{lipsum}
\usepackage{fancyhdr}
\fancyhf{}
\fancyhead[L]{\nouppercase{\leftmark}}
\makeatletter
\renewcommand{\chaptermark}[1]{%
\markboth{%
\if@mainmatter
\chaptername\ \thechapter. %
\fi
#1%
}{}%
}
% the following is to get numbering from 1 for all the document
\renewcommand{\frontmatter}{%
\cleardoublepage
\@mainmatterfalse
\pagenumbering{arabic}%
}
\renewcommand{\mainmatter}{\cleardoublepage\@mainmattertrue}
\makeatother
\pagestyle{fancy}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Summary}
\lipsum[2-4]\newpage\lipsum[2-4]
\mainmatter
\chapter{Introduction}
\lipsum[2-4]\newpage\lipsum[2-4]
\chapter{Metodology}
\lipsum[2-4]\newpage\lipsum[2-4]
\backmatter
\chapter{References}
\lipsum[2-4]
\newpage
Here there is a bug in the heading. Should be only 'References' or either empty.
\end{document}
如果你确实想要大写,请删除\nouppercase
并将重新定义更改\chaptermark
为
\renewcommand{\chaptermark}[1]{%
\markboth{%
\MakeUppercase{%
\if@mainmatter
\chaptername\ \thechapter. %
\fi
#1%
}%
}{}%
}