在 LaTeX2e 源代码中\hspace
,其星号版本用 s 定义\hskip
。我使用规则定义了一个替代版本。除了行尾效果外,我看不出这种方法有任何明显的缺点。这并不让我担心,因为该宏用于指导目的,主要用于段落的开头。
\documentclass{article}
\usepackage{expl3,xparse,lipsum,xcolor}
\begin{document}
\parindent0pt
\ExplSyntaxOn
\dim_new:N \zspace_debug_dim
\dim_set:Nn\zspace_debug_dim { 1pt }
\cs_new:Npn\zspace_no_star:n #1
{
\tex_vrule:D
width \__dim_eval:w#1\__dim_eval_end:
height\zspace_debug_dim
depth0pt
\scan_stop:
\nobreak
\skip_horizontal:n {0pt}
}
\cs_new:Npn\zspace_star:n #1
{
\tex_vrule:D width
\__dim_eval:w#1\__dim_eval_end:
height 0pt
depth0pt
\scan_stop:
\nobreak
\skip_horizontal:n {0pt}
}
\DeclareDocumentCommand {\zspace} { s m }
{
\IfBooleanTF {#1}
{
\zspace_star:n {#2}
}
{
\zspace_no_star:n {#2}
}
}
\ExplSyntaxOff
\everypar{{\color{red}\vrule height1pt width12pt\relax}}
\zspace{120pt}Test \zspace*{300pt+\parindent}\lipsum[2]
\zspace{120pt}Test \zspace*{40pt+\parindent}\lipsum[2]
\end{document}
这种方法还有其他限制吗?我真的需要吗?
\nobreak\skip_horizontal:n {0pt}
如果我使用规则会怎样?任何有关 LaTeX3 方法的评论也都欢迎。
答案1
跳过的主要特点是它们可以拉伸,在换行时被丢弃,并且可以使用 删除\unskip
。规则不具备这些功能,因此通常它们不太灵活,尽管如果您不需要这些功能,那么您可以使用规则,但为什么不使用跳过或字距调整呢?
记录额外hskip\z@skip
内容的原因\hspace
是为了防范\unskip
,但由于规则不可删除,因此这并不适用于此处。