我正在使用tocloft
并希望制作一个两列的目录。虽然将整个目录包裹在multicol
- 环境中很容易,但我不喜欢这种外观,因为标题也会被包裹在其中,这会导致第二列从标题上方开始。
当使用tocloft
重新定义时,我想我可以重新定义以产生我想要的内容,而不是在以后覆盖该定义,如下所示:\tableofcontents
\AtBeginDocument
\@starttoc
\documentclass{scrbook}
\usepackage{multicol}
\usepackage{tocloft}
\makeatletter
% tocloft redefines \tableofcontents \AtBeginDocument
% As I don't want the title to be part of the two column layout,
% it seems easiest to just add the multicols to \@starttoc.
\let\@starttocorg\@starttoc
\def\@starttoc#1{%
\begin{multicols*}{2}%
\@starttocorg{#1}%
\end{multicols*}}%
\makeatother
\begin{document}
\tableofcontents
\part{part}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\part{part}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\part{part}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\end{document}
其结果为:
但由于我不知道\@starttoc
内部发生了什么,我不确定这样做是否安全。有什么我没看到的影响吗?(我想我也可以重新表述这个问题真的有那么容易吗?)
答案1
KOMA-Script 类scrartcl
、scrreprt
以及ToC 和 Lists 的加载和使用scrbook
包均基于。和均为内部命令,用户不应重新定义。 但提供了两个钩子来在 ( ) 之前和 ( )之后执行代码。tocbasic
tocbasic
\tocbasic@starttoc
\@starttoc
\tocbasic@starttoc
\@starttoc
tocbasic
\BeforeStartingTOC
\AfterStartingTOC
@starttoc
请注意\BeforeStartingTOC
和\AfterStartingTOC
处于同一组级别(同一组内),因此您可以使用:
\BeforeStartingTOC[toc]{\begin{multicols}{2}}
\AfterStartingTOC[toc]{\end{multicols}}
代码:
\documentclass{scrbook}
\usepackage{multicol}
\BeforeStartingTOC[toc]{\begin{multicols}{2}}
\AfterStartingTOC[toc]{\end{multicols}}
\begin{document}
\tableofcontents
\part{part}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\part{part}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\chapter{chapter}
\section{section}
\section{section}
\end{document}
或者使用带星号的版本multicols
:
\BeforeStartingTOC[toc]{\begin{multicols*}{2}}
\AfterStartingTOC[toc]{\end{multicols*}}