读完答案后如何使表格中的一行变短,我还有一个问题:有没有办法让行高成为一个固定值(比如0.3厘米)?
我的表格如下:
\begin{tabular}{|c|c|c|}
\hline
a & b & c \\
\hline
{\tiny a} & {\tiny b} & {\tiny c} \\
\hline
\end{tabular}
我希望第二列的高度是固定长度,而不是像\setarstrut{\tiny}
Heiko Oberdiek 的答案中的那样。
答案1
一个粗鲁的黑客:在最后一列的每个单元格中添加零宽规则(作为支柱):
\documentclass[12pt]{article}
\usepackage{array}
\begin{document}
\begin{tabular}{|c|c|c<{\rule[-2mm]{0pt}{7mm}}|}
\hline
a & b & c \\
\hline
\tiny a & \tiny b & \tiny c \\
\hline
a & b & c \\
\hline
\tiny a & \tiny b & \tiny c \\
\hline
\end{tabular}
\end{document}
离题:\tiny
不是环境,而是从一种字体大小切换到另一种字体tiny
大小。因此,正确的用法是,或者如果它的使用受到表格中单元格的限制,{\tiny a}
则简单。\tiny a
答案2
下列的Heiko Oberdiek 的回答,我终于找到了改变一行的高度(和深度)的方法:
\documentclass{article}
\usepackage{array,xparse}
\makeatletter
\ExplSyntaxOn
% #1=height, #2=depth. They should be dimexpr.
\NewExpandableDocumentCommand \setarstrut { m m }
{ \mytab_set_array_strut:nn {#1} {#2} }
\NewExpandableDocumentCommand \restorearstrut { }
{ \mytab_restore_array_strut: }
\box_new:N \l__mytab_old_arstrut_box
\cs_new:Npn \mytab_set_array_strut:nn #1#2
{
\tex_noalign:D
{
\group_begin:
% Store the old strutbox
\box_gset_eq:NN \l__mytab_old_arstrut_box \@arstrutbox
% Change the dimension of \@arstrutbox
\hbox_set_to_wd:Nnn \l_tmpa_box { \c_zero_dim } { }
\box_set_ht:Nn \l_tmpa_box {#1}
\box_set_dp:Nn \l_tmpa_box {#2}
\hbox_gset:Nn \@arstrutbox { \box_use:N \l_tmpa_box }
\group_end:
}
}
\cs_new:Npn \mytab_restore_array_strut:
{
\tex_noalign:D
{ \box_gset_eq:NN \@arstrutbox \l__mytab_old_arstrut_box }
}
\ExplSyntaxOff
\makeatother
\begin{document}
\begin{tabular}{|c|c|c|}
\hline
a & b & c \\
\hline
\setarstrut{4pt}{1.3pt}
\tiny a & \tiny b & \tiny c \\
\restorearstrut
\hline
a & b & c \\
\hline
\end{tabular}
\end{document}
我使用LaTeX3重写了代码,但是主要思想是一样的:只是修改框\@arstrutbox
。
结果: