我想在和subchapter
之间添加一个分段级别。我使用包中的命令。chapter
section
\titleclass
titlesec
根据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
打印子章节编号:
不定义选项{〈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
,但我认为它是类似的。