遵循最少的文档:
\documentclass{report}
\begin{document}
\renewcommand*\thechapter{\Roman{chapter}}
\tableofcontents
\setcounter{chapter}{6} % Problem starts at chapter 7
\chapter{Seven}
\chapter{Eight}
\section{Eight-one}
\section{Eight-two}
\end{document}
产生以下输出(为方便起见,将其剪切成合适的大小):
显然,章节(和部分)标题与章节(部分)编号紧密相关。对于之前的章节编号,这不是问题,因为所有章节标题都与同一列对齐,并且 I–VI 编号足够窄。
(无论文档类型如何,都会发生相同的情况,我实际上使用的scrreprt
结果相同。)
我该如何预防?
答案1
您还可以使用该tocstyle
包,它是 KOMA-script 的一部分:
\documentclass[pagesize]{scrreprt}
\usepackage[tocindentauto]{tocstyle}
\usetocstyle{KOMAlike} %the previous line resets it
\begin{document}
\renewcommand*{\thechapter}{\Roman{chapter}}
\tableofcontents
\setcounter{chapter}{6} % Problem starts at chapter 7
\chapter{Seven}
\chapter{Eight}
\section{Eight-one}
\section{Eight-two}
\end{document}
(编译两次)
答案2
为了记录,我最终使用了tocloft
以下包
\usepackage[titles]{tocloft}
(选项,titles
因为我想要从包中得到的只是操纵内容表行的空间;标题仍然应该使用标准 LaTeX 方法呈现)。
\renewcommand*\cftchapnumwidth{2em}
\renewcommand*\cftsecnumwidth{3em}
也就是说,改变内容行的显示方式可能更合适,以便只显示章节编号,而不是整个“chapter.section”编号。
答案3
自 KOMA-Script 版本 3.20 起,有选项可以更改目录或列表条目的样式。您可以使用
\RedeclareSectionCommands[tocdynnumwidth]{chapter,section}
要得到
或者
\RedeclareSectionCommand[tocnumwidth=2.3em]{chapter}
\RedeclareSectionCommand[tocindent=2.3em,tocnumwidth=3.2em]{section}
代码:
\documentclass{scrreprt}[2016/05/10]% needs version 3.20 or newer
\RedeclareSectionCommand[tocnumwidth=2.3em]{chapter}
\RedeclareSectionCommand[tocindent=2.3em,tocnumwidth=3.2em]{section}
\renewcommand*\thechapter{\Roman{chapter}}
\begin{document}
\tableofcontents
\setcounter{chapter}{6} % Problem starts at chapter 7
\chapter{Seven}
\chapter{Eight}
\section{Eight-one}
\section{Eight-two}
\end{document}
也可以将包tocbasic
(KOMA-Script 包的一部分)与标准类一起使用。然后您可以使用
\usepackage{tocbasic}[2017/01/03]% needs version 3.22
\DeclareTOCStyleEntry[dynnumwidth]{tocline}{chapter}
\DeclareTOCStyleEntry[dynnumwidth]{tocline}{section}
或者
\usepackage{tocbasic}[2016/05/10]
\DeclareTOCStyleEntry[numwidth=2.6em]{tocline}{chapter}
\DeclareTOCStyleEntry[indent=2.6em,numwidth=3.2em]{tocline}{section}
代码:
\documentclass{report}
\renewcommand*\thechapter{\Roman{chapter}}
\usepackage{tocbasic}[2016/05/10]
\DeclareTOCStyleEntry[numwidth=2.6em]{tocline}{chapter}
\DeclareTOCStyleEntry[indent=2.6em,numwidth=3.2em]{tocline}{section}
\begin{document}
\tableofcontents
\setcounter{chapter}{6} % Problem starts at chapter 7
\chapter{Seven}
\chapter{Eight}
\section{Eight-one}
\section{Eight-two}
\end{document}
答案4
我将提供一个使用的示例titletoc
来解决这个问题。它需要加载eqparbox
包才能自动对齐章节标题、节标题等。:
\documentclass{report}
\usepackage[showframe, nomarginpar]{geometry}
% Font Style
\usepackage{eqparbox}
\usepackage{titletoc}
\titlecontents{chapter}[0em]{\vspace{.25\baselineskip}}
{\eqparbox{ch}{\bfseries\thecontentslabel}\enspace}{}
{\hspace{.5em}\hfill\contentspage}
\titlecontents{section}[0em]{\vspace{.25\baselineskip}}
{\hskip\eqboxwidth{ch}{}\enspace\eqparbox{sec}{\thecontentslabel}\enspace}{}
{\hspace{.5em}\titlerule*[10pt]{$\cdot$}\contentspage}
\begin{document}
\renewcommand*\thechapter{\Roman{chapter}}
\tableofcontents
\setcounter{chapter}{6} % Problem starts at chapter 7
\chapter{Seven}
\chapter{Eight}
\section{Eight-one} \thesection\setcounter{section}{99}
\section{Eight-hundred}
\end{document}