我使用过siunitx
,这样表格中的数字就可以对齐了。但是,两列之间丢失了一条垂直线。此外,最后一列的数字没有垂直对齐。如何修复这个问题?谢谢!
\documentclass{article}
\usepackage{array}
\usepackage{siunitx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\begin{table}
\makebox[\linewidth][c]{\begin{tabular}{| L{4.2cm} | C{2.6cm} | S[table-format=9.6] | C{2.6cm} | C{2.6cm} | C{2.6cm} |}
\hline
& \bfseries 1988& {\centering} {\bfseries 1989} & \bfseries 1990 & \bfseries Change \\ [2ex]
\hline
Score & 249 & 234 & 266 & +17 \\ [1.8ex]
\hline
Percent High & 14 & 9 & 26 & +12 \\ [1.8ex]
\hline
\end{tabular}}
\end{table}
\end{document}
答案1
这是Mico 的精彩回答tabular
。可以通过重新定义缩放因子来增加内部支柱(由代码自动设置),而不是显式支柱\arraystretch
。第二个示例使用较少的线条和较小的拉伸因子:
\documentclass{article}
\usepackage{tabularx}
\usepackage{siunitx}
\sisetup{retain-explicit-plus}
\begin{document}
\begin{table}[h!]
\renewcommand*{\arraystretch}{1.5}
\newcommand*{\thead}[1]{%
\multicolumn{1}{X|}{\centering\textbf{#1}}%
}%
\sisetup{table-format=3.0}%
\begin{tabularx}{\linewidth}{|l|S|S|S|S[table-format=4.0]|}
\hline
& \thead{1988} & \thead{1989} & \thead{1990} & \thead{Change} \\
\hline
Score & 249 & 234 & 266 & +17 \\
\hline
Percent High & 14 & 9 & 26 & +12 \\
\hline
\end{tabularx}
\end{table}
\begin{table}[h!]
\renewcommand*{\arraystretch}{1.2}
\newcommand*{\thead}[1]{%
\multicolumn{1}{X}{\centering\textbf{#1}}%
}%
\sisetup{table-format=3.0}%
\begin{tabularx}{\linewidth}{l|SSSS[table-format=4.0]}
& \thead{1988} & \thead{1989} & \thead{1990} & \thead{Change} \\
\hline
Score & 249 & 234 & 266 & +17 \\
Percent High & 14 & 9 & 26 & +12 \\
\end{tabularx}
\end{table}
\end{document}
评论:
数字使用
S
包的列说明符设置siunitx
,但表格是tabularx
,其中标题行使用X
带有的列\centering
。这样,列与对齐的数字一起水平居中。标准字体有一个相当大的加号,因此我不得不
table-format=4.0
在此列中使用它来避免过多的\hbox
警告。还有
\extrarowheight
一些包array
可以在行顶部添加一些空间。
答案2
我想知道您是否最好重新设计整个表格。目前,有很多额外的命令可以调整列条目的垂直宽度和水平位置。以下是一些建议;实施方法如下所示。
看起来您想强制表格占据文本块的整个宽度。要实现这一点,请考虑使用 a
tabular*
或 atabularx
环境,而不是将表格的内容强制放入\makebox
指令中 —— 无论如何,这都会给您比 更宽的东西\textwidth
。如果您想继续使用垂直线在视觉上分隔各列,请考虑插入“支柱”,而不是使用诸如的指令
\\[1.8ex]
。考虑彻底废除垂直规则。相信我,它们不会被遗漏。试一试吧。
甚至比使用 struts 更好的是,考虑加载
booktabs
包并使用其命令\toprule
、\midrule
和\bottomrule
。您将自动获得这些行上方和下方的适当间距。如果您不想使用
tabular*
环境,您可以使用tabularx
环境。为了正确对齐每列的数字条目,您可以使用
siunitx
包及其S
列类型。
\documentclass{article}
\usepackage{booktabs,tabularx,siunitx}
\sisetup{table-format=3.0,retain-explicit-plus=true}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcommand\TB{\rule[-1.5ex]{0ex}{4.7ex}} % "top&bottom" strut
\begin{document}
\begin{table}[t]
\caption{Original form of table, minimally fixed. Note that the table is much too wide.}
\makebox[\linewidth][c]{\begin{tabular}{| L{4.2cm} | C{2.6cm} | S[table-format=9.6] | C{2.6cm} | C{2.6cm} | C{2.6cm} |}
\hline
& \bfseries 1988& {\centering} {\bfseries 1989} & \bfseries 1990 & \bfseries Change \\ [2ex]
\hline
Score & 249 & 234 & 266 & +17 \\ [1.8ex]
\hline
Percent High & 14 & 9 & 26 & +12 \\ [1.8ex]
\hline
\end{tabular}}
\end{table}
\begin{table}[h!]
\caption{Correct width, use of \texttt{tabular*} environment and explicit struts, \texttt{c}~column types}
\begin{tabular*}{\textwidth}{ |l|@{\extracolsep{\fill}}c|c|c|c| }
\hline
\TB & \bfseries 1988& {\bfseries 1989} & \bfseries 1990 & \bfseries Change \\
\hline
Score\TB & 249 & 234 & 266 & +17 \\
\hline
Percent High\TB & 14 & 9 & 26 & +12 \\
\hline
\end{tabular*}
\end{table}
\begin{table}[h!]
\caption{\texttt{tabular*} environment, \texttt{c}~column types, use \texttt{booktabs} package's rules (struts no longer needed!), get rid of vertical lines}
\begin{tabular*}{\textwidth}{ l@{\extracolsep{\fill}}cccc }
\toprule
& \bfseries 1988& {\bfseries 1989} & \bfseries 1990 & \bfseries Change \\
\midrule
Score & 249 & 234 & 266 & +17 \\
Percent High & 14 & 9 & 26 & +12 \\
\bottomrule
\end{tabular*}
\end{table}
\begin{table}[h!]
\caption{\texttt{tabularx} environment, centered columns, \texttt{booktabs} package in use}
\begin{tabularx}{\textwidth}{ lYYYY }
\toprule
& \bfseries 1988& {\bfseries 1989} & \bfseries 1990 & \bfseries Change \\
\midrule
Score & 249 & 234 & 266 & +17 \\
Percent High & 14 & 9 & 26 & +12 \\
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[h!]
\caption{\texttt{tabular*} environment, columns of type \texttt{S}, \texttt{booktabs} package in use}
\begin{tabular*}{\textwidth}{ l @{\extracolsep{\fill}} *{4}{S} }
\toprule
& \bfseries 1988& {\bfseries 1989} & {\bfseries 1990} & {\bfseries Change} \\
\midrule
Score & 249 & 234 & 266 & +17 \\
Percent High & 14 & 9 & 26 & +12 \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}