\settowidth 在普通 TeX 中的对应内容是什么?

\settowidth 在普通 TeX 中的对应内容是什么?

\settowidth命令将宽度设置为等于某些文本的宽度,其描述如下获取给定文本的宽度作为长度如何将描述标签的宽度设置为 ConTeXt 中文本字符串的宽度?。这个命令的纯 TeX 等效项是什么?

答案1

除了通过复制 LaTeX 定义来做同样的事情之外没有别的方法:

\catcode`@=11
\newbox\@tempboxa
\def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa
   \setbox\@tempboxa\box\voidb@x}
\def\settoheight{\@settodim\ht}
\def\settodepth {\@settodim\dp}
\def\settowidth {\@settodim\wd}
\catcode`@=12

现在\settowidth\mylen{xyz}将成为

\@settodim\wd\mylen{xyz}

从而转化为

\setbox\@tempboxa\hbox{{xyz}}
\mylen\wd\@tempboxa
\setbox\@tempboxa\box\voidb@x

假设你已经分配了

\newdimen\mylen

答案2

您可以将想要的内容放入框中\setbox

\setbox0\hbox{some horizontal material}

其中0是“临时”盒子寄存器,或者你可以使用以下命令分配一个新的盒子寄存器编号\newbox

\newbox\mybox

之后你可以使用它,例如

\setbox\mybox\vbox{some vertical material}

现在你可以用

\the\ht\mybox for its height,
\the\wd\mybox for its width, and
\the\dp\mybox for its depth

(前缀\the表示数量)

因此,要回答这个问题,

\newbox\mybox
\newdimen\mydim
\def\setMyDimToMyBoxWidth#1{%
  \setbox\mybox\hbox{#1}% 
  \global\mydim=\wd\mybox% global so the dim can be used outside
  \leavevmode% in case it's the first thing in a paragraph
  \box\mybox% typeset the contents of the box
}

Some text \setMyDimToMyBoxWidth{some horizontal material} more text
now, the width is \hbox to\mydim{\hfil\the\mydim}.
\bye

相关内容