![回忆录两栏目录](https://linux22.com/image/447558/%E5%9B%9E%E5%BF%86%E5%BD%95%E4%B8%A4%E6%A0%8F%E7%9B%AE%E5%BD%95.png)
我对目录的这个方面感到很困惑。我有一个单列文档,但需要一个双列目录。默认情况下,会\twocoltocetc
产生单列文档所不期望的结果,将目录部分标题也放在双列环境中,而不是正常放置。我认为这是 memoir.cls 中第 7732 行定义的限制,其中\twocolumn
被调用。似乎存在一个限制,即\twocolumn
和\onecolumn
开关始终必须从新页面开始,如 Peter Wilsons 的注释所示这里。
Peter 建议使用multicols
环境来完成这样的任务,我也在第 163 页找到了一个例子梅曼其中 multicols 环境添加到 .toc 中\addtocontents{toc}{\protect\begin{multicols}{2}}
经过修改,我可以创建以下环境,当我将整个文档包装在其中时,我可以根据需要生成目录。
\newenvironment{twocoltoc}[1]{%
\addtocontents{toc}{\protect\begin{multicols}{2}}}%
{\addtocontents{toc}{\protect\end{multicols}}}
不过,这感觉相当笨重。我也可以直接放置\addtocontents...
而不是使用环境。我希望有一个单一的调用函数来实现这个目标,类似于\twocoltocetc
。我需要一种方法来在生成其余行之后在末尾添加一行.toc
,但我不太确定如何实现这一点。它必须在的核心中,starttoc{toc}
但我不确定在哪里可以找到它。
这是我的测试文件,展示了我目前所拥有的内容,它产生了理想的输出,但并不优雅。
\documentclass[letterpaper, 10pt]{memoir}
\usepackage{multicol}
\usepackage{xparse}
\maxtocdepth{subsection}
\newif\ifwanttwocoltoc
\wanttwocoltocfalse
\NewDocumentCommand{\twocoltoc}{}{
\addtocontents{toc}{\protect\begin{multicols}{2}}%
\wanttwocoltoctrue
}
\NewDocumentCommand{\maketoc}{}{
\tableofcontents
\ifwanttwocoltoc
% \addtocontents{toc}{\protect\end{multicols}}
}
\begin{document}
\twocoltoc
\maketoc
\chapter{Chapter}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\subsection{Subsection}
\section{Section}
\subsection{Subsection}
\section{Section}
\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\chapter{Chapter}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
{\addtocontents{toc}{\protect\end{multicols}}}
\end{document}
附言:提到的例子中有一个拼写错误\end{multocols}
。
答案1
我认为这个答案符合原作者想要的答案,但是有一个小问题。
% twocoltocprob.tex SE 637513
\documentclass[letterpaper, 10pt]{memoir}
\usepackage{comment}
\begin{comment} %%% OPs code
\usepackage{multicol}
\usepackage{xparse}
\maxtocdepth{subsection}
\newif\ifwanttwocoltoc
\wanttwocoltocfalse
\NewDocumentCommand{\twocoltoc}{}{
\addtocontents{toc}{\protect\begin{multicols}{2}}%
\wanttwocoltoctrue
}
\NewDocumentCommand{\maketoc}{}{
\tableofcontents
\ifwanttwocoltoc
% \addtocontents{toc}{\protect\end{multicols}}
}
\setlength{\textheight}{0.33\textheight}
\begin{document}
\twocoltoc
\maketoc
\end{comment} %% end of OPs code
%\begin{comment} %% my code
\setlength{\textheight}{0.4\textheight}
\usepackage{lipsum}
\usepackage{multicol}
\newcommand{\twocoltoc}{\tableofcontents%
\addtocontents{toc}{\protect\begin{multicols}{2}}}
\renewcommand{\twocoltoc}{\addtocontents{toc}{\protect\begin{multicols}{2}}
\tableofcontents}
\begin{document}
%%%% regular (my) code for the ToC
\twocoltoc
\end{document}
%%% OPs division codes
\chapter{Chapter}
\lipsum[1]
\section{Section}
\lipsum[2]
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\subsection{Subsection}
\section{Section}
\subsection{Subsection}
\section{Section}
\chapter{Chapter}
%%%%\end{document}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\subsubsection{Subsubsection}
\subsection{Subsection}
\section{Section}
\chapter{Chapter}
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
%% {\addtocontents{toc}{\protect\end{multicols}}}
\end{document}
我认为输出是 OP 想要的,但在处理上述内容时,我收到一条错误消息file ended scanning use of \next
。但是,忽略这一点,输出是我认为 OP 想要的。
有人能帮忙解决这个\next
问题吗?