将目录添加到带有虚线前导符和页码的目录中,同时省略其他每个条目的页码

将目录添加到带有虚线前导符和页码的目录中,同时省略其他每个条目的页码

使用scrbook

我已从所有编号章节中删除了前导点和页码,因此只有未编号的章节才有它们(例如致谢、摘要、图表列表、表格列表等)。我在序言中使用了

\setkomafont{chapterentrypagenumber}{\nullfont}
\renewcommand\addchaptertocentry[2]{%
 \IfArgIsEmpty{#1}
  {\addtocontents{toc}
   {\protect\begingroup
    \protect\setkomafont{chapterentrypagenumber}{}%
    \protect\KOMAoptions{chapterentrydots}%
   }%
   \addtocentrydefault{chapter}{}{#2}%
   \addtocontents{toc}{\protect\endgroup}%
  }
  {\addtocentrydefault{chapter}{#1}{#2}}%
}

一切都很顺利,直到我被要求在目录中添加 ToC 条目,并添加前导点和页码。使用\addcontentsline{toc}{chapter}{Table of Contents}puts ToC in Table Contents没有它们——我猜是因为上面的代码。我需要无前导点编号的章节,但我还需要带有前导点和页码的目录条目。感谢任何帮助。

答案1

使用scrbook\setuptoc{toc}{totoc}此命令由 KOMA-Script 包提供tocbasic

\documentclass{scrbook}

\setuptoc{toc}{totoc}

\setkomafont{chapterentrypagenumber}{\nullfont}
\renewcommand\addchaptertocentry[2]{%
  \IfArgIsEmpty{#1}
  {\addtocontents{toc}
    {\protect\begingroup
    \protect\setkomafont{chapterentrypagenumber}{}%
    \protect\KOMAoptions{chapterentrydots}%
    }%
    \addtocentrydefault{chapter}{}{#2}%
    \addtocontents{toc}{\protect\endgroup}%
  }
  {\addtocentrydefault{chapter}{#1}{#2}}%
}

\begin{document}
\tableofcontents
\chapter{Test}
\end{document}

结果:

在此处输入图片描述


https://tex.stackexchange.com/a/391849/43317并重新定义\contentsname

\documentclass[
  12pt,a4paper,
  chapterprefix=true,% chapterprefixline does the same
  headings=optiontoheadandtoc,
  oneside
]{scrbook}
\usepackage[a4paper,margin=1in]{geometry}
\usepackage{lipsum}
\usepackage[T1]{fontenc}% <- added
\usepackage{mathptmx}

\usepackage{xpatch}% needed to path \addchaptertocentry

% Style Table of Content.
\setuptoc{toc}{totoc}
\setkomafont{chapterentrypagenumber}{\nullfont}
\newcommand\chapterentrynumberformat[1]{\MakeUppercase\chapapp\ #1\kern 0.25em---\kern 0.25em}
\xpatchcmd{\addchaptertocentry}
  {\addtocentrydefault{chapter}{#1}{#2}}
  {\IfArgIsEmpty{#1}
    {\addtocontents{toc}
     {\protect\begingroup
      \protect\setkomafont{chapterentrypagenumber}{}%
      \protect\KOMAoptions{chapterentrydots}%
     }%
     \addtocentrydefault{chapter}{}{\MakeUppercase{#2}}%
     \addtocontents{toc}{\protect\endgroup}%
    }
    {\addtocentrydefault{chapter}{}{\protect\chapterentrynumberformat{#1}\MakeUppercase{#2}}}%
  }{}{\PatchFailed}
\renewcommand\contentsname{Table Of Contents}
%% Document Parts %%
\begin{document}
\frontmatter
\pagestyle{plain}
\tableofcontents
\addchap{ABSTRAK} % Abstract in language other than English
\lipsum[1]
\addchap[tocentry=\textit{ABSTRACT}]{ABSTRACT} % Abstract in English, must be shown italicised in ToC
\lipsum[2]
\mainmatter
\addchap{SOMESTUFFS}
\lipsum[3]
\chapter{FOO}
\section{Bar}
\lipsum[4]
\end{document}

在此处输入图片描述

答案2

显然,您希望将目录添加为目录条目,并在排版上对其进行不同的处理,这是有道理的。但是,您的格式指南是有偏见的(在我看来)。包括页码在我看来似乎很模糊。

但是,您的出发点非常正确。您需要手动包含条目:但不使用\addcontentsline。这将采用其他每个 ToC 条目使用的格式 - 这是您试图避免的。有一个更通用的工具可以将材料添加到 ToC,即写入文件,.toc这是名称类似的\addtocontents命令。您可以像

\addtocontents{toc}{\textbf{\contentsname}\dotfill\thepage\par}

为了确保页码正确,应该使用 来获取页码\pageref,当然,\lable在 之前要加上\tableofcontents。这可以通过修补\tableofcontents序言中的宏来实现,而文档主体保持不变 - 无论如何,这很方便。

\makeatletter
\let\latex@tableofcontents\tableofcontents
\def\tableofcontents{%
  \label{chap:toc}%
  \latex@tableofcontents
  \addtocontents{toc}{%
    \bgroup\sffamily\textbf{\contentsname}\dotfill\pageref{chap:toc}\egroup\par
  }%
}
\makeatother

展示

请注意,我在示例中使用了\frontmatter\mainmatter(见下文)。它们确保前文和正文的页码不同,如果您想要为 ToC-ToC 条目设置页码,那么这样做更有意义。如果您需要始终使用罗马数字,则可以省略这些命令。

此外,您现在可以使用上述解决方案来创建不同的格式:

示例_增强

\documentclass{scrbook}
\usepackage[x11names]{xcolor}

\setkomafont{chapterentrypagenumber}{\nullfont}
\renewcommand\addchaptertocentry[2]{%
  \IfArgIsEmpty{#1}
  {\addtocontents{toc}
    {\protect\begingroup
    \protect\setkomafont{chapterentrypagenumber}{}%
    \protect\KOMAoptions{chapterentrydots}%
    }%
    \addtocentrydefault{chapter}{}{#2}%
    \addtocontents{toc}{\protect\endgroup}%
  }
  {\addtocentrydefault{chapter}{#1}{#2}}%
}

\makeatletter
\newcommand*\addspecialchaptertotoc[2][\thepage]{%
  \addtocontents{toc}{\vskip.25pc\bgroup{\color{Coral3}\MakeUppercase{#2}}\hfill#1\egroup\par}%
}
\let\latex@tableofcontents\tableofcontents
\def\tableofcontents{%
  \label{chap:toc}
  \latex@tableofcontents
  \addspecialchaptertotoc[\pageref{chap:toc}]{\contentsname}
}
\makeatother


\begin{document}
\frontmatter
\tableofcontents
\chapter*{Preface}\addspecialchaptertotoc{Preface}
\mainmatter
\chapter{Test chapter}
\section{First subsection}
\section{Second subsection}
\end{document}

相关内容