使用 titleclass 和 tocdepth 添加分段级别

使用 titleclass 和 tocdepth 添加分段级别

我想在和subchapter之间添加一个分段级别。我使用包中的命令。chaptersection\titleclasstitlesec

根据titlesec文档,\titleclass{\subchapter}{straight}[\chapter]应将级别设置subchapter为 1,并将以下级别增加 1(section级别 2、subsection级别 3 等)。

但是,以下示例:

\documentclass{book}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage{titlesec}
\usepackage{titletoc}

\titleclass{\subchapter}{straight}[\chapter]
\newcounter{subchapter}
\titleformat{\subchapter}[block]{}{}{0pt}{}
\titlespacing{\subchapter}{1pc}{*4}{*2.3}
\titlecontents{subchapter}[1.5em]{}{}{\hspace*{-2.3em}}{\titlerule*[0.75pc]{.}\contentspage} %bad formatting, but only here to produce a content line in ToC

\begin{document}
\setcounter{tocdepth}{1}
\tableofcontents

\chapter{Chapter one}

\subchapter{Subchapter one}

\section{Section one}
\subsection{A subsection}

\section{Section two}

\end{document}

subchapter生成一个显示和的ToC section,这意味着的级别section仍然等于 1。

我也尝试添加

\makeatletter
\def\toclevel@section{2}
\makeatother

就像建议的那样如何在 \subsubsection 下添加带有标题的额外层级,但它什么也不做。

我错过了什么?

请注意,目前,我不关心目录的格式,以后可以自己管理,我只对不同章节标题的级别感兴趣。

答案1

基本命令\titlecontents定义在titlesec包装为(见第 14 页):

\titlecontents{〈section〉}[〈left〉]{〈above-code〉}{〈numbered-entry-format〉}{〈numberless-entry-format〉}{〈filler-page-format〉}[〈below-code〉

在您的例子中,选项{〈numbered-entry-format〉}为“空”,也就是说,它似乎未定义。因此,编译后我的输出不显示任何子章节编号:

在此处输入图片描述

\contentslabel或者\thecontentslabel打印子章节编号:

  • \contentslabel{2.3em}

    在此处输入图片描述

  • \thecontentslabel\enspace

    在此处输入图片描述

不定义选项{〈numbered-entry-format〉}而是将其与宏结合\dottedcontents,它还会打印子章节编号:

在此处输入图片描述

尽管如此,在所有情况下,水平都存在问题;但手册说(第 10 页):

如果章节级别为 0,则子章节级别为 1;下面的级别增加一级(章节为 2,小节为 3,依此类推)。

GitHub这个问题在\titleclass 不会增加以下级别该书的作者哈维尔·贝佐斯 (Javier Bezos) 仍未公开该书\titlsec




代码:

\documentclass{book}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage{titlesec}
\usepackage{titletoc}

\titleclass{\subchapter}{straight}[\chapter]
\newcounter{subchapter}
\titleformat{\subchapter}[block]{}{}{0pt}{}
\titlespacing{\subchapter}{1pc}{*4}{*2.3}

%------------ together
\titlecontents{subchapter}[1.5em]{}{}{\hspace*{-2.3em}}{\titlerule*[0.75pc]{.}\contentspage} %bad formatting, but only here to produce a content line in ToC
\dottedcontents{subchapter}[1cm]{}{2.3em}{1pc}
%------------

%------with \contentslabel ------
%\titlecontents{subchapter}[1.5em]{}{\contentslabel{2.3em}}{\hspace*{-2.3em}}{\titlerule*[0.75pc]{.}\contentspage}

%------with \thecontentslabel ------
%\titlecontents{subchapter}[1.5em]{}{\thecontentslabel\enspace}{\hspace*{-2.3em}}{\titlerule*[0.75pc]{.}\contentspage}

\begin{document}
    \setcounter{tocdepth}{1}
    \tableofcontents

    \chapter{Chapter one}

    \subchapter{Subchapter one}

    \section{Section one}
    \subsection{A subsection}

    \section{Section two}
\end{document}

答案2

如果使用标准 LaTeX\tableofcontents构造(而不是加载titletoc),我已经解决了这个问题。我的结论是,通过插入新的节级别titlesec会改变级别secnumdepth,但不会影响目录命令。

以下是我的解决方案:

\documentclass{book}
\usepackage{titlesec}
%\usepackage{titletoc}

\titleclass{\subchapter}{straight}[\chapter]
\newcounter{subchapter}
\titleformat{\subchapter}[block]{}{}{0pt}{}
\titlespacing{\subchapter}{1pc}{*4}{*2.3}

\makeatletter
\newcommand{\l@subchapter}{\@dottedtocline{1}{1.5em}{2.3em}}

% The following redefines the \l@section so that \tableofcontents thinks
% that a section has Level 2, rather than Level 1.
\renewcommand{\l@section}{\@dottedtocline{2}{1.5em}{2.3em}}

\makeatother

\setcounter{tocdepth}{1}

\begin{document}
\tableofcontents
\chapter{Chapter one}
\subchapter{Subchapter one}
\section{Section one}
\subsection{A subsection}
\section{Section two}

\end{document}

如果您使用的话,我不知道修正是什么titletoc,但我认为它是类似的。

相关内容