我怎样才能用expl3
接口(完成相同的工作)替换以下代码?
\documentclass[varwidth]{standalone}
\begin{document}
\newlength\spaceWidth
\settowidth{\spaceWidth}{\ }
\the\spaceWidth
\end{document}
答案1
没有同等的东西(据我所知),但你可以实现你自己的(并且通过实施我的意思是复制latex.ltx
并改变语法)。我定义了\SetToHeight
、\SetToWidth
和\SetToDepth
,它们的作用与 LaTeX2e 的变体相同。
但是,对于空格的具体情况,您可以使用\fontdimen2\font
,它将获取当前字体中空格的宽度,而无需测量框,因此它是可扩展的,因此您可以在尺寸表达式中使用。我定义了一个expl3
是包装器也是如此:
\documentclass[varwidth]{standalone}
\usepackage{expl3}
\ExplSyntaxOn
\box_new:N \l_bp_set_to_box
\cs_new_protected:Npn \bp_box_set_to:NNn #1 #2 #3
{
\hbox_set:Nn \l_bp_set_to_box {#3}
\dim_set:Nn #2 { #1 \l_bp_set_to_box }
\box_set_eq:NN \l_bp_set_to_box \c_empty_box
}
\cs_new_protected:Npn \bp_set_to_height:Nn { \bp_box_set_to:NNn \box_ht:N }
\cs_new_protected:Npn \bp_set_to_depth:Nn { \bp_box_set_to:NNn \box_dp:N }
\cs_new_protected:Npn \bp_set_to_width:Nn { \bp_box_set_to:NNn \box_wd:N }
% Expandable width of a space:
\cs_new:Npn \WidthOfSpace { \tex_fontdimen:D 2 \tex_font:D }
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
\dim_new:N \spaceWidth
\bp_set_to_width:Nn \spaceWidth {\ }
\dim_use:N \spaceWidth
\par
\dim_use:N \WidthOfSpace
\ExplSyntaxOff
\end{document}
输出:
答案2
\coffin_new:N\spaceCoffin
\hcoffin_set:Nn\spaceCoffin{\ }
% space width
\dim_eval:n{\coffin_wd:N\spaceCoffin}
\box_new:N\spaceBox
\hbox_set:Nn\spaceBox{\ }
% space width
\dim_eval:n{\box_wd:N\spaceBox}