第二张目录和间距

第二张目录和间距

我无法根据出版商的要求调整第二张目录的间距。

他们想要两个目录,一个在前面,只显示章节(没有章节号,很简单)。另一个在后面,显示章节和节。这就是 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}

结果:

在此处输入图片描述

相关内容