在使用 的文本的双列部分的最后一页上multicol
,我想在页面底部放置一个单列通知,并且我希望分隔列的规则一直延伸到单列部分的正上方。使用vfill
outsidemulticols
可以将通知放在正确的位置,但规则仅延伸到实际的多列文本。使用vfill
insidemulticols
不起作用。
我希望它产生类似以下内容,但显然不需要手动\vspace*
命令:
\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
\setlength{\columnsep}{0.5in}
\setlength{\columnseprule}{0.5pt}
\begin{document}
\begin{multicols}{2}
\lipsum[1]
\columnbreak
\lipsum[2]
\vspace*{300pt}
\end{multicols}
\centering\Huge\textbf{\textsf{STOP}}
\end{document}
从某些方面来看,这与同一页面和多栏问题,因为我需要确保multicols
环境之后出现的内容保持在同一页面上。
答案1
您可以使用以下方式在最后一页插入垂直线eso-pic
:
\documentclass{article}
\usepackage{multicol,eso-pic,lipsum,xcolor}
\setlength{\columnsep}{0.5in}
\setlength{\columnseprule}{0.5pt}
\begin{document}
\begin{multicols}{2}
\sloppy\lipsum[1-15]
\end{multicols}
\AddToShipoutPictureFG*{%
\AtTextLowerLeft{%
\makebox[0pt][l]{\makebox[\textwidth]{\Huge\bfseries\sffamily STOP}}% Set STOP
% Move to the right of the left text column
\hspace*{.5\dimexpr\textwidth-\columnseprule-2\columnsep}%
% Skip over column sep
\hspace*{\columnsep}%
% Insert vertical rule
\rule[3\baselineskip]{\columnseprule}{\dimexpr\textheight-3\baselineskip}%
}%
}
\end{document}
上面的例子\rule
在最后一页上3\baselineskip
从文本块的底部覆盖了 ,该文本块位于最后一页的顶部。
您可以将其添加到\AtEndDocument
。但是,没有进行测试来查看是否停止是否适合页面,并且不会与列中的现有文本重叠。
以下示例设置停止内容放在一个框内(称为\stopbox
),并以此框为尺度来衡量垂直规则在最后一页应延伸到多远(+ 一\baselineskip
):
\documentclass{article}
\usepackage{multicol,eso-pic,lipsum,xcolor}
\setlength{\columnsep}{0.5in}
\setlength{\columnseprule}{0.5pt}
\newsavebox{\stopbox}
\savebox{\stopbox}{%
\begin{tabular}[b]{c}
\Huge\bfseries\sffamily STOP \\
\small\itshape \ldots right here
\end{tabular}
}
\begin{document}
\begin{multicols}{2}
\sloppy\lipsum[1-15]
\end{multicols}
\AddToShipoutPictureFG*{%
\AtTextLowerLeft{%
\makebox[0pt][l]{\makebox[\textwidth]{\usebox{\stopbox}}}% Set STOP
% Move to the right of the left text column
\hspace*{.5\dimexpr\textwidth-\columnseprule-2\columnsep}%
% Skip over column sep
\hspace*{\columnsep}%
% Insert vertical rule
\rule[\dimexpr\ht\stopbox+\baselineskip]{\columnseprule}{\dimexpr\textheight-\ht\stopbox-\baselineskip}%
}%
}
\end{document}
答案2
新软件包multicolrule
(版本 1.1)无需 即可处理此问题eso-pic
。虽然 Werner 的解决方案完全可以解决 MWE 中提出的问题,但在生产文档中,它需要复杂的簿记来处理诸如环境上方有一列材料的情况multicols
,并且原始和重新绘制的规则略有错位,需要我在重新绘制之前擦除旧线。使用新软件包,这些问题不会出现。
\documentclass{article}
\usepackage{multicolrule}
\usepackage{lipsum}
\setlength{\columnsep}{0.5in}
\newsavebox{\stopbox}
\savebox{\stopbox}{%
\begin{tabular}[b]{c}
\Huge\bfseries\sffamily STOP \\
\small\itshape \ldots right here
\end{tabular}
}
\SetMCRule{width=0.5pt,line-style=solid,extend-fill,extend-reserve=\ht\stopbox}
\begin{document}
\lipsum[1]
\begin{multicols}{2}
\lipsum[2-3]
\end{multicols}
\centering\usebox{\stopbox}
\end{document}
结果如下: