我正在尝试格式化toc
,但在水平间距和缩进方面却遇到了困难。
- 章节和部分标题的最长数字应该至少为,同时其他所有数字也应该相等
numsep
。1em
- 当使用
dynnumwidth
来实现所有级别的均等分离时,和toc
的缩进是不同的。它们应该与上一级的标题齐平,但手动调整它们不会产生准确的结果。sections
subsections
- 有没有办法调整距离后标题
part
?
梅威瑟:
\documentclass[10pt, oneside, numbers=noenddot, listof=totoc, toc=indentunnumbered]{scrbook}
\usepackage[osf]{newpxtext}
\usepackage{microtype}
\usepackage[left=32.5mm, right=25mm, top=25mm, bottom=20mm]{geometry}
\renewcommand*{\thepart}{\scshape\roman{part}}
\addtokomafont{chapterentry}{\normalfont\lsstyle\scshape}
\addtokomafont{partentry}{\normalsize\normalfont\lsstyle\scshape}
\DeclareTOCStyleEntries[raggedpagenumber=true, linefill=\qquad, pagenumberbox=\mbox]{tocline}{part, chapter, section, subsection}
\DeclareTOCStyleEntry[beforeskip=1em plus 1pt]{tocline}{part}
\DeclareTOCStyleEntries[numsep=1em, dynnumwidth]{tocline}{part, chapter}
\DeclareTOCStyleEntries[dynnumwidth, numsep=1em, indent=2em]{tocline}{section}
\DeclareTOCStyleEntries[dynnumwidth, numsep=1em]{tocline}{subsection}
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\chapter{test}
\part{test}
\chapter{test}
\section{Test}
\subsection{Test}
\part{test}
\part{test}
\end{document}
答案1
KOMA-Script 文档解释道:
如果 [
dynnumwidth
] 与样式同时激活tocline
,则该numwidth
属性指定最小值。如果先前的 LaTeX 运行确定同一级别的条目数的最大宽度加上的值numsep
大于此最小值,则将改用计算值。
也就是说,如果某一级别的任何数字超过给定的numwidth
,则将使用最长数字的实际宽度。这必然会破坏与下一节级别的对齐。为了实现对齐,您必须选择足够大的数字。为了使对齐成功,您当然也numwidth
必须进行调整。indent
\documentclass[10pt, oneside, numbers=noenddot, listof=totoc, toc=indentunnumbered]{scrbook}
\usepackage[osf]{newpxtext}
\usepackage{microtype}
\usepackage[left=32.5mm, right=25mm, top=25mm, bottom=20mm]{geometry}
\renewcommand*{\thepart}{\scshape\roman{part}}
\addtokomafont{chapterentry}{\normalfont\lsstyle\scshape}
\addtokomafont{partentry}{\normalsize\normalfont\lsstyle\scshape}
\DeclareTOCStyleEntries[
raggedpagenumber=true,
linefill=\qquad,
pagenumberbox=\mbox,
% dynnumwidth,
numsep=1em,
]{tocline}{part, chapter, section, subsection}
\DeclareTOCStyleEntry[beforeskip=1em plus 1pt]{tocline}{part}
\DeclareTOCStyleEntries[numwidth=2.5em]{tocline}{part, chapter}
\DeclareTOCStyleEntries[indent=2.5em, numwidth=3em]{tocline}{section}
\DeclareTOCStyleEntries[indent=5.5em, numwidth=3.5em]{tocline}{subsection}
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\chapter{test}
\part{test}
\chapter{test}
\section{Test}
\subsection{Test}
\part{test}
\part{test}
\end{document}
当然,这意味着您实际上根本不会使用该dynnumwidth
功能(除了认识到是否必须增加 的值numwidth
),因此不使用它可能会更容易。无论如何,您都必须对目录进行目视检查,以检查是否需要调整此值(以及indent
相应的值)。在我看来,最好将分隔设置为略小于 1 em,而不是让不同级别不对齐而没有注意到。
答案2
KOMA-Script 3.31 版引入了dynindent
条目样式的属性tocline
。如果dynindent
启用,该属性indent
指定条目的最小缩进。如果数字宽度和指定的级别缩进的总和indentfollows
较大,则将该总和用作缩进。默认情况下,indentfollows=section
设置为subsection
,indentfollows=subsection
设置为subsubsection
。对于 KOMA-Script 类,还额外indentfollows=chapter
设置了section
。
因此你可以使用
\documentclass[10pt, oneside, numbers=noenddot, listof=totoc, toc=indentunnumbered]{scrbook}[2020/07/22]% needs version 3.31 or newer
\usepackage[osf]{newpxtext}
\usepackage{microtype}
\usepackage[left=32.5mm, right=25mm, top=25mm, bottom=20mm]{geometry}
\renewcommand*{\thepart}{\scshape\roman{part}}
\addtokomafont{chapterentry}{\normalfont\lsstyle\scshape}
\addtokomafont{partentry}{\normalsize\normalfont\lsstyle\scshape}
\DeclareTOCStyleEntries[
raggedpagenumber=true,
linefill=\qquad,
pagenumberbox=\mbox,
numsep=1em
]{tocline}{part,chapter, section, subsection}% settings for all entry levels
\DeclareTOCStyleEntry[beforeskip=1em plus 1pt]{tocline}{part}
\DeclareTOCStyleEntries[numwidth=2.1em]{tocline}{part,chapter}% adjust numwidth for chapter and part manually
\DeclareTOCStyleEntries[dynnumwidth,dynindent]{tocline}{section,subsection}% adjust numwidth and indent automatically
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\chapter{test}
\part{test}
\chapter{test}
\section{Test}
\subsection{Test}
\part{test}
\part{test}
\end{document}
如果它们的值相同,您仍然需要手动调整numwidth
和part
。chapter
运行三次即可获得
关于 3.:在零件条目(或其他目录条目)下方没有插入额外的垂直空间。因此零件条目后的垂直距离无法更改。