\hbox na coluna "p" (tabular) destrói o layout da linha

\hbox na coluna "p" (tabular) destrói o layout da linha

O código de exemplo a seguir mostra um problema com meu \vertgapcomando, que visa apenas adicionar algum espaço acima e abaixo do argumento obrigatório após encapsulá-lo em um \hbox(para conteúdos altos). Funciona bem em lcolunas -type, mas obviamente não em pcolunas -type. Nas minhas primeiras tentativas não reconheci isso, porque funciona longtable(nota: o código de exemplo não possui cabeçalho e rodapé), não ignorando o auto-insered \centeringtambém.

Meu objetivo pode ser visto em longtable: todas as três linhas da tabela têm altura igual. É possível alcançar esse comportamento tabulartambém?

Adendo: o simples uso de \hboxuma pcoluna -type é suficiente para mostrar o problema.

\documentclass{article}
\usepackage{longtable}
\usepackage{array}

\newcommand{\vertgap}[1]{\hbox{\vbox{\kern0.25ex\vtop{\hbox{#1}\kern0.25ex}}}}%
%\newcommand{\vertgap}[1]{\hbox{\vbox{\hrule height0.25ex\vtop{\hbox{#1}\hrule height0.25ex}}}}%
% The commented-out command above shows the inserted gaps - these seem to be ok.

\begin{document}

\begin{tabular}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{tabular}

\begin{longtable}{|l|>{\centering}p{2in}|l|}
\hline%
aaaa: & 4711-0815 & any\\
\hline%
aaa: & \vertgap{0815} & any\\
\hline%
aa: & 4711 & any\\
\hline%
\end{longtable}

\end{document}

Responder1

\hboxé um primitivo do TeX e não deve ser usado no LaTeX a menos que você saiba como ele funciona em detalhes (você pode ter problemas com coisas como cores ou posicionamento --- como fez). O comando LaTeX correspondente a ser usado é \mboxe isso resolve o seu problema.

A principal razão é que um \hboxparágrafo não inicia um parágrafo se for encontrado no modo vertical, ele é simplesmente adicionado alinhado à esquerda. Portanto \centeringnão tem efeito. \mboxgarante que a caixa se torne parte do parágrafo.

Atualizar

Talvez eu deva acrescentar que o mesmo é verdade para \kern, \vbox, \vtop, ou seja, eles não são suportados por comandos de "nível de documento" do LaTeX. Todos eles são, obviamente, comandos necessários para construir pacotes, etc., mas no nível do usuário eles devem ser preferencialmente evitados.

Dito isto, na verdade não existe um equivalente em LaTeX, pois \vtop{\kern...\hbox{#1}\kern...}isso produz uma caixa vertical que é tão larga quanto a hbox interna. O LaTeX oferece apenas caixas verticais com largura definida, por exemplo, \parboxe no momento em que você inicia um parágrafo dentro da largura definida, será a largura da caixa, independentemente do conteúdo. Bem, acho que alguém poderia usar, \shortstack{..\\[..] ...}mas isso também seria uma espécie de hack. Portanto, a codificação do jeito que está é provavelmente a maneira mais simples de alcançar os resultados desejados (desde que se saiba dos efeitos colaterais desses comandos).

informação relacionada