在带星号和不带星号的 \chapter 命令前添加不同的内容

在带星号和不带星号的 \chapter 命令前添加不同的内容

对于使用个人类(从类继承)构建的文档的未编号部分单元book,我想要使用:

  • 不是相应命令的星号形式,
  • 而是tocvsec2\setsecnumdepth{none}\resetsecnumdepth 开关。

这有几个优点:

  1. 无需对未编号章节的每个部分、小节等使用星号形式,
  2. 不需要\addcontentsline{toc}{...}{...}对目录中出现的未编号部分单元使用神秘的命令,
  3. 未编号章节和部分的页眉没有任何问题(以星号标记的页眉是先前编号的章节和部分的页眉)。

以下两个 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材料没有编号。否则章节已编号。

相关内容