假设我定义一个常量如下:
\fp_const:Nn \c_shcphi_fp { 1.618 0339 8874 9894 }
现在我想全局使用它来创建尺寸,例如,框的宽度。如何创建自动执行此操作的命令?
以下是我正在研究的 MWE:
\documentclass[letterpaper,11pt]{article}
\usepackage{xparse}
\ExplSyntaxOn
\fp_const:Nn \c_shcphi_fp { 1.618 0339 8874 9894 } % phi (golden ratio) constant
\NewDocumentCommand{\shcevalphi}{ O{5} }
{
\fp_eval:n { round (\c_shcphi_fp , #1) }
}
\ExplSyntaxOff
\begin{document}
\shcevalphi[3]
\end{document}
请注意,上面的命令可以使用我创建的新常量。
我还希望能够用它来定义操作,比如新的长度
2 * \c_shcphi_fp - 1 %random example of length computation.
答案1
的浮点模块expl3
目前没有用于添加命名常量或函数的接口。
你可以做
\documentclass{article}
\usepackage{xparse,xfp}
\ExplSyntaxOn
\fp_const:Nn \c_shcphi_fp { 1.618 0339 8874 9894 } % phi (golden ratio) constant
\fp_set_eq:NN \shcphi \c_shcphi_fp % for "external" use
\ExplSyntaxOff
\newlength{\azetinalen}
\setlength{\azetinalen}{\fpeval{2\shcphi-1}pt}
或任何你需要的表达式。由于\fpeval
是完全可扩展的,它基本上可以在任何地方使用。假设你想将长度设置为文本宽度乘以黄金比例;那么
\setlength{\azetinalen}{\fpeval{\shcphi}\textwidth}
将工作。
没有特殊原因导致常量的定义pi
格式为
\fp_const:Nn \c_pi_fp { 3.141 5926 5358 9793 }
这只是确保使用 15 位十进制数字的一种方便方法。请记住,\ExplSyntaxOn
空格在范围内会被忽略。
然后,该常数在内部也用于pi
在浮点表达式中生成“合法”单词。我不确定是否会提供用于创建用户定义单词的接口。另一方面,如果有需要,我认为没有理由不添加其他常用常数。黄金比例可能是一个候选者。另一方面,您也可以隐式定义它:使用
\fp_const:Nn \c_goldenratio_fp { (1+sqrt(5)}/2 }
分配的值将是1.618 0339 8874 9895
,它实际上比您拥有的值更准确(小数点后十六位数字是8
)。