![在表格列中对齐多个“小数点”(通过将一列扩展为多列?)](https://linux22.com/image/405913/%E5%9C%A8%E8%A1%A8%E6%A0%BC%E5%88%97%E4%B8%AD%E5%AF%B9%E9%BD%90%E5%A4%9A%E4%B8%AA%E2%80%9C%E5%B0%8F%E6%95%B0%E7%82%B9%E2%80%9D%EF%BC%88%E9%80%9A%E8%BF%87%E5%B0%86%E4%B8%80%E5%88%97%E6%89%A9%E5%B1%95%E4%B8%BA%E5%A4%9A%E5%88%97%EF%BC%9F%EF%BC%89.png)
我正在处理一个具有多个“小数点”(历史单位和货币)的值的文档,并尝试创建一种可以正确对齐这些小数点的列类型(就像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}