KOMA toc 相等 numsep 并精确缩进

KOMA toc 相等 numsep 并精确缩进

我正在尝试格式化toc,但在水平间距和缩进方面却遇到了困难。

  1. 章节和部分标题的最长数字应该至少为,同时其他所有数字也应该相等numsep1em
  2. 当使用dynnumwidth来实现所有级别的均等分离时,和toc的缩进是不同的。它们应该与上一级的标题齐平,但手动调整它们不会产生准确的结果。sectionssubsections
  3. 有没有办法调整距离标题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}

MWE 输出

当然,这意味着您实际上根本不会使用该dynnumwidth功能(除了认识到是否必须增加 的值numwidth),因此不使用它可能会更容易。无论如何,您都必须对目录进行目视检查,以检查是否需要调整此值(以及indent相应的值)。在我看来,最好将分隔设置为略小于 1 em,而不是让不同级别不对齐而没有注意到。

答案2

KOMA-Script 3.31 版引入了dynindent条目样式的属性tocline。如果dynindent启用,该属性indent指定条目的最小缩进。如果数字宽度和指定的级别缩进的总和indentfollows较大,则将该总和用作缩进。默认情况下,indentfollows=section设置为subsectionindentfollows=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}

如果它们的值相同,您仍然需要手动调整numwidthpartchapter

运行三次即可获得

在此处输入图片描述

关于 3.:在零件条目(或其他目录条目)下方没有插入额外的垂直空间。因此零件条目后的垂直距离无法更改。

相关内容