如何在多列环境的最后一页上扩展 columnseprule?

如何在多列环境的最后一页上扩展 columnseprule?

在使用 的文本的双列部分的最后一页上multicol,我想在页面底部放置一个单列通知,并且我希望分隔列的规则一直延伸到单列部分的正上方。使用vfilloutsidemulticols可以将通知放在正确的位置,但规则仅延伸到实际的多列文本。使用vfillinsidemulticols不起作用。

我希望它产生类似以下内容,但显然不需要手动\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}

结果如下:

在此处输入图片描述

相关内容