除非它是行的末尾,否则如何添加一些水平空间?

除非它是行的末尾,否则如何添加一些水平空间?

\customhspace{}我正在寻找这样的命令

  • AAA \customhspace{2pt} BBB等同于:它在和AAA \hspace{2pt} BBB之间添加了一些空间。AAABBB

  • \hfill AAA \customhspace{2pt}\hfill AAA: 相同,在这种情况下, 后面没有添加空格AAA

因此,从某种意义上说\customhspace{},只有当我们不在行尾被 '推' 时,才会添加空格\hfill

是否有这样的命令?如果是,该怎么做?

答案1

这个问题实际上并不是关于删除行末的空格,而是关于删除段落末尾的空格。行末的所有跳过都已自动忽略。

一种可能的解决方案是定义\customhspace如下:

\newcommand*\customhspace[1]{\unskip\hspace{#1}\ignorespaces}

然而,这并不完全像\hspace行中间的普通空格,因为它会删除其前面或后面的空格(包括普通空格)。这是优点还是缺点取决于您打算如何使用此宏。

示范:

以下是一个演示其工作原理的小示例文档。请注意, 是否\hspace{...}被空格包围很重要,但 则无关紧要\customhspace

\documentclass{article}

\newcommand*\customhspace[1]{\unskip\hspace{#1}\ignorespaces}

\begin{document}

AAA \hspace{2em} BBB

AAA \hspace{2em}BBB

AAA\hspace{2em} BBB

AAA\hspace{2em}BBB

AAA \customhspace{2em} BBB

\hfill AAA \hspace{2em}

\hfill AAA\hspace{2em}% % <- see explanation below

\hfill AAA\customhspace{2em}

\hfill AAA

\end{document}

enter image description here

解释:

如果段落中的最后一项是粘连项(跳过/空格),则 TeX 会将其删除,但只有这样,胶水就会被去除。这意味着,如果段落末尾有多个连续的空格,除了最后一个空格之外,其他空格都会保留。

由 生成的段落\hfill AAA \hspace{2pt},后跟换行符,实际上以 结尾胶水件:

  • 前面的明确空格字符\hspace
  • 本身\hspace{2pt}
  • 换行符也会产生一个空格。

如果删除前面的空格并注释掉换行符(请参阅行末百分号(%)有什么用?)\hspace{2pt}将是段落中的最后一项,因此将被删除。以下段落末尾将没有空格:

\hfill AAA\hspace{2pt}%

当然,你不想每次都这样做。在\customhspace上面的定义中,我改为包含一个,\ignorespaces以使 TeX 忽略紧跟此命令的跳过,并\unskip删除前面的空格(如果有)。

答案2

这似乎可以做到,除了一个方面,这可能引起 OP 的关注,也可能不引起关注。\customhspace{}如果存在,则后面的空格会被吞噬。我之所以提到这个例外,是因为 OP 在提供代码片段时,在 的调用周围有空格\customhspace。一般来说,我不会在\hspacetype 命令周围添加额外的空格。

\documentclass{article}
\makeatletter
\newcommand\customhspace[1]{\@ifnextchar\par{}{\hspace{#1}}}
\makeatother
\begin{document}
    AAA\customhspace{2pt}BBB no extra spaces

    AAA\hspace{2pt}BBB

    \smallskip

    AAA \customhspace{2pt} BBB spaces before/after

    AAA \hspace{2pt} BBB

    \smallskip

    AAA\customhspace{2pt} BBB space after

    AAA\hspace{2pt} BBB

    \smallskip

    AAA \customhspace{2pt}BBB space before

    AAA \hspace{2pt}BBB

    \smallskip

    no space before\hfill AAA\customhspace{2pt} 

    \hfill AAA

    \smallskip

    space before\hfill AAA \customhspace{2pt} 

    \hfill AAA
\end{document}

enter image description here

相关内容