\hrule dentro de \textblock (do pacote textpos) não aparece na saída

\hrule dentro de \textblock (do pacote textpos) não aparece na saída

Meu código:

\documentclass{beamer}
\usepackage[absolute,overlay]{textpos}
\begin{document}

\begin{frame}[fragile,t]
\frametitle{Demo}

\begin{textblock*}{\textwidth}(20mm,20mm)
\vspace{5mm}\hrule height 1mm\vspace{5mm}
\end{textblock*}

\end{frame}

\end{document}

Saída:

insira a descrição da imagem aqui

Por que \hrulenão aparece na saída? Como posso consertar isso?

Responder1

O textblock*ambiente usa as propriedades do conteúdo para determinar o tamanho da caixa (mesmo que o textposmanual afirme que a largura textpos*é absoluta). A primitiva TeX \hruletoma como largura a largura da caixa vertical que contém a \hruleinstrução (vejaPor que um \hrule precisa de texto ao seu redor para ser desenhado?), que está vazio neste caso.

As soluções possíveis são usar \leavevmode(que define a largura da caixa como \textwidth, veja a pergunta vinculada), ou especificar a largura \hrulemanualmente, ou usar o comando \rulecom uma largura especificada.

MWE abaixo, com alguns exemplos de como textpos*lida com diferentes tipos de conteúdo para fins ilustrativos (usando a showboxesopção de pacote).

\documentclass{beamer}
\usepackage[absolute,overlay,showboxes]{textpos}
\begin{document}

\begin{frame}[fragile,t]
\frametitle{Demo}
\color{green}\vspace{5mm}\hrule height 1mm\vspace{5mm}
\begin{textblock*}{\textwidth}(10mm,20mm)
\vspace{2mm}\hrule height 1mm\vspace{2mm}% zero width
\end{textblock*}
\begin{textblock*}{\textwidth}(10mm,30mm)
\vspace{2mm}\leavevmode\hrule height 1mm\vspace{2mm}
\end{textblock*}
\begin{textblock*}{\textwidth}(10mm,40mm)
\color{red}\vspace{2mm}\hrule height 1mm width \textwidth\vspace{2mm}
\end{textblock*}
\begin{textblock*}{\textwidth}(10mm,50mm)
\color{blue}\rule{\textwidth}{1mm}
\end{textblock*}
%further examples of textblock*
\begin{textblock*}{\textwidth}(10mm,60mm)% width of the character
\phantom{X}
\end{textblock*}
\begin{textblock*}{\textwidth}(10mm,70mm)% does not show

\end{textblock*}
\begin{textblock*}{\textwidth}(10mm,80mm)% full width
\color{black}X
\end{textblock*}
\end{frame}

\end{document}

insira a descrição da imagem aqui

informação relacionada