我需要对齐表格中的数字。这些数字是由包\Convert
中的命令生成的lengthconvert
。我想使用包S
中的一列siunitx
来对齐数字,但这不起作用。以下是 MWE。
报告的第一个错误是Argument of \tl_clear:N has an extra }
。我怀疑宏\Convert
读取时没有完全展开S
。我该如何修复这个问题?
\documentclass{minimal}
\usepackage{siunitx}
\usepackage{lengthconvert}
\begin{document}
\begin{tabular}{S}
\Convert[number-only, unit=cm]{100pt} \\
3.14 \\
2.71828
\end{tabular}
\end{document}
答案1
\Convert
尽管已定义该命令\DeclareExpandableDocumentCommand
(这是包中的一个错误),但它并不能完全扩展。
有一种更简单的方法,使用内置函数expl3
:
\documentclass{article}
\usepackage{siunitx}
% \usepackage{xparse} % already loaded by siunitx
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\convertdim}{mm}
{
\dim_to_decimal_in_unit:nn { #2 } { 1#1 }
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{S[table-format=1.5,group-four-digits]}
\convertdim{cm}{100pt} \\
3.14 \\
2.71828
\end{tabular}
\end{document}
您可以给出一个更精致的版本,其中说明小数位数(四舍五入):
\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\convertdim}{O{2}mm}
{
\fp_eval:n { round ( \dim_to_decimal_in_unit:nn { #3 } { 1#2 } , #1 ) }
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{S[table-format=1.5,group-four-digits]}
\convertdim{cm}{100pt} \\
\convertdim[0]{cm}{100pt} \\
\convertdim[1]{cm}{100pt} \\
\convertdim[2]{cm}{100pt} \\
\convertdim[3]{cm}{100pt} \\
\convertdim[4]{cm}{100pt} \\
\convertdim[5]{cm}{100pt} \\
3.14 \\
2.71828
\end{tabular}
\end{document}
请注意,\dim_to_decimal_in_unit:nn
最多返回五位小数(但最后一位数字不一定准确)。