使用子节范围进行节编号

使用子节范围进行节编号

好吧,这可能是一个非常规的问题。

我想使用小节(或由于格式原因的子小节)的范围作为我的章节编号。

因此对于:

\section{First section}
\subsubsection{\S1}
\subsubsection{\S2}
\subsubsection{\S3}

我想要获取章节标题和目录条目:

§1 - §3 First section

因此,基本上使用节的第一个(子)小节的文本和节的最后一个(子)小节的文本作为显示的部分“编号”。

如果不能自动完成,我不介意在每个部分的开头明确声明这个数字。

答案1

您的问题由几个可区分的子问题组成:

  1. subsubsections在班级里编号book\setcounter{secnumdepth}{3}

  2. 连续编号subsubsections:这可以使用remreset包来完成,以防止计数器重置subsubsection

  3. 要计算每章的内容,可以使用subsubsections以下包xcntperchap

  4. 为了格式化sectionsubsubsection标题,我使用了titlesec


\documentclass{book}

% numbered subsubsections in book class
\setcounter{secnumdepth}{3}

% number subsubsections continiously
\usepackage{remreset}
\makeatletter
    \@removefromreset{subsubsection}{chapter}
    \@removefromreset{subsubsection}{section}
    \@removefromreset{subsubsection}{subsection}
\makeatother

% count subsubsections per chapter
\usepackage{xcntperchap}
\RegisterTrackCounter{section}{subsubsection}

% format subsubsection titles
\usepackage[explicit]{titlesec}
\titleformat{\subsubsection}{\bfseries}{%
    \S \arabic{subsubsection}
}{0pt}{}

% Format section
\newcounter{start}
\newcounter{stop}

\titleformat{\section}{\bfseries}{%
    \setcounter{start}{\value{subsubsection}}%
    \addtocounter{start}{1}%
    \setcounter{stop}{\ObtainTrackedValueExp[\value{section}]{section}{subsubsection}}%
    \addtocounter{stop}{\value{start}}%
    \addtocounter{stop}{-1}%
    \ifnum\ObtainTrackedValueExp[\value{section}]{section}{subsubsection}>0
        \S \arabic{start} -- \S \arabic{stop}
    \fi
    #1
}{0pt}{}

\begin{document}

\section{First section}
\subsubsection{} 
\subsubsection{} 
\subsubsection{} 

\section{Second section}
\subsubsection{} 
\subsubsection{} 

\section{Third section}

\end{document}

在此处输入图片描述

答案2

我解决了这个问题,引入了自定义计数器

\newcounter{clause}
\newcounter{sectionstart}
\newcounter{sectionend}

\begin{document}
\setcounter{sectionstart}{\value{clause}}
\section*{Section 1}
\refstepcounter{sectionstart}
\refstepcounter{clause}
\subsubsection{\textbf{\S\arabic{clause}}}

\refstepcounter{clause}
\subsubsection{\textbf{\S\arabic{clause}}}

\setcounter{sectionend}{\value{clause}}
\addcontentsline{toc}{section}{\S\arabic{sectionstart}\enspace\textendash\enspace\S\arabic{sectionend}\quad Section 1}
\end{document}

虽然此解决方案由于在最后一个子节之后添加内容行而在目录中引入了错误的页码。我不知道如何修复该错误锚点,因此我决定只使用第一个子句,并将表示“及以下”的德语“ff。”附加到目录中。

sectionstart 计数器只是为了提高可读性,如果将该部分的 ToC 代码移至第一个子句,则可以跳过该计数器。

\newcounter{clause}
\newcounter{sectionstart}

\begin{document}
\setcounter{sectionstart}{\value{clause}}
\refstepcounter{sectionstart} % increase by 1 as section should have at least 1 clause
\section*{Section 1}
\addcontentsline{toc}{section}{\S\arabic{sectionstart}\space ff.\enspace Section 1}

\refstepcounter{clause}
\subsubsection{\textbf{\S\arabic{clause}}}

\refstepcounter{clause}
\subsubsection{\textbf{\S\arabic{clause}}}

\end{document}

相关内容