以下示例代码显示了我的\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。因此,以这种方式编码可能是实现所需结果的最简单方法(只要知道这些命令的副作用)。