我有一篇包含一些章节、所有索引和附录的文本。当我在开头打印目录时,附录的标题太长,并且与标题重叠,如下所示:
我尝试用以下方法解决这个问题
\DeclareTOCStyleEntry[dynnumwidth=true]{tocline}{section}
但这会使每个数字的宽度都变成最大的数字宽度,看起来确实不太好看:
如您所见,第一个的间距现在长得令人难以置信。我知道标题都位于同一起点是有原因的,但对我来说这真的无关紧要,因为索引标题最终将两个章节(视觉上)分开。那么有没有办法告诉目录仅从特定点调整宽度?MWE:
\documentclass[pdftex,a4paper,halfparskip, 11pt]{scrartcl}
%\DeclareTOCStyleEntry[dynnumwidth=true]{tocline}{section} %Uncomment to active adjustment
\begin{document}
\tableofcontents
\newpage
\section{Normal section}
\renewcommand\thesection{Appendix~\Alph{section}}
\setcounter{section}{0}
\section{This is Appendix}
\end{document}
答案1
您的 MWE 发出警告:
Class scrartcl 警告:您使用了过时的选项halfparskip
。使用此选项表示文档已过时,并且使用 更改兼容级别parskip=half,version=first, enabledeprecatedfontcommands
可能会导致进一步的警告。如果您不想这样,只需将选项替换halfparskip
为parskip=half
。
为了避免出现警告并切换到version=first
使用parskip=half
!
选项a4paper
和11pt
是默认的,pdftex
不需要选项。
不要重新定义\thesection
。使用\appendix
。之后重新定义并\sectionformat
在TOC 中添加for 部分。\sectionmarkformat
\appendix
dynnumwidth
\appendix
\providecommand{\appendixname}{Appendix}
\newcommand{\entrywithprefixformat}[2]{#1\enskip#2}
\renewcommand{\sectionformat}{\appendixname~\thesection\autodot\enskip}
\renewcommand{\sectionmarkformat}{\appendixname~\thesection\autodot\enskip}
\addtocontents{toc}{%
\protect\DeclareTOCStyleEntry[
entrynumberformat=\protect\entrywithprefixformat{\appendixname},
dynnumwidth
]{tocline}{section}
}
例子:
\documentclass[parskip=half]{scrartcl}% <- changed!!
\usepackage{blindtext}% only for dummy text
\providecommand{\appendixname}{Appendix}
\newcommand{\entrywithprefixformat}[2]{#1\enskip#2}
\AddToHook{cmd/appendix/after}{%
\renewcommand{\sectionformat}{\appendixname~\thesection\autodot\enskip}%
\renewcommand{\sectionmarkformat}{\appendixname~\thesection\autodot\enskip}%
\addtocontents{toc}{%
\protect\DeclareTOCStyleEntry[
entrynumberformat=\protect\entrywithprefixformat{\appendixname},
dynnumwidth
]{tocline}{section}%
}%
}
\begin{document}
\tableofcontents
\clearpage
\blinddocument\blinddocument
\appendix
\blinddocument\blinddocument
\end{document}
还可以为附录中的章节定义自己的条目。
例子:
\documentclass[parskip=half]{scrartcl}% <- changed!!
\usepackage{blindtext}% only for dummy text
\providecommand{\appendixname}{Appendix}
\newcommand{\entrywithprefixformat}[2]{#1\enskip#2}
\DeclareTOCStyleEntry[
level:=section,
beforeskip:=section,
indent:=section,
numwidth:=section,
dynnumwidth,
entryformat=\usekomafont{sectionentry},
entrynumberformat=\entrywithprefixformat{\appendixname}
]{tocline}{appendixsection}
\AddToHook{cmd/appendix/after}{%
\renewcommand{\sectionformat}{\appendixname~\thesection\autodot\enskip}%
\renewcommand{\sectionmarkformat}{\appendixname~\thesection\autodot\enskip}%
\renewcommand{\addsectiontocentry}[2]{\addtocentrydefault{appendixsection}{#1}{#2}}%
}
\begin{document}
\tableofcontents
\clearpage
\blinddocument\blinddocument
\appendix
\blinddocument\blinddocument
\end{document}
结果和上面一样。
答案2
我简要地查看了该类,scrartcl
但找不到如何实现您想要的功能。不幸的是,我scrartcl
不喜欢该tocloft
软件包,它提供了各种调整 ToC、LoF 和 LoT 的方法。这是article
您的 MWE 版本。
[![% tocappspaceprob.tex SE 642491
%\documentclass\[pdftex,a4paper,halfparskip, 11pt\]{scrartcl}
\documentclass\[pdftex,a4paper,halfparskip, 11pt\]{article}
%\DeclareTOCStyleEntry\[dynnumwidth=true\]{tocline}{section} %Uncomment to active adjustment
\usepackage{tocloft}
\begin{document}
\tableofcontents
\newpage
\section{Normal section}
\renewcommand\thesection{Appendix~\Alph{section}}
\setcounter{section}{0}
%%%%% increase space for Appendix ToC numbers
\addtocontents{toc}{\addtolength{\cftsecnumwidth}{5pc}}
\section{This is Appendix}
\end{document}][1]][1]
也许您可以在scrartcl
手册中找到一些内容,使您能够更改特定类型的 ToC 条目的数字宽度。