我正在排版一本书,其中一章分成两章,所以我需要像这样计算:
chapter 1
---------
chapter 2a
----------
chapter 2b
----------
chapter 3
---------
chapter 4
---------
我看到了一个几乎可以解决的问题这里。但此解决方案不允许我继续进行非分离章节计数。
这只是章节,各个部分没有编号,我正在使用book
带有hyperref
包的类。
答案1
如果你使用提供以下功能的标准文档类\chapter
(如book
或者report
),则以下内容有效:
\documentclass{report}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
%\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\newcounter{subchapter}\renewcommand{\thesubchapter}{\alph{subchapter}}
\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\newcommand{\updatechaptercounter}{}
\patchcmd{\@chapter}{\@afterheading}{\updatechaptercounter\@afterheading}{}{}% Regular patch of \@chapter
%\patchcmd{\Hy@org@chapter}{\@afterheading}{\updatechaptercounter\@afterheading}{}{}% Hyperref patch of \@chapter
\makeatother
\providecommand{\theHchapter}{}%
\newcommand{\startsubchapters}{%
\setcounter{subchapter}{0}% Reset sub-chapter numbering
\renewcommand{\thechapter}{\arabic{chapter}\thesubchapter}% Update chapter number display
\renewcommand{\theHchapter}{\arabic{chapter}\thesubchapter}% Update chapter number display (for hyperref)
\renewcommand{\updatechaptercounter}{\addtocounter{chapter}{-1}}% Update chapter number
\let\oldchapter\chapter%
\renewcommand{\chapter}{\stepcounter{subchapter}\oldchapter}% Increment subchapter
}
\newcommand{\stopsubchapters}{%
\renewcommand{\thechapter}{\arabic{chapter}}% Reset chapter numbering
\renewcommand{\theHchapter}{\arabic{chapter}}% Reset chapter numbering (for hyperref)
\let\chapter\oldchapter% Restore regular \chapter command
\renewcommand{\updatechaptercounter}{}% Clear chapter counter update
\stepcounter{chapter}% Update chapter counter
}
\begin{document}
\tableofcontents
\chapter{First chapter}
\startsubchapters
\chapter{Second sub-chapter}
\chapter{Second sub-chapter}
\stopsubchapters
\chapter{Third chapter}
\chapter{Fourth chapter}
\end{document}
此解决方案背后的想法是修补\@chapter
并插入一个特殊宏\updatechaptercounter
。然后以特定方式重新定义此宏,具体取决于您是开始子章节编号 ( \startsubchapters
) 还是停止它 ( \stopsubchapters
)。
如果你使用hyperref
那么您需要按照上面的 MWE 所示更新补丁。