如何在多列環境的最後一頁擴充columnseprule?

如何在多列環境的最後一頁擴充columnseprule?

在使用 的文字的兩列部分的最後一頁上multicol,我想在頁面底部放置一個單列通知,並且我希望分隔列的規則一直延伸到上面一欄部分。使用vfill外部multicols將通知放在正確的位置,但規則僅擴展到實際的多列文字。使用vfill內部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

你可以將其添加到\AtEndDocument.然而,沒有進行任何測試來看看是否停止是否適合頁面,並且不與列中的現有文字重疊。


以下範例設定停止內容位於一個框(稱為\stopbox)內,並使用該框作為垂直標尺應下降到最後一頁的距離的度量(+ one \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}

結果:

在此輸入影像描述

相關內容