\hbox en la columna "p" (tabular) destruye el diseño de la fila

\hbox en la columna "p" (tabular) destruye el diseño de la fila

El siguiente código de ejemplo muestra un problema con mi \vertgapcomando, que solo pretende agregar algo de espacio encima y debajo del argumento obligatorio después de encapsularlo en un \hbox(para contenidos altos). Funciona bien en lcolumnas de tipo, pero obviamente no en pcolumnas de tipo. En mis primeros intentos no lo reconocí, porque funciona longtable(nota: el código de ejemplo carece de encabezados y pies de página), sin ignorar también el archivo de inserción automática \centering.

Mi objetivo se puede ver en longtable: las tres filas de la tabla tienen la misma altura. ¿Es posible lograr este comportamiento tabulartambién?

Anexo: el simple uso de \hboxen una pcolumna de tipo es suficiente para mostrar el 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}

Respuesta1

\hboxes una primitiva de TeX y no debe usarse en LaTeX a menos que sepa cómo funciona en detalle (puede tener problemas con cosas como colores o ubicación, como lo hizo). El comando LaTeX correspondiente a usar es \mboxy eso soluciona su problema.

La razón principal es que un \hboxno comienza un párrafo si se encuentra en modo vertical, simplemente se agrega alineado a la izquierda. Por tanto \centeringno tiene ningún efecto. \mboxasegura que el cuadro se convierta en parte del párrafo.

Actualizar

Tal vez debería agregar que lo mismo ocurre con \kern, \vbox, \vtop, es decir, no son comandos LaTeX "a nivel de documento" compatibles. Todos ellos son, por supuesto, comandos que uno necesita para crear paquetes, etc., pero a nivel de usuario es preferible evitarlos.

Dicho esto, en realidad no existe un equivalente de LaTeX, ya \vtop{\kern...\hbox{#1}\kern...}que esto produce un cuadro vertical que es tan ancho como el hbox del interior. LaTeX solo ofrece cuadros verticales que tienen un ancho definido, por ejemplo, \parboxy el momento en que comienza un párrafo dentro del ancho definido será el ancho del cuadro independientemente del contenido. Bueno, \shortstack{..\\[..] ...}supongo que se podría utilizar, pero eso también sería una especie de truco. Entonces, codificar tal como está es probablemente la forma más sencilla de lograr los resultados deseados (siempre que se conozcan los efectos secundarios de estos comandos).

información relacionada