为什么以下代码没有产生预期的结果264pt
?e-TeX 维度表达式中不允许使用非整数作为因子吗?
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\tl_set:Nn\l_dimen_tl{120pt}
\tl_set:Nn\l_mult_tl{2.2}
\tl_set:Nx\l_result_tl{\dim_eval:n{\l_dimen_tl*\l_mult_tl}}
\l_result_tl %gives 240.0pt.2
\ExplSyntaxOff
\end{document}
答案1
e-TeX 维度表达式需要小数部分作为维度:您只能乘以整数和整数比率。因此
\tl_set:Nn\l_dimen_tl{120}
\tl_set:Nn\l_mult_tl{2.2pt}
\tl_set:Nx\l_result_tl{\dim_eval:n{\l_mult_tl*\l_dimen_tl}}
工作正常。(这当然是 e-TeX 的一般限制,并不是 LaTeX3 代码所独有的。)
答案2
新的 FPU 将于 2012 年 6 月底在 CTAN 上推出,它允许进行可扩展计算。因此,以您的示例(使用适当的维度寄存器而不是令牌列表)为例,
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\dim_set:Nn \l_tmpa_dim { 120pt }
\tl_set:Nn \l_mult_tl { 2.2 }
\tl_set:Nx \l_result_tl
{ \fp_to_dim:n { \l_tmpa_dim * \l_mult_tl } }
\l_result_tl % gives 264pt
\ExplSyntaxOff
\end{document}
答案3
尽管亚历山大在另一条评论中提到了他的解决方法,但为了完整性,我只想在这里提一下“简单”的解决方案:\dim_eval:n
只能使用实际的 TeX 维度寄存器进行计算,因此用实际的 TeX 维度寄存器替换用于保存维度的标记列表变量可以dim
解决问题:
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\dim_set:Nn \l_tmpa_dim {120pt}
\tl_set:Nn \l_mult_tl {2.2}
\tl_set:Nx \l_result_tl { \dim_eval:n { \l_mult_tl \l_tmpa_dim } }
\l_result_tl
\ExplSyntaxOff
\end{document}