\box_new:N 与 \hbox_set:Nn 一起使用

\box_new:N 与 \hbox_set:Nn 一起使用

我的问题是关于\l_tmpa_box。请考虑以下代码:

\ExplSyntaxOn
\hbox_set:Nn \l_tmpa_box { \includegraphics[scale=0.125]{images/shc_logo.pdf} } 

\dim_new:N \l__shc_logo_dim
\dim_set:Nn \l__shc_logo_dim { \box_wd:N \l_tmpa_box }
\ExplSyntaxOff 

如果我使用上述代码,尺寸就会正确存储。是否有可能出现类似情况\l_shc_tmpa_box

我想要这样的东西:

\ExplSyntaxOn
\hbox_set:Nn \l_shc_tmpa_box { \includegraphics[scale=0.125]{images/shc_logo.pdf} } 

\dim_new:N \l__shc_logo_dim
\dim_set:Nn \l__shc_logo_dim { \box_wd:N \l_shc_tmpa_box }
\ExplSyntaxOff 

但这不能编译并出现错误:

! Undefined control sequence.
<argument> \l_shc_tmpa_box
l.10 ...aphics[scale=0.125]{images/shc_logo.pdf} }

我正在查看 L3 文档,但没有找到如何创建新的hbox.

可以用嗎\box_new:N \l_shc_tmpa_box

答案1

是的,盒子寄存器可用于存储 或hbox。在 的vbox最开头有这样一段话:l3boxinterface3.pdf

盒子操作有三种:水平模式(用前缀 表示)\hbox_、垂直模式(用前缀 表示\vbox_)以及在两种模式下工作的通用操作(用前缀 表示)\box_

这意味着它可以\box_new:N适用于任一模式,所以这是正确的:

\ExplSyntaxOn
\box_new:N \l_shc_tmpa_box
\hbox_set:Nn \l_shc_tmpa_box { \includegraphics[scale=0.125]{images/shc_logo.pdf} } 

\dim_new:N \l__shc_logo_dim
\dim_set:Nn \l__shc_logo_dim { \box_wd:N \l_shc_tmpa_box }
\ExplSyntaxOff 

只是为了完整性,如果您稍后想知道某个框是水平框还是垂直框,您可以使用\box_if_horizontal:NTF\box_if_vertical:NTF,如果它是空的,则使用\box_if_empty:NTF

相关内容