对于使用个人类(从类继承)构建的文档的未编号部分单元book
,我想要使用:
- 不是相应命令的星号形式,
- 而是
tocvsec2
包\setsecnumdepth{none}
和\resetsecnumdepth
开关。
这有几个优点:
- 无需对未编号章节的每个部分、小节等使用星号形式,
- 不需要
\addcontentsline{toc}{...}{...}
对目录中出现的未编号部分单元使用神秘的命令, - 未编号章节和部分的页眉没有任何问题(以星号标记的页眉是先前编号的章节和部分的页眉)。
以下两个 MCE 显示了这一点:第一个使用传统的星号命令(标题问题未解决),
\documentclass{book}
\usepackage{tocvsec2}
\usepackage{lipsum}
\begin{document}
%
\tableofcontents
%
\chapter{Numbered chapter}
\lipsum[1-10]
\section{Numbered section}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter}
\addcontentsline{toc}{chapter}{Unnumbered chapter}
\lipsum[1-10]
\section*{Unnumbered section}
\addcontentsline{toc}{section}{Unnumbered section}
\lipsum[1-10]
%
\chapter{Numbered chapter (bis)}
\lipsum[1-10]
\section{Numbered section (bis)}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter (bis)}
\addcontentsline{toc}{chapter}{Unnumbered chapter (bis)}
\lipsum[1-10]
\section*{Unnumbered section (bis)}
\addcontentsline{toc}{section}{Unnumbered section (bis)}
\lipsum[1-10]
%
\end{document}
第二个具有tocvsec2
包装功能。
\documentclass{book}
\usepackage{tocvsec2}
\usepackage{lipsum}
\begin{document}
%
\tableofcontents
%
\chapter{Numbered chapter}
\lipsum[1-10]
\section{Numbered section}
\lipsum[1-10]
%
\setsecnumdepth{none}%
%
\chapter{Unnumbered chapter}
\lipsum[1-10]
\section{Unnumbered section}
\lipsum[1-10]
%
\resetsecnumdepth%
%
\chapter{Numbered chapter (bis)}
\lipsum[1-10]
\section{Numbered section (bis)}
\lipsum[1-10]
%
\setsecnumdepth{none}%
%
\chapter{Unnumbered chapter (bis)}
\lipsum[1-10]
\section{Unnumbered section (bis)}
\lipsum[1-10]
%
\end{document}
但是,为了让我的个人课程尽可能简单,我想提供传统语法(使用星号形式表示未编号的部分单元)和tocvsec2
包的功能。(事实上,重新定义命令就足够了\chapter
。)
我所有的尝试都失败了,例如:
\documentclass{book}
\usepackage{lipsum}
\usepackage{tocvsec2}
%
\makeatletter%
\let\chapter@ORI\chapter%
\renewcommand\chapter{%
\@ifstar{\starred@chapter}{\unstarred@chapter}%
}
\newcommand{\starred@chapter}{\setsecnumdepth{none}\chapter@ORI}%
\newcommand{\unstarred@chapter}{\resetsecnumdepth\chapter@ORI}%
\makeatother%
%
\begin{document}
%
\tableofcontents
%
\chapter{Numbered chapter}
\lipsum[1-10]
\section{Numbered section}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter}
\lipsum[1-10]
\section{Unnumbered section}
\lipsum[1-10]
%
\chapter{Numbered chapter (bis)}
\lipsum[1-10]
\section{Numbered section (bis)}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter (bis)}
\lipsum[1-10]
\section{Unnumbered section (bis)}
\lipsum[1-10]
%
\end{document}
或者:
\documentclass{book}
\usepackage{xpatch}
\usepackage{lipsum}
\usepackage{tocvsec2}
%
\makeatletter%
\xpretocmd{\@chapter}{\resetsecnumdepth}{}{}%
\xpretocmd{\@schapter}{\setsecnumdepth{none}}{}{}%
\makeatother%
\begin{document}
%
\tableofcontents
%
\chapter{Numbered chapter}
\lipsum[1-10]
\section{Numbered section}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter}
\lipsum[1-10]
\section{Unnumbered section}
\lipsum[1-10]
%
\chapter{Numbered chapter (bis)}
\lipsum[1-10]
\section{Numbered section (bis)}
\lipsum[1-10]
%
\chapter*{Unnumbered chapter (bis)}
\lipsum[1-10]
\section{Unnumbered section (bis)}
\lipsum[1-10]
%
\end{document}
您是否看到了重新定义命令的无星号和带星号形式的巧妙方法
\chapter
?
答案1
诀窍是制作\chapter*
调用原始的\chapter
。但是,一个必须修补\tableofcontents
,另一个必须列出制作命令,因为它们\chapter*
里面有。
\documentclass{book}
\usepackage{xparse,xpatch}
\usepackage{lipsum}
\usepackage{tocvsec2}
\let\ORIchapter\chapter
\RenewDocumentCommand\chapter{som}{%
\IfBooleanTF{#1}
{
\setsecnumdepth{none}%
}
{%
\resetsecnumdepth
}
\IfNoValueTF{#2}
{\ORIchapter{#3}}
{\ORIchapter[#2]{#3}}%
}
% we don't want \chapter* for \tableofcontents and similar lists
\xpatchcmd{\tableofcontents}{\chapter}{\ORIchapter}{}{}
\xpatchcmd{\listoffigures}{\chapter}{\ORIchapter}{}{}
\xpatchcmd{\listoftables}{\chapter}{\ORIchapter}{}{}
% populate the stack
\AtBeginDocument{\setsecnumdepth{none}}
\begin{document}
\tableofcontents
\chapter{Numbered chapter}
\lipsum[1-10]
\section{Numbered section}
\lipsum[1-10]
\chapter*{Unnumbered chapter}
\lipsum[1-10]
\section{Unnumbered section}
\lipsum[1-10]
\chapter{Numbered chapter (bis)}
\lipsum[1-10]
\section{Numbered section (bis)}
\lipsum[1-10]
\chapter*{Unnumbered chapter (bis)}
\lipsum[1-10]
\section{Unnumbered section (bis)}
\lipsum[1-10]
\end{document}
我认为,交替使用编号和未编号章节是一种不好的风格。如果引言应该不编号,则应放在 中\frontmatter
;如果引言在 中,\mainmatter
则应进行编号。
只有\backmatter
材料没有编号。否则不章节已编号。