Latex3 在 longtblr(tabularray)中进行浮点计算

Latex3 在 longtblr(tabularray)中进行浮点计算

我正在学习 LaTeX3,并尝试在 longtblr 环境中对浮点数进行简单的计算。

问题是我无法动态计算每行的小计。全局总计工作正常,但小计只计算一次。(第一行的 l_subtot_fp 应该是 6,第二行的 l_subtot_fp 应该是 8)

第二个问题是:如何添加包含对齐字符“&”的行?如果我添加它们,我会收到“错位对齐制表符 &。”的错误。

我怀疑 TeX 扩展是一个谜,有人可以澄清一下吗?

在此先感谢任何有帮助的回答!

\documentclass{article}
\usepackage{tabularray}

\ExplSyntaxOn
\tl_new:N \g_rowlist_tl
\fp_set:Nn \g_total_fp {0}

\newcommand*{\NewRow}[3]{
    \fp_set:Nn \l_subtot_fp {#2}
    \fp_set:Nn \l_subtot_fp { \l_subtot_fp * #3 }
    % Next line should contain three "&" like this:
    % \tl_put_right:Nn \g_rowlist_tl {#1 & #2 & #3 & {\fp_use:N \l_subtot_fp}\\}
    \tl_put_right:Nn \g_rowlist_tl {#1 #2 #3 {\fp_use:N \l_subtot_fp}\\}
    \fp_add:Nn \g_total_fp {\l_subtot_fp}
}

\begin{document}

\NewRow{A}{3}{2}
\NewRow{B}{2}{4}

% Dynamic version (NOT WORKING)
\begin{longtblr}{cccc}
    \tl_use:N \g_rowlist_tl
    Total &&& \fp_eval:n {\g_total_fp}
\end{longtblr}

% What I would like to generate
\begin{longtblr}{cccc}
    A & 3 & 2 & 6\\
    B & 2 & 4 & 8\\
    Total &&& 14
\end{longtblr}

\end{document}
\ExplSyntaxOff

答案1

functional虽然我认为使用库在表格内进行编程会更好tabularray,但你仍然可以使用expl3。你可以将这个答案与另一个答案对于 OP 提出的类似问题。


以下是针对问题中的代码的一些建议:

(1)\ExplSyntaxOn并且\ExplSyntaxOff应该只包含expl3代码。放入\begin{document}其中可能会引起问题。此外,后面的任何代码都会被省略,因此在后面\end{document}写代码是没有意义的。\ExplSyntaxOff

(2)\fp_set:Nn可以在第二个参数中执行多种计算。因此

\fp_set:Nn \l_subtot_fp {#2}
\fp_set:Nn \l_subtot_fp { \l_subtot_fp * #3 }

可以简化为

\fp_set:Nn \l_subtot_fp {#2 * #3}

(3) 您需要先扩展 的值,\l_subtot_fp然后再将其添加到 中。这可以通过参数的变体\g_rowlist_tl来实现。并且您可以使用函数创建命令的变体。ee\cs_generate_variant:Nn

expand=\g_rowlist_tl(4)由于您想在 tabularray 表内扩展它,因此需要使用外部规范。

以下是修改后的代码,可产生预期的结果:

\documentclass{article}
\usepackage{tabularray}

\ExplSyntaxOn
\tl_new:N \g_rowlist_tl
\fp_set:Nn \g_total_fp {0}
\cs_generate_variant:Nn \tl_put_right:Nn {Ne}
\newcommand*\NewRow[3]{
  \fp_set:Nn \l_subtot_fp {#2 * #3}
  \tl_put_right:Nn \g_rowlist_tl {#1 & #2 & #3 &}
  \tl_put_right:Ne \g_rowlist_tl {\fp_use:N \l_subtot_fp}
  \tl_put_right:Nn \g_rowlist_tl {\\}
  \fp_add:Nn \g_total_fp {\l_subtot_fp}
}
\ExplSyntaxOff

\begin{document}

\NewRow{A}{3}{2}
\NewRow{B}{2}{4}

% Dynamic version (NOW WORKING)
\ExplSyntaxOn
\begin{longtblr}[expand=\g_rowlist_tl]{cccc}
    \g_rowlist_tl
    Total &&& \fp_use:N \g_total_fp
\end{longtblr}
\ExplSyntaxOff

% What I would like to generate
\begin{longtblr}{cccc}
    A & 3 & 2 & 6\\
    B & 2 & 4 & 8\\
    Total &&& 14
\end{longtblr}

\end{document}

在此处输入图片描述

相关内容