我想将零件编号和零件标题之间的间距设置为特定长度,以便它们之间的水平间距始终相同。
我找到了一个关于回忆录类的解决方案,
但这不适用于 scrreprt。
我知道我可以增加 tocnumwidth,但这会导致罗马编号部分的空间宽度不同。
以下是我的 MWE 及其结果:
\documentclass[openany,12pt]{scrreprt}
%-------Allgemeine Einstellungen--------------------
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
%------Verzeichnisse------------
\setcounter{tocdepth}{5} % fünf Ebenen statt drei im Inhaltsverzeichnis anzeigen
\setcounter{secnumdepth}{5} % fünf Ebenen sollen nummeriert werden
\usepackage{chngcntr}
\counterwithin*{chapter}{part}
%-------Verlinkungen-------
\usepackage[colorlinks]{hyperref} % Inhaltsverzeichnis anklickbar
\begin{document}
\clearpage
\pagenumbering{Roman} % römische Zahlen für Inhaltsverzeichnis etc.
\setcounter{page}{1}
%----------Inhaltsverzeichnis
\tableofcontents
\pagenumbering{arabic} % Arabische Zahlen für den Inhalt
\part{Erster Teil}
\chapter{Erstes Kapitel}
\part{Zweiter Teil}
\chapter{Noch nen Kaptiel}
\part{Dritter Teil}
\chapter{Noch so ein Kaptiel}
\end{document}
答案1
KOMA 通过 定义分段命令\DeclareSectionCommand
。部分的默认定义是
\DeclareSectionCommand[%
style=part,%
level=\m@ne,%
pagestyle=plain,%
tocstyle=part,%
toclevel=\m@ne,%
tocindent=\z@,%
tocnumwidth=2em%
]{part}
但是根据文档,您必须更改的长度tocnumwidth
。这可以通过完成\RedeclareSectionCommand
。但是您必须减去零件编号的宽度:
\documentclass[openany,12pt]{scrreprt}
\makeatletter
\newlength\parttocspacetemplength
\newcommand\parttocspaceI[1]{%
\sbox\@tempboxa{{#1}}%
\setlength{\global\parttocspacetemplength}{\wd\@tempboxa}%
\usebox\@tempboxa%
}
\RedeclareSectionCommand[%
tocentrynumberformat=\parttocspaceI,
tocnumwidth=\dimexpr3em+\parttocspacetemplength\relax,%
]{part}
\makeatother
%-------Allgemeine Einstellungen--------------------
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
%------Verzeichnisse------------
\setcounter{tocdepth}{5} % fünf Ebenen statt drei im Inhaltsverzeichnis anzeigen
\setcounter{secnumdepth}{5} % fünf Ebenen sollen nummeriert werden
\usepackage{chngcntr}
\counterwithin*{chapter}{part}
%-------Verlinkungen-------
\usepackage[colorlinks]{hyperref} % Inhaltsverzeichnis anklickbar
\begin{document}
\clearpage
\pagenumbering{Roman} % römische Zahlen für Inhaltsverzeichnis etc.
\setcounter{page}{1}
%----------Inhaltsverzeichnis
\tableofcontents
\pagenumbering{arabic} % Arabische Zahlen für den Inhalt
\part{Erster Teil}
\chapter{Erstes Kapitel}
\part{Zweiter Teil}
\chapter{Noch nen Kaptiel}
\part{Dritter Teil}
\chapter{Noch so ein Kaptiel}
\end{document}
答案2
另一种可能性是修补\addparttocentry
:
\usepackage{xpatch}
\xpatchcmd\addparttocentry
{\addtocentrydefault{part}{#1}{#2}}
{\ifstr{#1}{}
{\addtocentrydefault{part}{#1}{#2}}%
{\addtocentrydefault{part}{}{\texorpdfstring{#1\autodot\enskip}{}#2}}%
}
{}{\PatchFailed}
\RedeclareSectionCommand[
tocnumwidth=0pt
]{part}
请注意,\pagenumbering
将页码重置为 1。如果您在文档中使用此命令,请在\cleardoubleoddpage
其前面插入。然后新的页码从新的右页开始。(在您的 MWE 中,它从目录的最后一页开始。)
\counterwithin
包加载后另行使用hyperref
。(在您的 MWE 中,目录中的所有章节条目都链接到“Erstes Kapitel”。)
\documentclass[%
%open=any,% default for scrreprt and not needed for an onesided document
12pt
]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\setcounter{tocdepth}{5}
\setcounter{secnumdepth}{5}
\usepackage{chngcntr}
\usepackage{xpatch}
\xpatchcmd\addparttocentry
{\addtocentrydefault{part}{#1}{#2}}
{\ifstr{#1}{}
{\addtocentrydefault{part}{#1}{#2}}%
{\addtocentrydefault{part}{}{\texorpdfstring{#1\autodot\enskip}{}#2}}%
}
{}{\PatchFailed}
\RedeclareSectionCommand[
tocnumwidth=0pt
]{part}
\usepackage[colorlinks]{hyperref}
\counterwithin*{chapter}{part}% <- after hyperref is loaded
\begin{document}
%\cleardoubleoddpage% <- if there are pages before the Roman numbering
\pagenumbering{Roman}% <- resets the pagenumber to 1
\tableofcontents
\cleardoubleoddpage% <- added to ensure that the changed pagenumbering starts on a new right page
\pagenumbering{arabic}
\part{Erster Teil}
\chapter{Erstes Kapitel}
\part{Zweiter Teil}
\chapter{Noch nen Kapitel}
\part{Dritter Teil}
\chapter{Noch so ein Kapitel}
\end{document}