![表格中统一的列宽](https://linux22.com/image/342050/%E8%A1%A8%E6%A0%BC%E4%B8%AD%E7%BB%9F%E4%B8%80%E7%9A%84%E5%88%97%E5%AE%BD.png)
如何使表中的所有单元格具有相同的长度?
我尝试了以下 LaTeX 代码:
\begin{tabular}{c|c||c|c}
S & R & Q & Q' \\
\hline
0 & 0 & \multicolumn{2}{c}{als voordien} \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
\end{tabular}
但是它会生成下表:
如您所见,第四列比其他列宽。有没有办法强制它均匀分布?
如果这个问题有一个明显的答案,我真的很抱歉,但是我对 Latex 很陌生,而且我在 Google 上找不到任何东西。
这个问题与固定宽度和居中对齐的列已在下面评论。该问题是关于在子单元格场景中保持单元格一致性。这个问题是关于如何首先获得具有统一单元格大小的表格。我不满足于简单地将表格宽度设置为绝对值,因为这看起来不雅观且不合时宜。我更希望我的表格尽可能小,同时保持单元格一致性。
答案1
像这样?
\documentclass{article}
\usepackage{array,calc}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newsavebox{\mcw}
\newlength{\mcwlength}
\begin{document}
\sbox\mcw{als voordien}
\settowidth{\mcwlength}{\usebox{\mcw}}
\setlength\tabcolsep{3pt}
\begin{tabular}{C{\mcwlength/2}|C{\mcwlength/2}||C{\mcwlength/2}|C{\mcwlength/2}}
S & R & Q & Q' \\
\hline
0 & 0 & \multicolumn{2}{c}{\usebox\mcw} \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
\end{tabular}
\end{document}
简短解释:
这个想法是测量multicolumn
单元格中内容的长度,将结果除以 2,并将结果用于p{...}
列类型。为此,我定义:
- 新
savebox
命名\mcw
(作为多列宽度的 shotness} - 新长度
\mcvlength
,其中包含存储在\mcw
程序如下:
- 将多列单元格的文本存储在
\mcw
- 存储
\settowidth{\mcwlength}{\usebox{\mcw}}
宽度\mcw
为 存储文本 - 用作
\mcwlength/2
表列的长度。
为了让单元格内容居中,我定义了新的列样式C
。就是这样。但是,列的实际宽度更大,因为它是通过所述程序计算的2\tabcolsep
。这会给人一种视觉印象,即列比必要的更宽。因此,我将tabcolsep
默认值从减少6pt
到。3pt
\setlength\tabcolsep{3pt}
附录: 桌子的形状有多种变化(正如 Bernard 在其评论中所建议的那样):
\documentclass{article}
\usepackage{array,calc}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newsavebox{\mcw}
\newlength{\mcwlength}
\begin{document}
\sbox\mcw{als voordien}
\settowidth{\mcwlength}{\usebox{\mcw}}
\setlength\tabcolsep{3pt}
\begin{tabular}{C{\mcwlength/2}|C{\mcwlength/2}
!{\vline width 1pt}% <-- determine thick vertical line
C{\mcwlength/2}|C{\mcwlength/2}}
S & R & Q & Q' \\
\hline
0 & 0 & \multicolumn{2}{c}{\usebox\mcw} \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
\end{tabular}
\end{document}
答案2
这里有一个解决方案,首先计算表格所需的整体宽度(\mylength
在下面的代码中调用)并使用该tabularx
包设置四个居中列。
如果这是我的表格,我会完全去掉垂直规则;结果如下面第二个表格所示。试一试。
\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newlength\mylength
\settowidth\mylength{als voordien}
\setlength\mylength{\dimexpr2\mylength+4\tabcolsep+6\arrayrulewidth\relax}
\begin{document}
\begin{tabularx}{\mylength}{C|C||C|C}
S & R & Q & Q' \\
\hline
0 & 0 & \multicolumn{2}{c}{als voordien} \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
\end{tabularx}
\bigskip
% recalculate \mylength
\settowidth\mylength{als voordien}
\setlength\mylength{\dimexpr2\mylength+4\tabcolsep\relax}
\begin{tabularx}{\mylength}{CCCC}
S & R & Q & Q' \\
\midrule
0 & 0 & \multicolumn{2}{c}{als voordien} \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
\end{tabularx}
\end{document}