Как расширить правило columnseprule на последней странице многоколоночной среды?

Как расширить правило columnseprule на последней странице многоколоночной среды?

На последней странице двухколоночной части текста, которая использует multicol, я хочу поместить одноколоночное уведомление внизу страницы, и я хотел бы, чтобы разделяющее столбцы правило простиралось до самого верха одноколоночной части. Использование vfilloutside multicolsпомещает уведомление в нужное место, но правило простирается только до фактического многоколоночного текста. Использование vfillinside multicolsне дает никакого эффекта.

Мне бы хотелось, чтобы он выдал что-то вроде следующего, но, очевидно, без ручного \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снизу текстового блока накладывается символ a поверх всего, что находится на последней странице.

Вы могли бы добавить это в \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. Хотя решение Вернера было вполне пригодным для проблемы, изложенной в 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}

И вот результат:

введите описание изображения здесь

Связанный контент