Como estender o columnseprule na página final de um ambiente multicol?

Como estender o columnseprule na página final de um ambiente multicol?

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 vfilloutside multicolscoloca o aviso no lugar certo, mas a regra se estende apenas até o texto real de várias colunas. Usar vfilldentro multicolsnã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 multicolsambiente seja mantido na mesma página.

Responder1

Você pode inserir a régua vertical na última página usandoeso-pic:

insira a descrição da imagem aqui

\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 \rulena página final 3\baselineskipa 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):

insira a descrição da imagem aqui

\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 multicolsambiente, 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:

insira a descrição da imagem aqui

informação relacionada