如何插入不拉伸但换行的细空格?

如何插入不拉伸但换行的细空格?

如何插入一个小空格,看起来像我得到的空格,\,但允许像普通空格一样换行?即,我正在寻找一个宽度与相同的非拉伸、非非换行空格\,

我已经尝试过了some\,\allowbreak{}text,但是,如果出现换行符,这会保留\,行尾的空格,这不是我想要的。

答案1

biblatex包提供了\addthinspace“添加一个易碎薄空间”(手册,第 4.7.4 节)。这是一个省略了biblatex-specific内容的变体。(请注意,\,在文本模式下使用\thinspace定义为\kern 0.16667em。)

\documentclass{article}

\newcommand*{\addthinspace}{\hskip0.16667em\relax}

\textwidth=52pt

\begin{document}

\noindent xxx xxx xxx xxx xxx\addthinspace aaa\addthinspace aaa

\bigskip

\noindent xxx xxx xxx xxx xxx\,aaa\,aaa

\end{document}

在此处输入图片描述

答案2

\breakingspace宏可以很容易地获得:

\newcommand{\breakingspace}[1]{#1\hspace{0pt}}

引用自 TeXbook(第 96 页):

换行符只能出现在水平列表中的特定位置。粗略地说,它们出现在单词之间和连字符之后,但实际上它们在以下五种情况下是允许的:

a) 粘连处,前提是该粘连处紧接着一个不可丢弃的项目,并且它不是数学公式的一部分(即不在数学开启和数学关闭之间)。“粘连处”的中断发生在粘连空间的左边缘。

b) 在某个紧排字符处,前提是该紧排字符后面紧跟着粘连字符,并且它不是数学公式的一部分。

c) 在紧接着胶水的数学关卡中。

d) 处以罚款(可能已自动插入公式中)。

e) 酌情休息。

另一种方法可能是

\newcommand{\breakingspace}[1]{{\let\kern\hskip#1}}

例子:

\documentclass{article}
\usepackage{calc}
\newcommand{\breakingspace}[1]{#1\hspace{0pt}}

\begin{document}
\fboxsep=0pt
\fbox{\parbox{\widthof{a\,a}}{
a\breakingspace{\,}a\breakingspace{\,}%
a\breakingspace{\,}a\breakingspace{\,}%
a\breakingspace{\,}a\breakingspace{\,}%
a}}

\renewcommand{\breakingspace}[1]{{\let\kern\hskip#1}}

\fbox{\parbox{\widthof{a\,a}}{
a\breakingspace{\,}a\breakingspace{\,}%
a\breakingspace{\,}a\breakingspace{\,}%
a\breakingspace{\,}a\breakingspace{\,}%
a}}
\end{document}

在此处输入图片描述

对于这两种定义,\breakingspace在数学模式下除了添加粘连或字距外不会执行任何操作;对于另一种可能性

\newcommand{\badbreakingspace}[1]{\penalty 0 #1}

人们也会在数学模式中添加一个断点。

答案3

顺便说一下,简单\allowbreak\,似乎满足了 OP 的要求。在这个答案中,我首先尝试了\allowbreak\,\allowbreak但这有点愚蠢,所以我转向了\allowbreak\,。正如 OP 所说,\,\allowbreak这是行不通的。顺便说一句,当测试中的文本\parbox不是以\\或结尾时,会注意到一个有趣的效果\par


在我的测试\allowbreak\,\allowbreak工作中(在文本模式下,没有尝试数学模式)。为了说明这一点并检查thin space行末是否存在,我在以下代码中将替换\,为。\bigspace2em

\documentclass{article}
\begin{document}\thispagestyle{empty}

\ttfamily 

\newcommand\bigspace{\kern 2em}

\newlength\awidth
\settowidth{\awidth}{A\bigspace A\bigspace A}

\newcommand\breakingspace{\allowbreak\bigspace\allowbreak}

\fboxsep=0pt

\fbox{\parbox{\awidth}{
A\rule{2em}{1pt}A\rule{2em}{1pt}A\\
A\breakingspace
B\breakingspace
C\breakingspace
D\breakingspace
E\breakingspace
F\breakingspace
G\breakingspace
H\breakingspace
I\breakingspace
J\breakingspace
K\breakingspace
L\\
A\breakingspace
B\breakingspace
C\breakingspace
D\breakingspace
E\breakingspace
F\breakingspace
G\breakingspace
H\breakingspace
I\breakingspace
J\breakingspace
K\breakingspace
L\breakingspace
}}
\end{document}

代码输出

希望有人能解释一下文本末尾以...结尾的行为\breakingspace


实际上,\allowbreak\,其工作原理与 大致相同\allowbreak\,\allowbreak。如该变体所示:

\renewcommand\breakingspace{\allowbreak\bigspace}

\fbox{\parbox{\awidth}{
A\rule{2em}{1pt}A\rule{2em}{1pt}A\\
A\breakingspace
B\breakingspace
C\breakingspace
D\breakingspace
E\breakingspace
F\breakingspace
G\breakingspace
H\breakingspace
I\breakingspace
J\breakingspace
K\breakingspace
L\breakingspace
}}
\fbox{\parbox{\awidth}{
A\rule{2em}{1pt}A\rule{2em}{1pt}A\\
A\breakingspace
B\breakingspace
C\breakingspace
D\breakingspace
E\breakingspace
F\breakingspace
G\breakingspace
H\breakingspace
I\breakingspace
J\breakingspace
K\breakingspace
L\breakingspace
M\breakingspace
}}

第二张图片

我故意把它放在\breakingspace最后,而不是\par为了展示有趣的效果。同样有趣的是, 的两个定义的行为略有不同。但请注意,在这两种情况下,如果一个人用而不是 来\breakingspace结束事情,就不会发生令人惊讶的事情。\par\breakingspace

相关内容