我读过有关tabular*
环境的内容,但同样的例子反复出现。我想知道的是,当转换示例时,为什么第 2 列和第 3 列会失去居中?我见过使用tabularx
和的解决方案array
,但示例中的解决方案似乎接近正确,所以我想知道额外的步骤以使其符合预期。
示例及其输出的链接是:WikiBooks LaTeX 表格。这是本节的后半部分。
tabular*
如果有人能提供关于如何在搜索引擎中搜索而不*
将其作为通配符的提示,我也会很感激。
答案1
我相信你正在谈论下表:
\begin{tabular*}{0.75\textwidth}{@{\extracolsep{\fill}} | c | c | c | r | }
\hline
label 1 & label 2 & label 3 & label 4 \\
\hline
item 1 & item 2 & item 3 & item 4 \\
\hline
\end{tabular*}
告诉编译器在每个后续列(从第二列开始)的左侧@{\extracolsep{\fill}}
添加额外的橡胶长度( ),以便最终表格具有正确的宽度。这个间距也会添加到最后一列,但您看不到差异,因为它已经右对齐了。如果您使用包中的命令,您会注意到添加的额外空间不计入单元格的内容,而是计入列分隔符(如下例所示)。\fill
cellcolor
colortbl
\documentclass{article}
\usepackage{colortbl}
\begin{document}
\begin{tabular*}{0.75\textwidth}{@{\extracolsep{\fill}} | c | c | c | r | }
\hline
label 1 & label 2 & label 3 & label 4 \\
\hline
item 1 &\cellcolor{green} item 2 & item 3 & \cellcolor{green} item 4 \\
\hline
\end{tabular*}
\end{document}
修复此问题的一种方法是使用p
-column 说明符,它允许固定宽度的列。
\begin{tabular*}{0.75\textwidth}{| c *3{| p{0.175\textwidth}} | }
\hline
label 1 & \centering label 2 & \centering label 3 & \raggedleft label 4 \tabularnewline
\hline
item 1 & item 2 & item 3 & item 4 \tabularnewline
\hline
\end{tabular*}
但这存在两个问题:
- 您需要通过反复试验的过程来获得正确的列宽(因为最好将任务留给计算机来完成)。
- 由于
p
列默认为左对齐。因此您需要单独指定每个单元格的对齐方式(如我在上例中所做的那样)。这会将表格内容与许多格式化命令混在一起,我更喜欢将它们分开。
获得正确表格的更简单方法是使用tabularx
或array
包,如维基百科文章
这里我们可以使用X
-column 定义自动调整列宽。同样,由于X
-columns 设置为p
-columns,因此它们左对齐。我们需要指定正确的对齐方式。这里我们可以使用 '\newcolumntype' 命令来定义我们的自定义列定义。
\documentclass{article}
\usepackage{tabularx}
\begin{document}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\begin{tabularx}{0.75\textwidth}{ | c | C | C | R | }
\hline
label 1 & label 2 & label 3 & label 4 \\
\hline
item 1 & item 2 & item 3 & item 4 \\
\hline
\end{tabularx}
\end{document}
您还可以使用 -columns 做一些巧妙的技巧,X
例如指定两列的相对宽度。我建议您查看手册以了解更多详细信息。