を使用するテキストの 2 列部分の最終ページでmulticol
、ページの下部に 1 列の通知を配置し、列を区切る罫線を 1 列部分のすぐ上まで延長したいと考えています。outside を使用すると、vfill
通知multicols
は適切な場所に配置されますが、罫線は実際の複数列テキストまでしか延長されません。inside を使用しても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
)内にあり、このボックスを最終ページで垂直線がどこまで下がるか(+ 1 \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 で説明されている問題にはまったく問題ありませんでしたが、実稼働ドキュメントでは、環境の上に 1 列の資料があるなどの状況に対処するために複雑な記録が必要になり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}
そして結果は次の通りです。