我无法根据出版商的要求调整第二张目录的间距。
他们想要两个目录,一个在前面,只显示章节(没有章节号,很简单)。另一个在后面,显示章节和节。这就是 tocstyle 包的用途。但现在它变得棘手,对我来说太棘手了:
1) 章节编号的框应始终与该页面上的最高章节编号一样宽,并且点对齐。即
1.
11.
代替
1.
11.
因为我有超过 1000 个连续的部分,这些部分也应该适用于四位数字。
2) 章节编号和章节标题之间的空格应始终是固定长度,当前它正在减少,因此当达到第 1000 章节时它或多或少就会消失。
3)但是如果为数字和标题前的空间创建动态宽度,则悬挂缩进(我目前无法访问)也应该适应。
我目前的解决方案:由于这本书或多或少已经完成,我能够对具有固定值的分页符进行必要的更改。如果章节号小于 83,则应创建一个两位数的框,如果小于 958,则应创建一个三位数的框:
\newcommand{\numberbox}[1]{\makebox[2em][l]{\makebox[\ifnumless{#1}{83}{1.2em}{\ifnumless{#1}{958}{1.5em}{1.7em}}][r]{#1.}}}
但我不知道如何调整缩进。所以基本上如果有人能告诉我如何更改第二个目录的悬挂缩进,我会很高兴。但更通用的方法,即不使用固定 if 值的黑客,会是更好的选择。
\documentclass[openany]{scrbook}
\usepackage{blindtext}
\usepackage[tocfullflat]{tocstyle}
\usepackage[english]{babel}
\RedeclareSectionCommand[tocbeforeskip=0pt]{chapter}
\addtotoclist{dok}
\settocfeature[dok][0]{entryhook}{\usekomafont{chapterentry}}
\newcommand{\dokchap}[1]{%
\addtocontents{dok}{\vspace{\baselineskip}\protect\centering #1\par\vspace*{0.5\baselineskip}\nobreak}
}
\newcommand{\doksec}[2]{%
\addcontentsline{dok}{section}{\framebox[2em][l]{\framebox[1.2em][r]{#1.}}\hspace{1em}{#2}}
}
\begin{document}
\small\setcounter{tocdepth}{0}
\tableofcontents
\chapter{1901}\dokchap{1901}
\section{section one}
\doksec{\the\value{section}}{section one}
\blindtext
\section{section two}
\doksec{\the\value{section}}{section one}
\blindtext
\section{section three}
\doksec{\the\value{section}}{section three}
\blindtext
\section{section four}
\doksec{\the\value{section}}{section four}
\blindtext
\section{section five}
\doksec{\the\value{section}}{section five}
\blindtext
\section{section six}
\doksec{\the\value{section}}{section six}
\blindtext
\section{section seven}
\doksec{\the\value{section}}{section seven}
\blindtext
\section{section eight}
\doksec{\the\value{section}}{section eight}
\blindtext
\section{section nine}
\doksec{\the\value{section}}{section nine}
\blindtext
\section{section ten}
\doksec{\the\value{section}}{section ten}
\blindtext
\section{section eleven}
\doksec{\the\value{section}}{section eleven}
\blindtext
\section{\blindtext}
\doksec{\the\value{section}}{\blindtext}
\blindtext
\settocfeature{raggedhook}{\raggedright}
\setcounter{tocdepth}{1}
\addcontentsline{toc}{chapter}{Second table of contents}
\listoftoc[Second table of contents]{dok}
\end{document}
答案1
我不确定我是否理解了你想要做什么。你提到没有章节编号。所以我将更改为对\chapter
没有\addchap
章节编号的部分进行编号,并且不会在新章节中重置。
以下示例使用了 KOMA-Script 的可能性,tocbasic
并且需要最新的 KOMA-Script 版本。请注意,tocstyle
不再开发。它永远不会离开 alpha 状态。
\documentclass[open=any]{scrbook}
\usepackage{blindtext}% only for dummy text
\usepackage{showframe}% to show the page layout
\usepackage[english]{babel}
\RedeclareSectionCommand[
counterwithout=chapter
]{section}
% Settings for the first ToC
\BeforeStartingTOC[toc]{\value{tocdepth}=\chaptertocdepth}
\DeclareTOCStyleEntry[
beforeskip=0pt,
entryformat=\normalfont,
pagenumberformat=\normalfont,
linefill=\TOCLineLeaderFill
]{chapter}{chapter}
% Settings for the second ToC
\newcommand*\secondcontentsname{\contentsname}
\providecaptionname{english}{\secondcontentsname}{Second table of contents}
\DeclareNewTOC[listname=\secondcontentsname]{dok}
\BeforeStartingTOC[dok]{%
\addtocentrydefault{chapter}{}{\secondcontentsname}%
\value{tocdepth}=\sectiontocdepth%
\DeclareTOCStyleEntry[
beforeskip=\baselineskip,
entryformat=\normalfont\centering,
pagenumberformat=\nullfont,
linefill={},
]{chapter}{chapter}%
}
\DeclareTOCStyleEntry[
onstarthigherlevel=\vspace*{0.5\baselineskip}\nobreak,
indent=0pt,
entryformat=\def\autodot{.},
entrynumberformat=\sectionnumberbox,
numwidth=1.8em,
]{section}{section}
\newcommand*\sectionnumberbox[1]{\hfill #1\hspace{.4em}}
\usepackage{xpatch}
\xapptocmd\addchaptertocentry{%
\addxcontentsline{dok}{chapter}{#2}% add chapters to the second ToC
}{}{\PatchFailed}
\xapptocmd\addsectiontocentry{%
\addxcontentsline{dok}{section}[#1]{#2}% add sections to the second ToC
%
\ifnum \value{section}=97% adjust numwidth for larger page numbers; must be done manually
\addtocontents{dok}{\protect\DeclareTOCStyleEntry[numwidth=2.3em]{section}{section}}%
\fi
%
}{}{\PatchFailed}
\begin{document}
\tableofcontents
\addchap{1901}
\section{section one}
\blindtext
\section{section two}
\blindtext
\section{section three}
\blindtext
\section{section four}
\blindtext
\section{section five}
\blindtext
\section{section six}
\blindtext
\section{section seven}
\blindtext
\section{section eight}
\blindtext
\section{section nine}
\blindtext
\section{section ten}
\blindtext
\section{section eleven}
\blindtext
\section{\blindtext}
\Blindtext[2]
\setcounter{section}{96}% only for the example
\section{section 97}
\blindtext
\addtocontents{dok}{\protect\clearpage}% only for the example
\section{section 98}
\blindtext
\section{section 99}
\blindtext
\section{section 100}
\blindtext
\section{\blindtext}
\blindtext
\listoftoc{dok}
\end{document}
结果: