在带有彩色行的表格中对齐小数时出现问题

在带有彩色行的表格中对齐小数时出现问题

我在制作“漂亮”的桌子时遇到了问题

目的是使普通行的背景颜色与黑色文本交替,以方便阅读,标题具有蓝色背景和白色文本以使其突出,并且数字按小数点排列,“名义”列由垂直线分隔

我认为这些是 LaTeX 代码的相关行

\usepackage{color,colortbl}

\renewcommand{arrayrulewidth}{1.5}

\definecolor{headercolor}{rgb}{0.392,0.584,0.929}
\definecolor{oddrowcolor}{rgb}{0.961,1.000,0.980}
\definecolor{evenrowcolor}{rgb}{0.902,0.902,0.980}
\definecolor{white}{rgb}{1.0,1.0,1.0}

\begin{table}{!htbp}
\large
\begin{caption}
\begin{tabular}{|r@{.}l|r@{.}l|}
\hline
\multicolumn{2}{|c|}{\cellcolor{headercolor}{\color{white}{column 1 header}}} & \multicolumn{2}{|c|}{\cellcolor{headercolor}{\color{white}{column 2 header}}} \\
\hline
\rowcolor{oddrowcolor}
-0&333 & 1&444 \\
\rowcolor{evenrowcolor}
1&001 &  10.02 \\
\rowcolor{oddrowcolor}
0& & 401&32 \\
\hline
\end{tabular}
\end{center}
\caption{\label{table:example} Some caption.}
\end{table}

我遇到的问题是

  1. \rowcolor对小数部分进行对齐时效果不佳(将“名义”列在小数点处拆分,并对r@{.}l组成“名义”列的“实际”列进行对齐),基本上左侧(带对齐r)实际列中最小数字的左半部分和小数点被隐藏
  2. 标题中的垂直线显示为双倍粗细(是正常行中的两倍粗细)

如果有人能帮助我,我将不胜感激。

顺便说一句,我正在使用pdflatex附带的版本进行编译redhat 5.X(不确定 X 是什么,而且我无法升级机器的 LaTeX,因为我不是管理员,而且必须在这台机器上进行编译)。

答案1

这似乎是siunitx包的S列类型,我在下面使用它作为

    \begin{tabular}{|S[table-format=1.0]S[table-format=3.0]S[table-format=3.2]S[table-format=3.0]|}

enter image description here

S类型采用可选参数,您可以在其中指定格式选项;我已经使用了

table-format=<number of integers before decimal>-<number of integers after decimal>

平均能量损失

\documentclass{article}
\usepackage{siunitx}
\usepackage{colortbl}
\definecolor{headercolor}{rgb}{0.392,0.584,0.929}
\definecolor{oddrowcolor}{rgb}{0.961,1.000,0.980}
\definecolor{evenrowcolor}{rgb}{0.902,0.902,0.980}
\definecolor{white}{rgb}{1.0,1.0,1.0}

\begin{document}

\begin{table}[!htbp]
    \centering
    \caption{SIunitx}
    \label{table:example} 
    \begin{tabular}{|S[table-format=1.0,parse-numbers=false]|S[table-format=3.0,parse-numbers=false]|S[table-format=3.2]|S[table-format=3.0]|}
        \hline
        \multicolumn{2}{|c|}{\cellcolor{headercolor}{\color{white}{column 1 header}}} & \multicolumn{2}{c|}{\cellcolor{headercolor}{\color{white}{column 2 header}}} \\
        \hline
        \rowcolor{oddrowcolor}
        -0 & 333 & 1     & 444 \\
        \rowcolor{evenrowcolor}
        1  & 001 & 10.02 &     \\
        \rowcolor{oddrowcolor}
        0  &     & 401   & 32  \\
        \hline
    \end{tabular}
\end{table}

\end{document}

其他一些注意事项:

如果您无权访问该siunitx包,则可以使用该dcolumn包实现类似的结果,如下所示

enter image description here

\documentclass{article}
\usepackage{dcolumn}
\usepackage{colortbl}
\definecolor{headercolor}{rgb}{0.392,0.584,0.929}
\definecolor{oddrowcolor}{rgb}{0.961,1.000,0.980}
\definecolor{evenrowcolor}{rgb}{0.902,0.902,0.980}
\definecolor{white}{rgb}{1.0,1.0,1.0}

