我喜欢表格有居中的列(例如|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
允许您修改列类型以将内容排版为居中而不是完全对齐的包tabularx
。X
(我在这里假设您希望所有列都等宽。)
\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) 的总宽度tabularx
为totalwidth
,(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}