我正在处理一个具有多个“小数点”(历史单位和货币)的值的文档,并尝试创建一种可以正确对齐这些小数点的列类型(就像siunitx
单个小数点一样)。
这些值可能来自宏或通过csvsimple
,我最终想自动对它们求和(我有可以做到这一点的代码,但为了简洁起见,这里将其删除)。我还打算将单元格数量设为任意的。
我尝试使用collcell
和xparse
将一个单元格的内容扩展为 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}