字母/数字混合计数器的问题

字母/数字混合计数器的问题

我的问题基于这个。也就是说,我希望拥有以下结构:

附录(部分)

附录第一部分(章节)

A.1 第一部分第一节(Section)

以下是 MWE:

\documentclass[11pt,twoside]{report}
\usepackage[hypertexnames=false]{hyperref}

\begin{document}
\tableofcontents

\phantomsection
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
%===
\phantomsection
\part*{APPENDIX}
\addcontentsline{toc}{part}{APPENDIX}
%
\setcounter{chapter}{0}
\renewcommand{\thechapter}{\Alph{chapter}}
%
\chapter*{First chapter of the appendix}
\addcontentsline{toc}{chapter}{\numberline{A}First chapter of the appendix}
%
\setcounter{section}{0}
\renewcommand{\thesection}{\Alph{chapter} . \arabic{section}}
\section{First section of the first chapter}

\end{document}

对于部分和章节,这很好,但对于部分,我得到

. 1 First part of the first chapter

chapter也就是说,中的计数器\thesection丢失了。这是怎么回事?

另外,有趣的是,如果没有,\setcounter{section}{0}我得到的是,其中 3 是上一章. 3的值。为什么没有重新初始化它?\thesection

自从我开始提问以来,还有另外一个小问题。在目录中,我看到附录在第 4 页,而在正文中它在第 3 页。

附加:这是我根据您的回答成功制作出的所需目录。 在此处输入图片描述

答案1

不用摆弄计数器:您想要的是,对于附录,章节标题的排版就像带星号的一样。

\documentclass[11pt,twoside]{report}
\usepackage{hyperref}

\makeatletter
\newcommand{\startappendix}{%
  \cleardoublepage
  \appendix
  \phantomsection\addcontentsline{toc}{part}{APPENDIX}
  \part*{APPENDIX}
  \let\@makechapterhead\@makeschapterhead
}
\makeatother

\begin{document}

\tableofcontents

\phantomsection
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}

\chapter{Title}

\section{First}

\section{second}

\startappendix

\chapter{First chapter of the appendix}

\section{First section of the first chapter}

\section{Second section of the first chapter}

\chapter{Second chapter of the appendix}

\section{First section of the first chapter}

\end{document}

在此处输入图片描述

在此处输入图片描述

答案2

解决你的问题的最简单方法是对章节进行编号。

问题在于计数器chapter为零。你写章节时没有数字,计数器就不会增加,因此为零。该函数\Alph将数字转换为大写字母,从 1->A 开始,依此类推,直到 26->Z。高于 26 的数字将出现错误。现在,当计数器为零时,它不会给出任何输出。与下面的代码进行比较

\documentclass{article}
\newcounter{TestCount}    
\begin{document}
\setcounter{TestCount}{0}
First: \Alph{TestCount}.

\setcounter{TestCount}{1}
Second: \Alph{TestCount}.

\setcounter{TestCount}{26}
Third: \Alph{TestCount}.
\end{document}

在此处输入图片描述

答案3

您之所以得到输出,是因为您使用了\chapter*,这会导致一个空\thechapter变量。请尝试使用\chapter{First part of appendix}。此外,您还应该在问题中提供完整的 MWE(包含文档标题和内容)。

编辑:我的表述不好。\thecapter是空的,因为计数器章节为 0。要获得所需的行为,您可以像这样手动推进计数器:

\chapter*{foo}
\setcounter{chapter}{1}

为了从整体上摆脱“第 1 章”的束缚,您可以看看这个问题:如何抑制 \chapter 中的“章节”(同时保留编号)

EDIT2:关于目录中部分的错误页面:(仅猜测)这可能是由于\part命令清除页面造成的。您可以尝试以下更改:

\clearpage
\addcontentsline{toc}{part}{APPENDIX}
\phantomsection
\part*{APPENDIX}

答案4

在我看来,在未编号的章节中使用编号部分很奇怪。

为了防止弄乱数字,我引入了一个假章节计数器\addtocounter{chapter}{-1}\stepcounter{chapter}——这将重置章节的完整计数器列表。\setcounter{section}{0}这还不够。

我也换了另一个版本的\appendix宏。

\documentclass[11pt,twoside]{report}
\usepackage[hypertexnames=false]{hyperref}

\newcounter{fakechapter}
\usepackage{xpatch}

\makeatletter

\AtBeginDocument{%
  \xpretocmd{\@schapter}{\phantomsection\refstepcounter{fakechapter}\addtocounter{chapter}{-1}\stepcounter{chapter}}{\typeout{success!}}{}% This will reset the section counter
}
\let\appendixorig\appendix
\renewcommand{\appendix}{%
  \appendixorig
  \renewcommand{\appendixname}{APPENDIX}
  \part*{\appendixname}
  \renewcommand{\thefakechapter}{\Alph{fakechapter}}
  \renewcommand{\thesection}{\arabic{section}}
  \setcounter{fakechapter}{0}
}
\makeatother

\begin{document}
\tableofcontents
\phantomsection
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
%===
\chapter{Normalchapter}

\section{Foo section}
\section{Foobar section}
\section{FoobarFoo section}

\appendix

\chapter*{First chapter of the appendix}
\addcontentsline{toc}{chapter}{\protect\numberline{\thefakechapter}First chapter of the appendix}
\section{First section of the first chapter}
\end{document}

在此处输入图片描述

相关内容