如何重置 \chapter* 和 frontmatter 章节的脚注编号?

如何重置 \chapter* 和 frontmatter 章节的脚注编号?

对我的评论回答Biblatex 和章节之间的引用重置book让我意识到,与和类中的正常章节相反report\chapter*(带星号的版本)不会重置脚注的编号:

\documentclass{book}

\begin{document}

\chapter*{Preface}

Some text.\footnote{A footnote}

\chapter*{Introduction}

Some text.\footnote{A footnote}

\chapter{First}

Some text.\footnote{A footnote}

\end{document}

\chapter课程的前言部分也是如此book

\documentclass{book}

\begin{document}

\frontmatter

\chapter{Preface}

Some text.\footnote{A footnote}

\chapter{Introduction}

Some text.\footnote{A footnote}

\mainmatter

\chapter{First}

Some text.\footnote{A footnote}

\end{document}

如何重置脚注\chapter*和前言章节的编号?

答案1

我将修补\@chapter\@schapter将计数器设置footnote为零;第一个将处理的情况\chapter*,第二个将处理在下创建的章节\chapter\frontmatter计数器chapter不会重置,\frontmatter因为的定义\@chapter

\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
                       \if@mainmatter
                         \refstepcounter{chapter}%

并且\frontmatter

\@mainmatterfalse

因此修补将会是这样的

\usepackage{etoolbox}

\makeatletter
\pretocmd{\@schapter}{\setcounter{footnote}{0}}{}{}
\pretocmd{\@chapter}{\setcounter{footnote}{0}}{}{}
\makeatother

答案2

正如 Gonzalo 所说,仅修补宏以输出“带星号”版本的章节标题是不够的。所以我建议修补\chapter

\usepackage{etoolbox}

\makeatletter
\patchcmd\chapter{\thispagestyle}{\global\c@footnote\z@\thispagestyle}{}{}
\makeatother

答案3

虽然到目前为止提供的两个答案都解决了脚注计数器的问题,但也许更好的方法是定义语义用于附加前言部分的命令。

这是一种比使用另一个包将材料注入宏的后部或前部更好的方法。

我见过前言、序言、致谢、系列编辑前言、关于本书、贡献者名单、定义、作者所属、缩写、声明等许多部分,而且这些部分都是英文书籍。这些有时也包含在目录中。其中一些是签名的,另一些则有各种其他格式要求。因此,我更喜欢将它们设置为环境。

这是一个工厂命令,用于创建这样的环境(也解决了脚注问题)并在五行代码中强制一致性,不需要任何包。

\newcommand\forewordname{foreword}
\newcommand\definitionsname{Definitions}
\newcommand\makepreamblecmd[1]{%
    \expandafter\newenvironment\expandafter{#1}{%
    \setcounter{footnote}{0}
    \chapter*{#1}}% could be other formatting macro
{}}

你创建新的环境,

 \makepreamblecmd{\forewordname}
 \makepreamblecmd{\definitionsname}

通过使用宏,\forewordname您还可以处理除英语之外的其他语言。

这是一个完整的极简主义,

\documentclass{book}
\makeatletter
\newcommand\forewordname{foreword}
\newcommand\definitionsname{Definitions}
\newcommand\prefacename{Preface}
\newcommand\makepreamblecmd[1]{%
    \expandafter\newenvironment\expandafter{#1}{%
    \setcounter{footnote}{0}
   \chapter*{#1}}%
{}}

\title{test}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\makepreamblecmd{\forewordname}
\makepreamblecmd{\definitionsname}
\makepreamblecmd{\prefacename}
\begin{foreword}
Some text.\footnote{A footnote}
Some text.\footnote{A footnote}
\end{foreword}
\begin{Definitions}
Some text.\footnote{A footnote}
Some text.\footnote{A footnote}
\end{Definitions}

\begin{Preface}
Some text.\footnote{A footnote}
Some text.\footnote{A footnote}
\end{Preface}

\mainmatter
\chapter{First}
Some text.\footnote{A footnote}
\end{document}

如果需要,可以修改生成环境的“工厂方法”,以将名称添加到 ToC 并确保其超链接。

相关内容