使用 titlesec 和 titletoc 时,在目录中包含带有子类条目的类编号

使用 titlesec 和 titletoc 时,在目录中包含带有子类条目的类编号

我正在尝试使用 titleclass 定义两个新类:savoir 和 subsavoir。

在目录中,我希望得到如下内容:

  • Savoir 1 -- 第一个知识标题
  • Savoir 1.a——第一个知识的第一个“子知识”。

我有:

  • Savoir 1 -- 第一个知识标题
  • Savoir a——第一个知识的第一个“子知识”。

它缺乏1.知识1.a

这是一个最小的例子:

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[explicit]{titlesec}
\usepackage[rightlabels]{titletoc}
\titlecontents{savoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bf Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
\titlecontents{subsavoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bf Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
  \contentsfinish

\makeatletter
  \renewcommand\@pnumwidth{0em}
\makeatother

\titleclass{\savoir}{straight}[\section]
\titleclass{\subsavoir}{straight}[\savoir]
\newcounter{savoir}
\newcounter{subsavoir}[savoir]
\renewcommand{\thesavoir}{\arabic{savoir}}
\renewcommand{\thesubsavoir}{\alph{subsavoir}}
\titleformat{\savoir}[hang]{\large\sf}{Savoir \thesavoir}{0.7em}{#1}
\titlespacing{\savoir}{0pt}{10pt}{5pt}
\titleformat{\subsavoir}{\large\sf}{Savoir \thesavoir\,\thesubsavoir}{0.7em}    {#1}
\titlespacing{\subsavoir}{0pt}{10pt}{5pt}

\begin{document}
\renewcommand{\contentsname}{Liste des savoirs}
\tableofcontents
\savoir{Premier savoir}
\lipsum[1]
\subsavoir{premier sous-savoir}
\lipsum[2]
\end{document}

我目前获得的目录

谢谢

答案1

习惯上,我们根据编号方案来定义层次结构。也就是说,\thesubsection包括部分\thesection\thesection包括部分\thechapter;等等。在您的例子中,您使用了两种不同的方法来表示分区编号。请更正这些以使其统一:

在此处输入图片描述

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[explicit]{titlesec}
\usepackage[rightlabels]{titletoc}
\titlecontents{savoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bfseries Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
\titlecontents{subsavoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bfseries Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
  \contentsfinish

\makeatletter
  \renewcommand\@pnumwidth{0em}
\makeatother

\titleclass{\savoir}{straight}[\section]
\titleclass{\subsavoir}{straight}[\savoir]
\newcounter{savoir}
\newcounter{subsavoir}[savoir]
\renewcommand{\thesavoir}{\arabic{savoir}}
\renewcommand{\thesubsavoir}{\thesavoir.\alph{subsavoir}}
\titleformat{\savoir}[hang]{\large\sffamily}{Savoir \thesavoir}{0.7em}{#1}
\titlespacing{\savoir}{0pt}{10pt}{5pt}
%\titleformat{\subsavoir}{\large\sffamily}{Savoir \thesubsavoir}{0.7em}{#1}
\titleformat{\subsavoir}{\large\sffamily}{Savoir \thesavoir\,\alph{subsavoir}}{0.7em}{#1}
\titlespacing{\subsavoir}{0pt}{10pt}{5pt}

\begin{document}
\renewcommand{\contentsname}{Liste des savoirs}
\tableofcontents
\savoir{Premier savoir}
\lipsum[1]
\subsavoir{premier sous-savoir}
\lipsum[2]
\end{document}

上面我注释掉了\subsavoir标题格式应该使用。

答案2

尝试这样做

\renewcommand{\thesubsavoir}{\thesavoir.\alph{subsavoir}}
\titleformat{\subsavoir}{\large\sf}{Savoir \thesubsavoir}{0.7em}    {#1}

完整代码

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[explicit]{titlesec}
\usepackage[rightlabels]{titletoc}
\titlecontents{savoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bf Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
\titlecontents{subsavoir}[0pt]{\addvspace{2pt\filright}}
  {\contentspush{\bf Savoir \thecontentslabel\ --\ }}
  {}{\titlerule*[0.8em]{.}\thecontentspage}
  \contentsfinish

\makeatletter
  \renewcommand\@pnumwidth{0em}
\makeatother

\titleclass{\savoir}{straight}[\section]
\titleclass{\subsavoir}{straight}[\savoir]
\newcounter{savoir}
\newcounter{subsavoir}[savoir]
\renewcommand{\thesavoir}{\arabic{savoir}}
\renewcommand{\thesubsavoir}{\thesavoir.\alph{subsavoir}}
\titleformat{\savoir}[hang]{\large\sf}{Savoir \thesavoir}{0.7em}{#1}
\titlespacing{\savoir}{0pt}{10pt}{5pt}
\titleformat{\subsavoir}{\large\sf}{Savoir \thesubsavoir}{0.7em}    {#1}
\titlespacing{\subsavoir}{0pt}{10pt}{5pt}

\begin{document}
\renewcommand{\contentsname}{Liste des savoirs}
\tableofcontents
\savoir{Premier savoir}
\lipsum[1]
\subsavoir{premier sous-savoir}
\lipsum[2]
\end{document}

相关内容