我正在上课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 章”等等。
我想对章节和小节做同样的事情。
使用titlesec
和titletoc
包
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}
,这样你只需要在排版章节标题时更改其外观。
以下是对您的设置的一些更改。但是,我一点也不喜欢章节和子章节标题的设置方式,但文档是您的。
没有重新定义
\thechapter
,\thesection
并且\thesubsection
已
\@makechapterhead
修补为打印,\Ordinalstring{chapter}
而不是\thechapter
。对一些代码进行整理。
\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
\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}
目录:
显示修改后的标题的内页: