我正在尝试在章节标题之前和之后添加自动\end{multicols}
和\begin{multicols}{2}
。(文档是 2 列,章节标题应该横跨整个页面。)
这是我的最小工作示例:
这有效:
\documentclass{book}
\usepackage{multicol}
\usepackage[compact,tiny]{titlesec}
\titleformat{\chapter}{}{\thechapter}{0em}{}[]
\begin{document}
\begin{multicols}{2}
\end{multicols}
\chapter{Breaking Things}
\begin{multicols}{2}
\end{multicols}
\end{document}
但是,将\begin
&\end
移入 titleformat 命令会产生错误。每个命令都会产生不同的错误(因为我分别尝试过每个命令)。\protect 没有帮助。
最小损坏示例:
\documentclass{book}
\usepackage{multicol}
\usepackage[compact,tiny]{titlesec}
\titleformat{\chapter}{}{\thechapter}{0em}{\end{multicols}}[\begin{multicols}{2}]
\begin{document}
\begin{multicols}{2}
\chapter{Breaking Things}
\end{multicols}
\end{document}
像上面所示那样将其\end{multicols}
放入命令的“before”部分会产生“缺失 } 插入”问题。\begin{multicols}
像上面所示那样将其放入命令的“after”部分(将 保留\end{multicols}
在文档本身中)会产生“额外 } 或忘记 \endgroup。”错误。
答案1
您必须\chapter
稍微重新定义该命令,将其\begin{multicols}{2}
直接插入到章节标题之后和\end{multicols}
发出真正的章节命令之前。
但是,这样会multicol
在开头留下一个未打开的,multicol
在结尾留下一个未关闭的。环境会根据定义钩住\AtBeginDocument
并\AtEndEnvironment
打开和关闭此环境。
\AtBeginDocument
如果您想将 移至较后的位置,请注释掉\begin{multicols}{2}
—— 然后手动执行此操作。对于较早的 ,同样如此\end{multicols}
。
\documentclass{book}
\usepackage{multicol}
\usepackage[compact,tiny]{titlesec}
\usepackage{blindtext}
%\usepackage{etoolbox}%
\titleformat{\chapter}{}{\thechapter}{0em}{}[]
\let\LaTeXStandardChapter\chapter
\makeatletter
\newcommand{\unstarredchapter@noopt}[1]{%
\unstarredchapter@opt[#1]{#1}%
}%
\newcommand{\unstarredchapter@opt}[2][]{%
\end{multicols}\relax%
\LaTeXStandardChapter{#1}%
\begin{multicols}{2}
%
}%
\newcommand{\unstarredchapter}{%
\@ifnextchar[{\unstarredchapter@opt}{\unstarredchapter@noopt}
}%
\newcommand{\starredchapter}[1]{%
\LaTeXStandardChapter*{#1}
}%
\renewcommand{\chapter}{%
\@ifstar{\starredchapter}{\unstarredchapter}%
}%
\makeatother
\AtEndDocument{%
\end{multicols}\relax%
}%
\AtBeginDocument{%
\begin{multicols}{2}\relax%
}%
\begin{document}
\blindtext
\chapter{Breaking Things}
\blindtext[2]
\chapter{Other stuff}
\blindtext[4]
\end{document}
笔记
我的解决方案是问题multicols
在开头自动打开,因为这也将提供两列,内容列表\tableofcontents
也是如此。\listof....
答案2
这是第二种方法,它利用了多色使用环境的可选参数显示跨列标题的包mulicols
。
我定义了一个新\Chapter
命令。起初我只是覆盖了它\chapter
,但后来我认为最好不要管实际章节。我的代码已经\chapter
打开和关闭了multicols
环境,因此如果您想在多列模式下获取第一章之前的材料,那么您必须手动执行此操作。
\documentclass{book}
\usepackage{multicol}
\usepackage[compact,tiny]{titlesec}
\titleformat{\chapter}{}{\thechapter}{0em}{}[]
\usepackage{blindtext}
\let\endLastMultiCols\relax
\newcommand\Chapter[2][\relax]{\endLastMultiCols% end the last multicols, if there was one
\begin{multicols}{2}[\protect{\ifx\relax#1\relax\chapter{#2}\else\chapter[#1]{#2}\fi}]%
\def\endLastMultiCols{\end{multicols}}%
}
\AtEndDocument{\endLastMultiCols}
\begin{document}
\Chapter{Breaking Things}
\blindtext
\Chapter{Breaking more Things}
\Blindtext
\end{document}