LaTeX3:\dim_eval:n 和 e-TeX 维度表达式

LaTeX3:\dim_eval:n 和 e-TeX 维度表达式

为什么以下代码没有产生预期的结果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}

相关内容