使用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}