我在制作“漂亮”的桌子时遇到了问题
目的是使普通行的背景颜色与黑色文本交替,以方便阅读,标题具有蓝色背景和白色文本以使其突出,并且数字按小数点排列,“名义”列由垂直线分隔
我认为这些是 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}
我遇到的问题是
\rowcolor
对小数部分进行对齐时效果不佳(将“名义”列在小数点处拆分,并对r@{.}l
组成“名义”列的“实际”列进行对齐),基本上左侧(带对齐r
)实际列中最小数字的左半部分和小数点被隐藏- 标题中的垂直线显示为双倍粗细(是正常行中的两倍粗细)
如果有人能帮助我,我将不胜感激。
顺便说一句,我正在使用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]|}
该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}
其他一些注意事项:
- “双倍厚度”的原因是因为您指定了两次垂直线,每次一次
\multicolumn
;删除其中一个(如我上面所做的那样),您将看到厚度就像“单倍”一样 - 我已经使用了
\centering
哪个更好,center
正如在我应该对图形和表格使用 center 还是 centering ? - 我把标题放在上面,
table
正如讨论的那样为什么表格标题应放在表格上方? - 很多人会推荐不是使用垂直线;请参阅
booktabs
文档中的示例。
如果您无权访问该siunitx
包,则可以使用该dcolumn
包实现类似的结果,如下所示
\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}
输出
答案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}