expl3 是否有 \settowidth 和 \settoheight 的替代品?

expl3 是否有 \settowidth 和 \settoheight 的替代品?

我怎样才能用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}

相关内容