我的代码和输出:
\begin{document}
\begin{tabular}{| r r@{.}l r@{.}l |}
\hline
& col&1 & col&2\\
row 1 & $1\,234$&$567\,891(2)$ & $123$&$4(5.6)$ \\
row 2 & $1\,234$&$567\,891\,2(34)$ & $123$&$456\,789\,12(3)$ \\
row 3 & & & $12$&$345\,6(7)$\\
\hline
\end{tabular}
\end{document}
问题:
我想将表格单元格按小数点对齐。由于这些单元格带有不确定性(其中一些单元格有额外的小数点,例如第 2 列的第一行),我希望能够手动选择用于对齐列的特定小数点。这意味着我不能使用像 这样的自动方法dcolumn
,至少就我所知是这样。
我目前正在使用这这个技巧很好用,但是有两个问题:
- 我需要能够从中排除我的标题(即我希望每个标题都是
c
并对应于两列r@{.}l
。multicolumn
对于这种用例似乎不起作用,因为它要求所有列具有相同的对齐方式(所以我无法应用r@{.}l
)。 - 我有一些单元格将保持为空(例如第 1 列中的最后一个单元格)。有没有办法去掉小数,即使用与列其余部分不同的描述符?
当然,只要它们能给我预期的结果,我很乐意接受与此方法不同的解决方案的答案!
答案1
也许是这样的——
平均能量损失
\documentclass{article}
\usepackage{booktabs}
\usepackage{dcolumn}
\begin{document}
\begin{tabular}{r *2{D{.}{.}{12}}}
\toprule
& \multicolumn{1}{c}{\textbf{col 1}} & \multicolumn{1}{c}{\textbf{col2}}\\ \midrule
row 1 & 1\,234.567\,891(2) & 123.4(5.6) \\
row 2 & 1\,234.567\,891\,2(34) & 123.456\,789\,12(3)\\
row 3 & & 12.345\,6(7)\\
\bottomrule
\end{tabular}
\end{document}
答案2
作为@cabohah 在评论中建议,我会用siunitix
功能(因此您不需要预先调整数字;siunitx
有很多选项可以单独完成...):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{siunitx}
\usepackage{booktabs}
\begin{document}
\sisetup{table-alignment-mode = marker, group-minimum-digits = 0}
\begin{tabular}{SSS}
\toprule
& col1 & col2 \\
\midrule
row 1 & 1234.567891(2) & 123.4(5.6) \\
row 2 & 1234.5678912(34)& 123.45678912(3) \\
row 3 & & 12.3456(7) \\
\bottomrule
\end{tabular}
\end{document}
okular
(不要看截图中线条的相对大小,有趣的抗锯齿...)
答案3
我不认为使用以下方法存在问题:
\documentclass{article}
\usepackage{dcolumn}
\begin{document}
\begin{tabular}{| r r@{.}l r@{.}l |}
\hline
& \multicolumn{2}{c}{col1} & \multicolumn{2}{c|}{col2}\\\hline
row 1 & $1\,234$&$567\,891(2)$ & $123$&$4(5.6)$ \\
row 2 & $1\,234$&$567\,891\,2(34)$ & $123$&$456\,789\,12(3)$ \\
row 3 & \multicolumn{2}{c}{} & $12$&$345\,6(7)$\\
\hline
\end{tabular}
\end{document}
但是你也可以使用一些更棘手的方法,例如:
\documentclass{article}
\usepackage{dcolumn}
\begin{document}
\begin{tabular}{| r r@{.}l r@{.}l |}
\hline
& col & 1 & \multicolumn{1}{r}{} & \phantom{0(0.0}\makebox[0pt][r]{col.2} \\\hline
row 1 & $1\,234$&$567\,891(2)$ & $123$&$4(5.6)$ \\
row 2 & $1\,234$&$567\,891\,2(34)$ & $123$&$456\,789\,12(3)$ \\
row 3 & \multicolumn{2}{c}{} & $12$&$345\,6(7)$\\
\hline
\end{tabular}
\end{document}
答案4
使用booktabs
和siunitx
在 内tabularray
。
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\UseTblrLibrary{siunitx}
\begin{document}
\begin{tblr}{colspec={@{}
l
S[table-format = 3.8(1.1), separate-uncertainty, table-align-uncertainty=false]
S[table-format = 3.8(1.1), separate-uncertainty]
S[table-format = 2.8(1)]
@{}},
row{1} = {guard,font=\bfseries}
}
\toprule
& col 1 & col 2 & col 3 \\ \midrule
row 1 & 1234.567891(2) & 123.4(5.6) & 123.4(5.6) \\
row 2 & 1234.5678912(34) & 123.45678912(3) & 123.45678912(3)\\
row 3 & & 12.3456(7) & 12.3456(7) \\
\bottomrule
\end{tblr}
\end{document}
小数的不确定性可能会有问题……