具有特定宽度的居中列的表格?

具有特定宽度的居中列的表格?

我喜欢表格有居中的列(例如|c|c|c|)。

但是,我有宽度限制。强制表格在特定宽度范围内的最明显解决方案是执行|p{2.5cm}|p{2.5cm}|等。但是,这会使文本偏向一侧而不是居中。

理想情况下,我想说“我的桌子总共有 10 厘米宽”和“列将居中”。有什么办法可以做到这一点吗?

下一个最好的东西,我可以制作一个表格,指定每列的宽度,并且各列居中吗?

答案1

有两种方法可以实现你想要的。第一种方法是像 Maarten 的答案中那样,它要求你指定每列的宽度。\arraybackslash如果居中的列是表格中的最后一列,则需要使用。请参阅array有关此信息或更多信息,请参阅包文档\\ 和 \tabularnewline 之间的区别

第二种方法是使用tabulary包,它允许您定义将填满表格最大宽度的列。以下是两者的示例。我将其用作K列类型,以将其与tabulary环境中定义的 C 列类型区分开来。

请注意,我在示例代码中仅使用了\hline显示表格宽度的功能。对于大多数表格,我强烈推荐该booktabs软件包及其各种规则命令,这些命令具有更好的间距和宽度参数。

\documentclass{article}
\usepackage{array}
\usepackage{tabulary}
\newcolumntype{K}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
table with centred columns of specified width
\bigskip

\begin{tabular}{K{2cm}K{2cm}}
\hline
foo & bar \\
foobar & barfoo \\
\hline
\end{tabular}
\bigskip

table of 5cm width, centred columns
\bigskip

\begin{tabulary}{5cm}{CC}
\hline
foo & bar \\
foobar & barfoo\\
A much wider column  & c \\
\hline
\end{tabulary}
\bigskip

as we make the total width wider, the columns adjust
\bigskip

\begin{tabulary}{8cm}{CC}
\hline
foo & bar \\
foobar & barfoo\\
A much wider column  & c \\
\hline
\end{tabulary}
\end{document}

代码输出

答案2

当我发布这篇文章时,我没有意识到 Mico 已经发布了回答使用tabularx比我按下submit按钮早了 3 分钟。因此, 表格型应该去Mico。

在 Mico 的同意下,我留下了这个答案,因为它也展示了使用 书签以创建更美观的水平线并省去垂直线。这使您能够制作专业品质的表格。有关更多信息,请查看 booktabs 手册 提供了许多关于如何有效地在表格中呈现信息的建议。(该手册也有 法语德语

为了完整性,这里有一个tabularx与相结合的解决方案booktabs

正如 Mico 所解释的,tabularx允许您指定表格的总宽度。然后,您的列中至少有一列必须X扩展以填充宽度。在本例中,我使用 来array定义此列类型的居中版本,C并为表格指定 3 个这样的列。

booktabs提供增强的间距和用于绘制水平线的附加命令。在专业质量的表格中,顶部和底部的线应该比表格内的线更重。因此,booktabs提供和\toprule,如下所示。有关其他可能性,包括和 线修剪,请参阅出色的包文档。\midrule\bottomrule\cmidrule

\documentclass{article}
\usepackage{array,booktabs,tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
  \begin{tabularx}{\linewidth}{*{3}{C}}
    \toprule
    Header 1 & Header 2 & Header 3\\\midrule
    This is some text which will be longer than the width of the column. & This is some more text which will be longer than the width of this second column. & And here is some more text for the third column.\\\bottomrule
  \end{tabularx}
\end{document}

设置宽度表格

答案3

你写了,

理想情况下,我想说“我的桌子总共有 10 厘米宽”和“列将居中”。有什么办法可以做到这一点吗?

答案:是的——借助tabularx包,它提供了tabularx允许您指定表格状结构整体宽度的环境,以及array允许您修改列类型以将内容排版为居中而不是完全对齐的包tabularxX(我在这里假设您希望所有列都等宽。)

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx} % also loads 'array' package
\newcolumntype{C}{>{\centering\arraybackslash}X} % centered version of 'X' columns
\begin{document}

\begin{tabularx}{10cm}{|C|C|C|}
\hline
some text & more text & a huge amount of additional text\\
\hline
\end{tabularx}
\end{document}

请注意,如果 (i) 的总宽度tabularxtotalwidth,(ii) 有n列,并且 (iii) 每列由垂直条分隔(因此,n+1总共有垂直条),则可用宽度每列等于

(totalwidth-2*n*\tabcolsep-(n+1)*\arrayrulewidth)/n

答案4

使用该array包您可以指定新的列类型:

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

梅威瑟:

\documentclass{article}
\usepackage{array}

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\begin{document}

\begin{tabular}{|C{1cm}|C{3cm}|C{1cm}|}
    \dots & \dots & \dots
\end{tabular}

\end{document}

相关内容