\newcolumntype{d}[1]{D{.}{.}{#1}}


\begin{document}

\begin{table}[!htbp]
    \centering
    \caption{dcolumn}
    \label{table:example} 
    \begin{tabular}{|d{0}|d{0}|d{2}|d{0}|}
        \hline
        \multicolumn{2}{|c|}{\cellcolor{headercolor}{\color{white}{column 1 header}}} & \multicolumn{2}{c|}{\cellcolor{headercolor}{\color{white}{column 2 header}}} \\
        \hline
        \rowcolor{oddrowcolor}
        -0 & 333 & 1     & 444 \\
        \rowcolor{evenrowcolor}
        1  & 001 & 10.02 &     \\
        \rowcolor{oddrowcolor}
        0  &     & 401   & 32  \\
        \hline
    \end{tabular}
\end{table}
\end{document}

答案2

cmhughes 的回答仍然有效,但是我猜你想要这样的输出(虽然你.在代码中错过了一个&应该出现的输出)。


我还添加了一个示例(在开头),它使用xcolor命令\rowcolors来获取交替的行颜色,这样您就不必手动应用它们(如果您有二十行,您会怎么做?)。

它有三个必需参数:

  • 第一行获取奇数行颜色,
  • 奇数行颜色,以及
  • 偶数行颜色。

\rowcolors{1}{evenrowcolor}{oddrowcolor}

第一行的颜色将被其自己的命令覆盖\rowcolor


与您的问题松散相关,我添加了表格示例

  • 不要使用线条和颜色
    • 仅限颜色
    • 仅由包提供水平线booktabs(在我看来,这会产生更干净/更漂亮的输出,但您的里程可能会有所不同)
  • table-format重点突出了选项的用途siunitx

代码

\documentclass{article}
\usepackage{siunitx}
\usepackage[table]{xcolor}
\definecolor{headercolor}{rgb}{0.392,0.584,0.929}
\definecolor{oddrowcolor}{rgb}{0.961,1.000,0.980}
\definecolor{evenrowcolor}{rgb}{0.902,0.902,0.980}
\definecolor{white}{rgb}{1.0,1.0,1.0}
\usepackage{booktabs}
\begin{document}
\centering % for this example

{%
\rowcolors{1}{evenrowcolor}{oddrowcolor}%
\begin{tabular}{S[table-format=+1.2]S[table-format=3.3]}
    \rowcolor{headercolor}{\color{white}{column 1 header}} & {\color{white}{column 2 header}} \\
    -0.333                                                 & 1.444                            \\
    1.001                                                  & 10.02                            \\
    0                                                      & 401.32                           \\
\end{tabular}%
}

\vspace{2.4em} % for this example
\begin{tabular}{S[table-format=+1.2]S[table-format=3.3]}
    \rowcolor{headercolor}{\color{white}{column 1 header}} & {\color{white}{column 2 header}} \\
    \rowcolor{oddrowcolor} -0.333                          & 1.444                            \\
    \rowcolor{evenrowcolor} 1.001                          & 10.02                            \\
    \rowcolor{oddrowcolor}  0                              & 401.32                           \\
\end{tabular}

\vspace{2.4em} % for this example
\begin{tabular}{|S[table-format=+1.2]|S[table-format=3.3]|}
    \hline
    \rowcolor{headercolor}{\color{white}{column 1 header}} & {\color{white}{column 2 header}} \\ \hline
    \rowcolor{oddrowcolor} -0.333                          & 1.444                            \\
    \rowcolor{evenrowcolor} 1.001                          & 10.02                            \\
    \rowcolor{oddrowcolor}  0                              & 401.32                           \\ \hline
\end{tabular}

\vspace{2.4em} % for this example
\begin{tabular}{S[table-format=+1.2]S[table-format=3.3]}
    \toprule
    {column 1 header} & {column 2 header} \\ \midrule
    -0.333            & 1.444             \\
    1.001             & 10.02             \\
    0                 & 401.32            \\ \bottomrule
\end{tabular}

\vspace{2.4em} % for this example
\begin{tabular}{
    S
    S[table-format = 2.2]
    S[table-format = 2.2(1)]
    S[table-format = +2.2]
    S[table-format = 2.2e1]
}
    \toprule
    {Values} & {Values} & {Values} & {Values} &  \\ \midrule
    2.3      & 2.3      & 2.3(5)   & 2.3      & 2.3e8   \\
    34.23    & 34.23    & 34.23(4) & 34.23    & 34.23   \\
    56.78    & 56.78    & 56.78(3) & -56.78   & 56.78e3 \\
    3,76     & 3,76     & 3.76(2)  & +-3.76   & e6      \\ \bottomrule
\end{tabular}
\end{document}

输出

enter image description here

答案3

非常感谢您的帮助,Qrrbrbirlbel 关于小数点对齐的说法是正确的。我需要执行此操作的机器上没有安装 siunitx,所以这是我要采用的解决方案(我不知道 dcolumn,所以感谢快速谷歌搜索找到了一个 pdf 文档,其中提到使用 D{.}{.}{-1} 会使其在小数点上居中,而不是用 N 位小数右对齐。

\documentclass{article}
\usepackage{dcolumn}
\usepackage[table]{xcolor}
\definecolor{headercolor}{rgb}{0.392,0.584,0.929}
\definecolor{oddrowcolor}{rgb}{0.961,1.000,0.980}
\definecolor{evenrowcolor}{rgb}{0.902,0.902,0.980}
\definecolor{white}{rgb}{1.0,1.0,1.0}
\newcolumntype{d}{D{.}{.}{-1}}
\begin{document}

{
\rowcolors{1}{evenrowcolor}{oddrowcolor}
\begin{tabular}{|d|d}
\multicolumn{1}{|c|}{\cellcolor{headercolor}\color{white}{column 1 header}} & \multicolumn{1}{c|}{\cellcolor{headercolor}\color{white}{column 2 header}} \\
-0.333                                                 & 1.444 \\
1.001                                                  & 10.02 \\
0                                                      & 401.32 \\
\end{tabular}
}
\end{document}

相关内容