在表格列中对齐多个“小数点”(通过将一列扩展为多列?)

在表格列中对齐多个“小数点”(通过将一列扩展为多列?)

我正在处理一个具有多个“小数点”(历史单位和货币)的值的文档,并尝试创建一种可以正确对齐这些小数点的列类型(就像siunitx单个小数点一样)。

这些值可能来自宏或通过csvsimple,我最终想自动对它们求和(我有可以做到这一点的代码,但为了简洁起见,这里将其删除)。我还打算将单元格数量设为任意的。

我尝试使用collcellxparse将一个单元格的内容扩展为 3 个单元格,但不幸的是它不起作用(它会抛出Misplaced alignment tab character &错误)。我怀疑这与扩展规则有关......?

MWE(损坏):

\documentclass{article}

\usepackage{booktabs}
\usepackage{xparse}
\usepackage{collcell}
\usepackage{nicefrac}

\makeatletter

\newcommand\dms@get@values@internal[3]{%
    \edef\dms@value@A{#1}%
    \edef\dms@value@B{#2}%
    \edef\dms@value@C{#3}%
}

\NewDocumentCommand\dms@make@cells{ > {\SplitArgument { 2 } { . } } m }{%
    %\show#1%
    \dms@get@values@internal#1%
    \dms@value@A{}% Rdl%
    &% <- "Misplaced alignment tab character &" error here
    \dms@value@B{}% mrk%
    &% <- and here
    \dms@value@C{}% skl%
}

\newcolumntype{E}[1]{%
    % #1 = number of fields (TODO)
    >{\collectcell\dms@make@cells}%
    r%
    <{\endcollectcell}%
    @{.}%
    r%
    @{.}%
    r%
}

\makeatother

\begin{document}

\begin{tabular}{ r  E{3}  l }
    \toprule
    First & Rdl.mrk.skl & Last \\
    \midrule
    test & 1.2.3 & test \\
    test & 10.20.30 & test \\
    %test & 2.4.5\nicefrac{3/4} & test \\ % this breaks entirely
    \bottomrule
\end{tabular}

\end{document}

相关内容