使用规则定义类似 \hspace 的命令有哪些缺点?

使用规则定义类似 \hspace 的命令有哪些缺点?

在 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,但由于规则不可删除,因此这并不适用于此处。

相关内容