在尽可能多地从LaTeX2e
代码切换到的过程中LaTeX3/expl3
,我被一些软件包工具的使用所困扰calc
。我读过这个软件包,但它似乎目前已被弃用。特别是,我在使用pkg 命令l3calc
时遇到了麻烦。在这方面,如果不声明一个框,该怎么做?我的意思是,像chez这样的东西。calc
\widthof
LaTeX3/expl3
\widthof{This text}
LaTeX3/expl3
更准确地说,我遇到的问题如下:
\documentclass{memoir}
% Loading explicitly the calc pkg doesn't help
%\usepackage{calc}
\usepackage{xparse}
\ExplSyntaxOn
\dim_new:N \g_tmp_dim
\dim_set:Nn \g_tmp_dim { \widthof{This ~ text} } % { 3pt } It works with this
\NewDocumentCommand \ShowWidth { }
{ \dim_use:N \g_tmp_dim }
\ExplSyntaxOff
\begin{document}
\ShowWidth
\end{document}
也许我的问题与此处参数的扩展有关,我应该为以不同方式管理扩展的n
函数定义一个变体?只是在思考它...\dim_set:Nn
答案1
诸如 之类的函数\dim_set:Nn
需要其第二个参数(在本例中为 a <dimension expression>
)完全可扩展。 类似于 的函数\widthof
无法返回可扩展的维度,因为必须设置用于进行测量的框。
\setlength
这并不意味着不能定义与with行为类似的用户级宏calc
;但是必须定义表达式的解析器。
顺便说一句,没有什么可以阻止您在 LaTeX3 代码中使用\setlength
(with calc
)(尽管这样做风格不好)。或者,对于简单的应用程序,使用类似于 cgnieder 的答案的代码用于计算给定字体的 \baselineskip 的宏