siunitx 和垂直线

siunitx 和垂直线

我使用过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

我想知道您是否最好重新设计整个表格。目前,有很多额外的命令可以调整列条目的垂直宽度和水平位置。以下是一些建议;实施方法如下所示。

  • 看起来您想强制表格占据文本块的整个宽度。要实现这一点,请考虑使用 atabular*或 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}

相关内容