是否可以直接在 中使用某些文本的宽度<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 答案是为了将我的问题标记为已回答