![结合 frontmatter、mainmatter 更改 chaptermark](https://linux22.com/image/440350/%E7%BB%93%E5%90%88%20frontmatter%E3%80%81mainmatter%20%E6%9B%B4%E6%94%B9%20chaptermark.png)
我正在尝试更改书籍类文档中的chaptermark
(和sectionmark
)。我想禁用大写字母并且不显示\chaptername
。
我在维基页面。根据本手册,以下命令将完成该工作。
\renewcommand{\chaptermark}[1]{\markboth{\thechapter.\ #1}{}}
但是,对于章节,\frontmatter
此操作会产生不需要的标题,其中包含 0。可以使用 if 语句修复此问题。我遇到的问题是,对于标题,\tableofcontents
我仍然得到一个大写字母CONTENTS
,参考书目也是如此。
这是一个最小的例子
\documentclass{book}
\usepackage[utf8]{inputenc}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Introduction}
\mainmatter
\chapter{Here we go}
Random text
\appendix
\chapter{some things you better know}
\backmatter
\end{document}
答案1
下面的代码满足您的要求。问题是\tableofcontents
它\markboth
直接使用固定参数调用。所以我们必须更改\chaptermark
并另外修补\tableofcontents
。
\listoffigures
和也需要相同的补丁,因此如果您打算使用它们,也\listoftables
请对它们进行两次调用。\patchcmd
\documentclass{book}
\makeatletter
\renewcommand\chaptermark[1]
{%
\markboth
{%
\ifnum\c@secnumdepth>\m@ne
\if@mainmatter
\thechapter . \
\fi
\fi
#1%
}{}%
}
\renewcommand\sectionmark[1]{%
\markright{% <- this would produce a space without the %
\ifnum \c@secnumdepth > \z@
\thesection. \ % <- the spacing in the original definition
\fi
#1}% <- this would produce a space without the %
}
\makeatother
\usepackage{etoolbox}
% there are two \MakeUppercase commands contained in \tableofcontents, we remove
% both
\patchcmd\tableofcontents{\MakeUppercase}{}{}{\ERROR}
\patchcmd\tableofcontents{\MakeUppercase}{}{}{\ERROR}
\begin{document}
\frontmatter
\tableofcontents
\chapter{Introduction}
\mainmatter
\chapter{Here we go}
Random text
\appendix
\chapter{some things you better know}
\backmatter
\end{document}