表格中统一的列宽

表格中统一的列宽

如何使表中的所有单元格具有相同的长度?

我尝试了以下 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

程序如下:

  1. 将多列单元格的文本存储在 \mcw
  2. 存储\settowidth{\mcwlength}{\usebox{\mcw}}宽度\mcw为 存储文本
  3. 用作\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}

相关内容