自定义目录中的章节编号

自定义目录中的章节编号

我正在上课report,我想自定义章节、节和小节的标题,并在文本和内容中在各自的标题前显示数字。

我的问题

我已经自定义了\thechapter\thesection并且\thesubsection像这样:

    \renewcommand{\thechapter}{\Ordinalstring{chapter}}
    \renewcommand{\thesection}{%
        \textls{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{9pt}{10.8pt}\selectfont%
            \Numberstring{chapter}.\numberstring{section}%
        }%
    }
    \renewcommand{\thesubsection}{%
        \textls[100]{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont%
            \arabic{chapter}.\arabic{section}.\arabic{subsection}%
        }%
    }

现在,对于目录,我希望这些计数器有不同的外观。也就是说,我希望我的索引看起来像这样:

Chapter 1
  Title of Chapter                                              thepage
  1.1
    Title of Section .......................................... thepage
    1.1.1
      Title of Subsection ..................................... thepage

对于章节,我已将定义中的 addcontentsline 声明更改\@chapter为如下形式:

    \addcontentsline{toc}{chapter}{\protect\numberline{Chapter \arabic{chapter}}\newline\hspace*{.7em} #1} % space is not exact for the time being 

因此在目录中我有“第 1 章”、“第 2 章”等等。

我想对章节和小节做同样的事情。

使用titlesectitletoc

titlesec经过一些研究,我找到了titletoc软件包并使用它们,我的代码如下:

    \documentclass[a4paper]{report}
    \usepackage[english]{babel}
    \usepackage[latin1]{inputenc}
    \usepackage[scaled=0.92]{helvet}
    \usepackage{mathptmx}
    \usepackage[T1]{fontenc}
    \usepackage{lipsum}
    \usepackage[tracking=true]{microtype}
    \usepackage{fmtcount}
    %
    \renewcommand{\thechapter}{\Ordinalstring{chapter}}
    \renewcommand{\thesection}{%
        \textls{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{9pt}{10.8pt}\selectfont%
            \Numberstring{chapter}.\numberstring{section}%
        }%
    }
    \renewcommand{\thesubsection}{%
        \textls[100]{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont%
            \arabic{chapter}.\arabic{section}.\arabic{subsection}%
        }%
    }
    \usepackage[rigidchapters,nobottomtitles*,pageatnewline]{titlesec}
        \titlespacing*{\section}
                      {0em}
                      {2em}
                      {0.5em}
        \titlespacing*{\subsection}
                      {0em}
                      {2em}
                      {0.5em}
        \titleformat{\section}
                    [display]
                    {\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}
                    {\thesection}
                    {1ex}
                    {}
                    {}
        \titleformat{\subsection}
                    [display]
                    {\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}
                    {\thesubsection}
                    {0em}
                    {}
                    {}
    %
    \usepackage{titletoc}
        \titlecontents{chapter}
                      [0em]
                      {\bfseries}
                      {Chapter \thecontentslabel\\*\hspace*{.7em}}
                      {}
                      {\hfill\contentspage}
        \titlecontents{section}
                      [1.5em]
                      {}
                      {\thecontentslabel\\*\hspace*{.7em}}
                      {}
                      {\titlerule*[.5pc]{.}\contentspage}
        \titlecontents*{subsection}
                      [3.8em]
                      {}
                      {\thecontentslabel\\*\hspace*{.7em}}
                      {}
                      {\titlerule*[.5pc]{.}\contentspage}
    %
    \begin{document}
    \chapter{Foo}

    \lipsum[1]

    \section{Bar}

    \lipsum[2]

    \subsection{Qux}

    \lipsum[3]

    \section{Quux}

    \lipsum[4]

    \subsection{Quux1}

    \lipsum[5]

    \chapter{foo}

    \section{bar}

    \lipsum[4]

    \subsection{qux}

    \lipsum[5]

    \tableofcontents
    \end{document}

这里我不想改变\thechapter目录的内容,只想改变章节和小节的内容(无论如何我可以改变目录的章节计数器,正如我在上面的\@chapter定义中所做的那样,因此,如上所述声明\titlecontents{}[]{}{}{}{}chapter\thecontentslabel包含章节的阿拉伯数字)。

我想过自定义\thecontentslabel或定义\numberline(在 的第 433 行titletoc.sty) \ttl@tocentry

据我理解,\numberline 它负责打印目录中的节和小节的数量,但我不知道如何重新定义它......

是否可以\thecontentslabel仅针对章节和小节进行重新定义?

请问,能否解释一下 的行为\thecontentslabel,特别是它的定义?

如果我尝试\thecontentslabel在之后声明\begin{document},为什么\LaTeX会给我这个错误信息?

! Undefined control sequence.
l.76 \thecontentslabel

一些尝试

我已尝试过这个:

    \newcommand{\originalthecontentslabel}{}
    \global\let\originalthecontentslabel\thecontentslabel
    \gdef\thecontentslabel#1{\originalcontentslabel{\arabic{#1}}}

但似乎没有被考虑\LaTeX。我认为这titletoc会覆盖我的重新定义(我曾尝试将其放在前面titletoc,然后放在后面,但没有被考虑)。

然后,我尝试这样做:

    \def\numberline##1{\global\ttl@labeltrue\gdef\thecontentslabel{\@arabic##1}}%

和这个:

    \def\numberline##1{\global\ttl@labeltrue\gdef\thecontentslabel{\arabic{##1}}}%

但它们不起作用并\LaTeX打印此错误消息:

! Missing number, treated as zero.
<to be read again>
\let
l.2 ...{\numberline {\Ordinalstringnum {1}}Foo}{1}
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)

