答案1
您要实现的目标至少可以通过两种方式实现。
根据元素之间的空间不同,外观会略有不同。但基本上是相同的。
方法 1:不使用multicols
\documentclass{book}
\makeatletter
\renewcommand\tableofcontents{%
\twocolumn[%
\begin{@twocolumnfalse}
\chapter*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
\end{@twocolumnfalse}]%
\@starttoc{toc}
\onecolumn}
\makeatother
\usepackage{lipsum}
\begin{document}
\tableofcontents
\chapter{Introduction}
\lipsum[1-50]
\section{Research domain}
\section{Another section}
\subsection{And a subsection}
\chapter{Literature Study}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{More Chapter Alpha}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{More Chapter Beta}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{More Chapter Gamma}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{More Chapter Delta}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{More Chapter Epsilon}
\section{Section Alpha}
\section{Section Beta}
\section{Section Gamma}
\section{Section Delta}
\section{Section Epsilon}
\section{Section Zeta}
\chapter{Conclusion}
\chapter{References}
\appendix
\chapter{Code Listings}
\end{document}
方法 2:使用multicols
\documentclass{book}
\usepackage{multicol}
\begin{document}
\makeatletter
\chapter*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}
\begin{multicols*}{2}
\@starttoc{toc}
\end{multicols*}
\makeatother
\chapter{Introduction}
.........................
\appendix
\chapter{Code Listings}
\end{document}
这些是如何完成的?
这里的基本原理是将 放在\contentsname
一列,将实际内容放在两列。然后切换回单列以显示正文。为了真正实现这种效果,我们侵入了命令的内部\tableofcontents
。
\twocolumn
文本前的命令会将其拆分为两列。问题是,开始\twocolumn
一个新页面。幸运的是,它有一个可选参数,可让您在两列内容之前指定一列内容。请参阅TeX 常见问题解答了解详情。
在第二种方法中,我们\contentsname
像往常一样放置,然后使用将实际内容放在两列中{multicols*}{2}
。