在以下 MWE 中:
\documentclass{book}
\newcounter{exnum}[subsection]
\begin{document}
\chapter*{Chapter}
\section*{Section 1}
\subsection{Subsection A}
\setcounter{exnum}{1}
Exnum is \theexnum.
\subsection{Subsection B}
Exnum is \theexnum.
\end{document}
我得到了我期望的输出;即,在子部分 A 中打印的行是Exnum is 1
,而在子部分 B 中打印的行是Exnum is 0
。但是,在实际代码中,我不想打印子部分编号,因此我将 的两个出现都更改为\subsection
。\subsection*
然后输出由两个子部分组成。作为一种解决方法,从上面的代码开始,我在顶部(紧接着 documentclass 之后)Exnum is 1
添加了行,以防止打印子部分编号,但保留s 不加星号。再次输出在两个子部分中。\setcounter{secnumdepth}{1}
\subsection
Exnum is 1
这是怎么回事?这两种表现是同一种故障,还是不同的问题?还有,我不明白 secnumdepth 的作用是什么?我以为它只是阻止打印节号,但显然它的作用远不止于此。
答案1
好吧,如果子部分计数器没有增加(如果您使用\subsection*
或就会出现这种情况\setcounter{secnumdepth}{1}
),那么您的计数器将不会被重置。
使用该titlesec
包,您可以重新定义您的小节以抑制文档中的编号,但仍在内部增加计数器,因此在创建新的小节时仍会重置您的新计数器:
\documentclass{book}
\usepackage{titlesec}
\newcounter{exnum}[subsection]
\titleformat{\subsection}
{\normalfont\large\bfseries}{}{0pt}{}
\begin{document}
\chapter*{Chapter}
\section*{Section 1}
\subsection{Subsection A}
\setcounter{exnum}{1}
Exnum is \theexnum.
\subsection{Subsection B}
Exnum is \theexnum.
\end{document}
答案2
让它 \subsection
本身重置计数器:
\documentclass{book}
\let\SubSection\subsection
\def\subsection{\setcounter{exnum}{0}\SubSection}
\newcounter{exnum}
\begin{document}
\chapter*{Chapter}
\section*{Section 1}
\subsection*{Subsection A}
\setcounter{exnum}{1}
Exnum is \theexnum.
\subsection*{Subsection B}
Exnum is \theexnum.
\end{document}
答案3
改变数字的打印方式:
\makeatletter
\def\@seccntformat#1{%
\csname @seccntformat#1\expandafter\endcsname\csname the#1\endcsname\quad}
\def\@seccntformatsubsection#1#2{}
\makeatother
通常的定义是
\def\@seccntformat#1{\csname the#1\endcsname\quad}
我们只需在此之前添加一个新命令;由于我们只定义\@seccntformatsubsection
,当 LaTeX 尝试时,\@seccntformatsection
它会将其视为\relax
;当它想要排版一个小节时,它将(在第一次扩展后)显示为
\@seccntformatsubsection\thesubsection\quad
并将\@seccntformatsubsectio
吞噬这两个标记。设置\setcounter{secnumdepth}{2}
将“编号”子部分,但\subsection{A title}
最终将打印没有号码。