概括

总之,

  • 如何编辑章节和小节计数器以便在目录中使用不同的数字格式而不使用titletoc
  • 如何使用上述物品titletoc(或其他合适的包装......)制作相同的东西?

希望我已经足够小心了!

答案1

这绝对是不是\thesection用格式化指令来定义是个好主意。另外,你还希望将\thechapter其扩展到\arabic{chapter},这样你只需要在排版章节标题时更改其外观。

以下是对您的设置的一些更改。但是,我一点也不喜欢章节和子章节标题的设置方式,但文档是您的。

  1. 没有重新定义\thechapter\thesection并且\thesubsection

  2. \@makechapterhead修补为打印,\Ordinalstring{chapter}而不是\thechapter

  3. 对一些代码进行整理。

\documentclass[a4paper]{report}
\usepackage[english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[scaled=0.92]{helvet}
\usepackage{mathptmx}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage[tracking=true]{microtype}
\usepackage{fmtcount}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@makechapterhead}
  {\thechapter}
  {\Ordinalstring{chapter}}
  {}{}
\makeatother

\usepackage[rigidchapters,nobottomtitles*,pageatnewline]{titlesec}

\titlespacing*{\section}
              {0em}
              {2em}
              {0.5em}
\titlespacing*{\subsection}
              {0em}
              {2em}
              {0.5em}
\titleformat{\section}
            [display]
            {\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}
            {\thesection}
            {1ex}
            {}
            {}
\titleformat{\subsection}
            [display]
            {\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}
            {\thesubsection}
            {0em}
            {}
            {}
%
\usepackage{titletoc}
\titlecontents{chapter}
              [0em]
              {\bfseries}
              {Chapter \thecontentslabel\\*\hspace*{.7em}}
              {}
              {\hfill\contentspage}
\titlecontents{section}
              [1.5em]
              {}
              {{\sffamily\thecontentslabel}\\*\hspace*{.7em}}
              {}
              {\titlerule*[.5pc]{.}\contentspage}
\titlecontents*{subsection}
              [3.8em]
              {}
              {{\sffamily\thecontentslabel}\\*\hspace*{.7em}}
              {}
              {\titlerule*[.5pc]{.}\contentspage}
%

\begin{document}
\chapter{Foo}

\lipsum[1]

\section{Bar}

\lipsum[2]

\subsection{Qux}

\lipsum[3]

\section{Quux}

\lipsum[4]

\subsection{Quux1}

\lipsum[5]

\chapter{foo}

\section{bar}

\lipsum[4]

\subsection{qux}

\lipsum[5]

\tableofcontents

\end{document}

在此处输入图片描述

在此处输入图片描述

答案2

下面是一个可能的解决方案titlesectocloft

  • \thechapter对、\thesection和的重新定义\thesubsection是在相应命令内部本地进行的,并且仅针对标题\titleformat

  • 为了更改 ToC 条目的格式,我使用了tocloft而不是titletoc因为前者可以更好地与之交互hyperref

代码:

\documentclass{book}
\usepackage{fmtcount}
\usepackage{microtype}
\usepackage{tocloft}
\usepackage{titlesec}

\newlength\mylen
\settowidth\mylen{\bfseries\cftchappresnum\cftchapaftersnum}
\addtolength\cftchapnumwidth{\mylen} 

\renewcommand\cftchapaftersnumb{\par\noindent}
\renewcommand\cftchappresnum{\chaptername~}

\renewcommand\cftsecaftersnumb{%
  \par\noindent\hspace*{-0.5\cftsecnumwidth}}
\renewcommand\cftsubsecaftersnumb{%
  \par\noindent\hspace*{-0.5\cftsubsecnumwidth}}

\cftsetindents{subsection}{\dimexpr0.5\cftsecnumwidth+0.5\cftsubsecnumwidth\relax}{1.5em}

\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\renewcommand{\thechapter}{\Ordinalstring{chapter}}
\chaptertitlename\ \thechapter}{20pt}{\Huge}

\titleformat{\section}[display]
  {\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}{\renewcommand{\thesection}{%
        \textls{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{9pt}{10.8pt}\selectfont%
            \Numberstring{chapter}.\numberstring{section}%
        }%
    }
\thesection}{1em}{}

\titleformat{\subsection}[display]
{\fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont}{\renewcommand{\thesubsection}{%
        \textls[100]{%
            \fontencoding{T1}\fontfamily{phv}\fontsize{11pt}{13.2pt}\selectfont%
            \arabic{chapter}.\arabic{section}.\arabic{subsection}%
        }%
    }
\thesubsection}{1em}{}

\begin{document}

\tableofcontents
\chapter{Test Chapter One}
\section{Test Section One One}
\subsection{Test Subsection One One One}
\chapter{Test Chapter Two}
\section{Test Section Two One}
\subsection{Test Subsection Two One One}
\section{Test Section Two Two}
\subsection{Test Subsection Two Two One}

\end{document}

目录:

在此处输入图片描述

显示修改后的标题的内页:

在此处输入图片描述

相关内容