平衡多列表格中的列宽

平衡多列表格中的列宽

我试图将表格中的垂直线置于 0 到 31 之间。有人知道怎么做吗?下面是我的乳胶代码。

在此处输入图片描述

\begin{table}[] \begin{tabular}{|c|cc|cc|cc|cc|cc|} 
\hline 
TEXT &  
\multicolumn{2}{c|}{TEXT TEXT} &   \multicolumn{2}{c|}{TEXT TEXT} &  
\multicolumn{2}{c|}{TEXT TEXT} &   \multicolumn{2}{c|}{TEXT TEXT} &  
\multicolumn{2}{c|}{TEXT TEXT} \\ \hline TEXT &  
\multicolumn{2}{c|}{TEXT TEXT} &   \multicolumn{2}{c|}{TEXT TEXT} &  
\multicolumn{2}{c|}{TEXT TEXT} &   \multicolumn{2}{c|}{TEXT TEXT} &  
\multicolumn{2}{c|}{TEXT TEXT} \\ \hline TEXT &    
\multicolumn{1}{c|}{\centering 0} & \multicolumn{1}{c|}{31} &
\multicolumn{1}{c|}{0} & 31 & \multicolumn{1}{l|}{0} & 31 &
\multicolumn{1}{l|}{0} & 31 & \multicolumn{1}{l|}{0} & 31 \\ \hline
TEXT &   \multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1
&   \multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 \\ \hline TEXT &   \multicolumn{1}{c|}{1}
&   1 &   \multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &  
1 &   \multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 \\
\hline TEXT &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 \\
\hline TEXT &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 \\
\hline TEXT &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 \\
\hline TEXT &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 &  
\multicolumn{1}{c|}{1} &   1 &   \multicolumn{1}{c|}{1} &   1 \\
\hline 
\end{tabular} 
\end{table}

答案1

基本lrc列类型没有固定或预定的宽度。相反,它们的宽度最终是给定列中最宽的单元格。这就是为什么五对列中的第一列非常窄,因为它只包含数字01;第二列的宽度是余数,由组合列标题的宽度(“TEXT TEXT”)减去第一列的宽度得出。

为了解决这个问题,我建议您加载array包并使用其w列类型而不是c列类型。w列类型将列的所需可用宽度作为其参数之一。此宽度可以根据有关组合列标题的可用信息计算得出;以下示例对此进行了说明。

为了使这个例子更符合实际/更贴近现实世界的表格,实际上有两种不同的列宽需要考虑,因为前两个组合标题中的字符串(“TEXT TEXT”)与(,长于)接下来三个组合标题(“TEX TEX”)。

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage{array} % for 'w' column type

%% Measure widths of widest column headers
%% for columns 2 thru 5 ("TEXT TEXT" is wider than "TEIT TEIT"):
\newlength\mylenA 
  \settowidth\mylenA{TEXT TEXT} % strings in 2 two-column headers 
  \setlength\mylenA{\dimexpr\mylenA/2-\tabcolsep-0.5\arrayrulewidth\relax}
%% for columns 6 thru 11 ("TEX TEX" is wider than "TEI TEI"):
\newlength\mylenB
  \settowidth\mylenB{TEX TEX}  % strings in 3 two-column headers
  \setlength\mylenB{\dimexpr\mylenB/2-\tabcolsep-0.5\arrayrulewidth\relax}

\newcommand\mc[1]{\multicolumn{2}{c|}{#1}} % handy shortcut macro

\begin{document}

\begin{table}[h] 
\setlength\extrarowheight{2pt} % optional -- for a more open "look"

\begin{tabular}{| l | *{4}{wc{\mylenA}|} *{6}{wc{\mylenB}|}} 
\hline 
TEXT & \mc{TEXT TEXT} & \mc{TEXT TEXT} 
     & \mc{TEX TEX} & \mc{TEX TEX} & \mc{TEX TEX} \\ \hline 
TEXT & \mc{TEIT TEIT} & \mc{TEIT TEIT} 
     & \mc{TEI TEI} & \mc{TEI TEI} & \mc{TEI TEI} \\ \hline 
TEXT & 0 &31 & 0 &31 & 0 &31 & 0 &31 & 0 &31 \\ \hline
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
TEXT & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 \\ \hline 
\end{tabular} 

\end{table}

\end{document}

答案2

每列都需要具有相同的宽度。实现此目的的一种方法是应用X-type column in tblr(需要tabularray)。唯一的缺点tblr是代码需要更长的编译时间。

编辑。
通常,X-type 列会创建段落单元格。这意味着超出列宽的内容会自动添加换行符。但是,在这种情况下,包含长文本的单元格会TEXT TEXT合并。因此,此功能被取消。如果您认为需要自动换行符,则必须在规范中添加固定宽度cellcell{1-2}{2,4,6,8,10} = {c=2}{<unit length here>}例如2cm

在所有tblr环境中,都可以明确添加换行符,例如{TEXT\\TEXT}。请注意,要使此功能有效,内容必须括在括号中{...}

\documentclass[a4paper,12pt]{book}
\usepackage{tabularray}

\begin{document}
\begin{table}[tbh]
    \begin{tblr}{
            width=\linewidth,
            colspec = {c *{10}{X[c]}},
            column{2-Z} = {colsep=2pt},
            rows = {rowsep=2pt},
            cells = {font=\footnotesize},
            cell{1-2}{2,4,6,8,10} = {c=2}{},
            vlines, hlines,
        }
        TEXT & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT & \\
        TEXT & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT &
             & TEXT TEXT & \\ 
        TEXT & 0 & 31 & 0 & 31 & 0 & 31 & 0 & 31 & 0 & 31 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\
        TEXT & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 & 1 &  1 \\ 
    \end{tblr}
\end{table}
\end{document}

在此处输入图片描述

相关内容