“p”列(表格)中的 \hbox 破坏了行布局

“p”列(表格)中的 \hbox 破坏了行布局

以下示例代码显示了我的\vertgap命令的一个问题,该命令的目的只是在将强制参数封装在\hbox(用于高内容)中后在其上方和下方添加一些空间。它在l-type 列中工作正常,但显然在p-type 列中不行。在我第一次尝试时,我没有意识到这一点,因为它在(注意:示例代码缺少头行和尾行)中工作正常longtable,并且不会忽略自动插入的\centering

我的目标可以在中看到:所有三个表格行都具有相同的高度。在中也longtable可以实现这种行为吗?tabular

\hbox附录:在-type 列中简单使用p就足以显示问题。

\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}

答案1

\hbox是 TeX 基元,除非您了解其详细工作原理,否则不应在 LaTeX 中使用(您可能会遇到诸如颜色或位置之类的问题 --- 就像您那样)。要使用的相应 LaTeX 命令是,\mbox这可以解决您的问题。

主要原因是,\hbox如果在垂直模式下遇到,则不会开始段落,它只是左对齐添加。因此\centering没有效果。\mbox确保框成为段落的一部分。

更新

也许我应该补充一点\kern\vbox\vtop、 也是如此,也就是说,它们不支持 LaTeX“文档级”命令。当然,所有这些都是构建包等所需的命令,但在用户级别,最好避免使用它们。

话虽如此,但实际上并没有 LaTeX 等效的命令,因为\vtop{\kern...\hbox{#1}\kern...}它会产生一个与内部的水平框一样宽的垂直框。例如,LaTeX 仅提供具有定义宽度的垂直框,\parbox并且当您在定义的宽度内开始一个段落时,它将是框的宽度,而不管内容如何。好吧,\shortstack{..\\[..] ...}我想有人可以使用,但那也是一种 hack。因此,以这种方式编码可能是实现所需结果的最简单方法(只要知道这些命令的副作用)。

相关内容