Использование диапазона подразделов для нумерации разделов

Использование диапазона подразделов для нумерации разделов

Ладно, это может быть нетрадиционный вопрос.

Я хочу использовать диапазон подразделов (или подподразделов для целей форматирования) в качестве номера раздела.

Таким образом, для:

\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. Для форматирования sectionзаголовков subsubsectionи я использовал 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}

Хотя это решение вводит неправильные номера страниц в ToC из-за addcontentsline после последнего подподраздела. Я не знал, как исправить этот неправильный якорь, поэтому решил просто использовать первое предложение и добавить немецкое "ff." для "и следующее" в ToC.

Счетчик sectionstart нужен только для удобства чтения и может быть пропущен, если код оглавления раздела перенести в первое предложение.

\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}

Связанный контент