我的问题是关于\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
最开头有这样一段话:l3box
interface3.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
。