表格的列宽取决于表格条目的宽度

表格的列宽取决于表格条目的宽度
  1. 有没有一种简单的方法来指定表格应具有一定宽度的列,使得每个新列的开头到前一列最长条目的末尾都有用户指定的、与列无关的距离?

  2. 有没有办法指定表中的所有列应具有相同的宽度,即最长表条目的宽度加上一些 epsilon(可能是或可能不是用户指定的)?

答案1

@1:您可以使用@{}符号在列之间插入空格。设置一个tabular并将列定义为的列{l@{\hspace{1cm}}l}将在两个左对齐列之间插入 1 厘米的空格,由于其性质,每个列的宽度为其各自最长条目的宽度。

@2:对于“可能不是用户指定的”* 的情况,使用tabu包有一个简单的解决方案。Atabu允许指定表格宽度并相应地调整类型列的宽度X。列宽确实不取决于最长条目的长度,但如果表格宽度(.7\textwidth在示例中)足够大,则您所说的 epsilon 将是将 n 列的宽度拉伸到指定表格宽度所需空间的 1/n。因此,只要确保表格宽度足够(例如,使用默认的 `\textwidth,您通常不希望超过该宽度),就可以获得所需的结果。缺点是表格的宽度不会小于指定的宽度

评论

  • 可以防止列中出现换行X,例如,通过将文本插入到\mbox
  • 下面显示的代码还包含 (1) 中提出的列间距规范,您可以根据需要进行设置。在示例中,\hspace仅用于演示目的;如果为 0 厘米,@{}则可直接使用。由于指定了 0 厘米的列间距,因此两列之间的距离完全取决于它们的宽度(通过在列定义中用\hspace垂直线替换来观察@{}|@{})。
  • 使用tabu,您还可以指定不是所有列都等宽,例如第一列的宽度应该是其他列的两倍。这可以通过在列定义中相应地设置可选参数来实现,例如将X[2]第一列设置为 。

例子

在此处输入图片描述

代码

\documentclass{article}
\usepackage{tabu}
\usepackage{booktabs}

\begin{document}    
    \begin{tabu} to .7\textwidth {  X[1]@{\hspace{0cm}}
                                    X[1]@{\hspace{0cm}}
                                    X[1]}
        a & b & c\\\toprule
        123
            & some long text
            & 123\\\bottomrule
    \end{tabu}      
\end{document}

笔记

*您的案例“epsilon 由用户指定”要求表格宽度不是指定而是动态确定。目前我还没有找到一种简单的方法可以在可变宽度的表格中设置等宽列,但可能其他人会找到(参见附录)。

**可以使用 来实现类似的结果tabularxtabu但是它具有更方便的用户界面。

***您可以指定列宽最大限度通过添加减号作为前缀来调整值。但是,以这种方式指定的列宽不再同步调整,据我所知,您无法为整个表格指定最大宽度。


附录

我应该补充一点,第一个脚注中的注释是基于我隐含的但可能是错误的假设,即在设置表格时您不知道最长条目的长度。如果这不是必需的,那么解决方案很简单:您只需测量包含最长条目的框的长度,然后根据此长度定义列。

在下面给出的代码中,\setwidth调用一个命令,使用文本和尺寸作为参数。它设置\width,然后将其用作每列的宽度。除了条目的文本外,示例中显示的两个表定义是相同的。

在此处输入图片描述

\documentclass{article}
\usepackage{calc}
\usepackage{booktabs}
\usepackage{lipsum} 

\newlength\width

%measure length of a given text (#1) and add some space (#2)
\newcommand{\setwidth}[2]{%
    \settowidth{\width}{#1}
    \setlength{\width}{\width+#2}%
}

\begin{document}

\setwidth{short entry}{10pt}    

\lipsum[75]

\begin{table}[ht]
    \begin{tabular}{p{\width}p{\width}p{\width}}
    a & b & c\\\toprule
    1 & short entry & 3\\\bottomrule
    \end{tabular}
\end{table}

\lipsum[75] 

\setwidth{considerably longer cell entry}{10pt} %which will make the table overly wide

\begin{table}[ht]
    \begin{tabular}{p{\width}p{\width}p{\width}}
    a & b & c\\\toprule
    1 & considerably longer cell entry & 3\\\bottomrule
    \end{tabular}
\end{table}

\lipsum[75] 

\end{document}

相关内容