secnumdepth 和基于节的计数器的奇怪交互

secnumdepth 和基于节的计数器的奇怪交互

在以下 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}\subsectionExnum 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}最终将打印没有号码。

相关内容