我正在学习 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
来实现。并且您可以使用函数创建命令的变体。e
e
\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}