将表格单元格按特定小数对齐而不影响标题和空单元格

将表格单元格按特定小数对齐而不影响标题和空单元格

我的代码和输出:

\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@{.}lmulticolumn对于这种用例似乎不起作用,因为它要求所有列具有相同的对齐方式(所以我无法应用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

使用booktabssiunitx在 内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}

小数的不确定性可能会有问题……

在此处输入图片描述

相关内容