\customhspace{}
我正在寻找这样的命令
AAA \customhspace{2pt} BBB
等同于:它在和AAA \hspace{2pt} BBB
之间添加了一些空间。AAA
BBB
\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}
解释:
如果段落中的最后一项是粘连项(跳过/空格),则 TeX 会将其删除,但只有一这样,胶水就会被去除。这意味着,如果段落末尾有多个连续的空格,除了最后一个空格之外,其他空格都会保留。
由 生成的段落\hfill AAA \hspace{2pt}
,后跟换行符,实际上以 结尾三胶水件:
- 前面的明确空格字符
\hspace
。 - 本身
\hspace{2pt}
- 换行符也会产生一个空格。
如果删除前面的空格并注释掉换行符(请参阅行末百分号(%)有什么用?)\hspace{2pt}
将是段落中的最后一项,因此将被删除。以下段落末尾将没有空格:
\hfill AAA\hspace{2pt}%
当然,你不想每次都这样做。在\customhspace
上面的定义中,我改为包含一个,\ignorespaces
以使 TeX 忽略紧跟此命令的跳过,并\unskip
删除前面的空格(如果有)。
答案2
这似乎可以做到,除了一个方面,这可能引起 OP 的关注,也可能不引起关注。\customhspace{}
如果存在,则后面的空格会被吞噬。我之所以提到这个例外,是因为 OP 在提供代码片段时,在 的调用周围有空格\customhspace
。一般来说,我不会在\hspace
type 命令周围添加额外的空格。
\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}