结合 frontmatter、mainmatter 更改 chaptermark

结合 frontmatter、mainmatter 更改 chaptermark

我正在尝试更改书籍类文档中的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}

相关内容