使用 lengthconvert 与 siunitx S 列

使用 lengthconvert 与 siunitx S 列

我需要对齐表格中的数字。这些数字是由包\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最多返回五位小数(但最后一位数字不一定准确)。

相关内容