如何将跳过长度的所有组成部分乘以相同的数字?

如何将跳过长度的所有组成部分乘以相同的数字?

我正在寻找一种方法,简单地将跳跃表达式中的所有组件(自然长度加上正长度减去负长度)乘以相同的数字。我在下面的 MWE 中尝试了一些示例,但没有成功。当然,我可以创建 3 个不同的 dimen 表达式,然后将每个 dimen 表达式乘以一个数字,然后将每个结果输入到跳跃表达式中,但我正在寻找一种更简单、更方便的解决方案。在我的 MWE 中,\skip_show:N当它不产生错误时仅显示自然长度。

\documentclass{article}
\ExplSyntaxOn
\skip_const:Nn \c_mymodule_myskipi_skip { 36pt plus 18pt minus 12pt }
\skip_const:Nn \c_mymodule_myskipii_skip
{
    %\fp_eval:n { 0.8333 } \c_mymodule_myskipi_skip
    %\c_mymodule_myskipi_skip * \fp_eval:n { 0.8333 }
    %\skip_eval:n {  \fp_eval:n { 0.8333 } \c_mymodule_myskipi_skip  }
    \skip_eval:n {  \c_mymodule_myskipi_skip * \fp_eval:n { 0.8333 }  }
}
\skip_show:N \c_mymodule_myskipii_skip
\ExplSyntaxOff
\begin{document}
text
\end{document}

答案1

在原始层面上,你想要\multiply\glueexpr


\baselineskip=20pt plus 5pt minus 2pt

\showthe\baselineskip

\multiply\baselineskip by 2

\showthe\baselineskip

\baselineskip=\glueexpr(\baselineskip * 10)\relax

\showthe\baselineskip


\bye

生产

> 20.0pt plus 5.0pt minus 2.0pt.
l.4 \showthe\baselineskip
                         
? 
> 40.0pt plus 10.0pt minus 4.0pt.
l.8 \showthe\baselineskip
                         
? 
> 400.0pt plus 100.0pt minus 40.0pt.
l.12 \showthe\baselineskip

expl3因此使用\glueexpr

\documentclass{article}
\ExplSyntaxOn
\skip_const:Nn \c_mymodule_myskipi_skip { 36pt plus 18pt minus 12pt }
\skip_const:Nn \c_mymodule_myskipii_skip
{
    \skip_eval:n { ( \c_mymodule_myskipi_skip * 25 )/30  }
}
\skip_show:N \c_mymodule_myskipii_skip
\ExplSyntaxOff
\begin{document}
text
\end{document}

生产

> \c_mymodule_myskipii_skip=30.0pt plus 15.0pt minus 10.0pt.
<recently read> }
                 
l.8 \skip_show:N \c_mymodule_myskipii_skip
                                          
? 

或更简单(因为评估是隐含的)

\documentclass{article}
\ExplSyntaxOn
\skip_const:Nn \c_mymodule_myskipi_skip { 36pt plus 18pt minus 12pt }
\skip_const:Nn \c_mymodule_myskipii_skip
{
     ( \c_mymodule_myskipi_skip * 25 )/30  
}
\skip_show:N \c_mymodule_myskipii_skip
\ExplSyntaxOff
\begin{document}
text
\end{document}

相关内容