Na página final de uma parte de duas colunas de um texto que usa multicol
, quero colocar um aviso de uma coluna na parte inferior da página e gostaria que a regra que separa as colunas se estendesse até um pouco acima a porção de uma coluna. Usar vfill
outside multicols
coloca o aviso no lugar certo, mas a regra se estende apenas até o texto real de várias colunas. Usar vfill
dentro multicols
não tem efeito.
Eu gostaria que produzisse algo parecido com o seguinte, mas obviamente sem o \vspace*
comando manual:
\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}
Em alguns aspectos, este é o problema oposto doMesma página e multicolsquestão, na medida em que preciso garantir que algo que vem depois do multicols
ambiente seja mantido na mesma página.
Responder1
Você pode inserir a régua vertical na última página usandoeso-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}
O exemplo acima sobrepõe um \rule
na página final 3\baselineskip
a partir da parte inferior do bloco de texto sobre o que quer que esteja na página final.
Você poderia adicionar isso ao \AtEndDocument
. No entanto, não há nenhum teste feito para verificar sePARARcaberá ou não na página e não se sobreporá ao texto existente nas colunas.
O exemplo a seguir define oPARARconteúdo dentro de uma caixa (chamada \stopbox
) e usa esta caixa como uma medida de até onde a regra vertical deve descer na última página (+ um \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}
Responder2
O novo pacote multicolrule
(versão 1.1) pode resolver esse problema sem a necessidade do eso-pic
. Embora a solução de Werner fosse perfeitamente útil para o problema estabelecido no MWE, em documentos de produção ela exigia uma contabilidade complicada para lidar com situações como ter material de uma coluna acima do multicols
ambiente, e as regras originais e redesenhadas estavam ligeiramente desalinhadas, exigindo que eu para apagar a linha antiga antes de redesenhá-la. Com o novo pacote, estas questões não surgem.
\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}
E o resultado: