如何对非数字部分的子部分进行编号?

如何对非数字部分的子部分进行编号?

为了对小节进行编号,我使用

\renewcommand*\thesubsection{\thesection.\arabic{subsection}}

它适用于普通编号部分。例如,如果我们使用

\section{A}  
\subsection{try}
\subsection{try2}

表明

1. A
1.1. try
1.2. try2

但是,如果某个部分没有编号,那么其中的子部分看起来会很奇怪。例如,如果我们写

\section*{A}
\subsection{try}
\subsection{try2}

我们得到

A
.1. try
.2. try

我该如何编写一个宏来自动判断:如果该节已编号,则将此编号添加到子节编号中;如果该节未编号,则我们直接对子节本身进行编号?例如,我想要获得

1. A
1.1. A1
1.2. A2

B
1. B1
2. B2

答案1

这在文档主体中可能有意义,但目录格式需要一些考虑。

下面我更新了\section工作方式。它根据条件*重新格式化计数器\thesubsection- 删除前置\thesection.或插入前置。

在此处输入图片描述

\documentclass{article}

\usepackage{xparse}

\let\oldsection\section
\RenewDocumentCommand{\section}{s o m}{%
  \IfBooleanTF{#1}
    {\oldsection*{#3}% \section*
     \renewcommand{\thesubsection}{\arabic{subsection}}}% Update subsection numbering
    {\IfNoValueTF{#2}% \section
     {\oldsection{#3}}% \section{..}
     {\oldsection[#2]{#3}}% \section[.]{..}
     \renewcommand{\thesubsection}{\thesection.\arabic{subsection}}% Update subsection numbering
    }%
  \setcounter{subsection}{-1}\stepcounter{subsection}% Reset all sub-counters beyond \subsection
}

% Add period after sectional numbers in document body and ToC
\makeatletter
\renewcommand{\@seccntformat}[1]{\csname the#1\endcsname.\quad}
\renewcommand{\numberline}[1]{\hb@xt@\@tempdima{#1.\hfil}}
\makeatother

\begin{document}

\tableofcontents

\section{A}
\subsection{First subsection}
\subsection{Second subsection}

\section*{B}
\subsection{Third subsection}
\subsection{Fourth subsection}

\section*{C}
\subsection{Fifth subsection}
\subsection{Sixth subsection}

\section{D}
\subsection{Seventh subsection}
\subsection{Eighth subsection}

\end{document}

相关内容