我的整个文档都采用三列multicol
布局,并且在文档的最开始处有一些特殊文本(如标题),如下所示:
使用三列是因为我正在编写的文档的空间限制。上面的文档是使用以下代码生成的:
\documentclass[a4paper,landscape]{article}
\usepackage{multicol}
\usepackage[margin=0.7cm,bottom=1.3cm,footskip=0.7cm]{geometry}
\usepackage{lipsum}
\setlength{\columnseprule}{0.4pt}
\begin{document}
\begin{multicols*}{3}
\raggedright
{\huge \textbf{Long Long Very Long Title Abcdefg}}
\section*{Limits}
\lipsum\lipsum
\end{multicols*}
\end{document}
标题变成了两行,很难看。
我知道我要求的有点奇怪,但是有没有办法将标题强制放到一行,从而“吃掉”相邻的列(从而删除第一列和第二列之间的列分隔符,并将第二列上的文本向下推)?
(注意:第三列不要被往下推。)
将第二列的文本向下推是次要问题,因为我可以通过vspace
在正确的位置添加一些文本来手动完成此操作,但我没有解决方法来删除与标题重叠的列分隔符部分。
我曾尝试使用mbox
,即:
\mbox{\huge \textbf{Long Long Very Long Title Abcdefg}}
但这(正如预期的那样)不会摆脱列分隔符:
“Title”这个词不太明显,但列分隔符确实在那里。理想情况下,分隔符应该从标题底部以下约 1cm 处开始,与“Limits”子部分名称的高度相同。
我也尝试过设置的背景颜色mbox
,但列分隔符是绘制的超过,所以mbox
我无法用这种方法隐藏列分隔符。
关于如何实现这一目标,有什么建议吗?
答案1
multicol
如果不对其内部列平衡例程进行重大重写,则无法单独更改 的列大小。使用最新版本multicolrule
(1.2) 可以手动缩小列分隔符,我今天早些时候发布了该版本,应该会在第二天左右进入您的 CTAN 镜像。(如果您不耐烦,可以立即在github。
这两个命令是解决方案的核心:
\DeclareMCRulePattern{shrink-me}{extend-top=-\reservespace-\baselineskip}
\SetMCRule{width=thin,line-style=solid,patterns=shrink-me,pattern-for=1}
它的工作原理是声明列分隔符的模式,然后将该模式仅应用于第一个分隔符。
梅威瑟:
\documentclass[a4paper,landscape]{article}
\usepackage[margin=0.7cm,bottom=1.3cm,footskip=0.7cm]{geometry}
\usepackage{lipsum}
\usepackage{multicolrule}
\newsavebox{\mytitle}
\newlength{\reservespace}
\savebox{\mytitle}{\textbf{\huge Long Long Very Long Title Abcdefg}}
\setlength{\reservespace}{\ht\mytitle}
\addtolength{\reservespace}{\dp\mytitle}
\addtolength{\reservespace}{\baselineskip}
\addtolength{\reservespace}{-\topskip}
\DeclareMCRulePattern{shrink-me}{extend-top=-\reservespace-\baselineskip}
\SetMCRule{width=thin,line-style=solid,patterns=shrink-me,pattern-for=1}
\raggedright
\begin{document}
\begin{multicols*}{3}
\usebox{\mytitle}
\section*{Limits}
\lipsum[1-3]
\columnbreak\vspace*{\reservespace}
\lipsum[4-7]
\lipsum
\end{multicols*}
\end{document}
结果: