如何直接使用 \dim_compare:nTF 中某些文本的宽度?

如何直接使用 \dim_compare:nTF 中某些文本的宽度?

是否可以直接在 中使用某些文本的宽度<dimension expression>。我发现这种方法使用临时框,但似乎不太优雅……

\documentclass{article}

\usepackage{xparse}
\ExplSyntaxOn

% generate the new box
\box_new:N \tmp_box

% a dummy command to test
\NewDocumentCommand{ \getwidth }{ m }
 {
  % save argument to the box
  \hbox_set:Nn \tmp_box { #1 }
  % measure the box width
  \dim_compare:nTF { \box_wd:N \tmp_box < 10pt }
   { \textbf{smaller}~than~10pt }% do something cooler here
   { \textbf{greater}~than~10pt }% do somthing even cooler here
 }

\ExplSyntaxOff

\begin{document}
The width of \emph{word} is \getwidth{word}.

The width of \emph{i} is \getwidth{i}.
\end{document}

我想跳过该\hbox_set:Nn\tmp_box{#1}行并使用类似的内容\box_wd:n{#1},但创建此变体不起作用……

答案1

没有诸如\settowidth或之类的函数\widthof,但实现条件并不困难。

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\box_new:N \l__tobi_compare_box
\prg_new_protected_conditional:Npnn \tobi_dim_compare_wd:nn #1 #2 { T , F , TF }
 {
  \hbox_set:Nn \l__tobi_compare_box { #1 }
  \dim_compare:nTF { \box_wd:N \l__tobi_compare_box #2 }
   { \prg_return_true: }
   { \prg_return_false: }
 }

\NewDocumentCommand{\getwidth}{m}
 {
  \tobi_dim_compare_wd:nnTF { #1 } { < 10pt }
   { \textbf{smaller}~than~10pt }% do something cooler here
   { \textbf{greater}~than~10pt }% do somthing even cooler here
 }
\ExplSyntaxOff

\begin{document}
The width of \emph{word} is \getwidth{word}.

The width of \emph{i} is \getwidth{i}.
\end{document}

您有可用的\tobi_dim_compare_wd:nn(TF)。它不可扩展,但如果您想测量某些文本,它就无法扩展。

在此处输入图片描述

答案2

没有更短的路。

正如 cgnieder 所说,我找到了正确的方法,没有捷径。我发布这个 CW 答案是为了将我的问题标记为已回答

相关内容