如何插入一个小空格,看起来像我得到的空格,\,
但允许像普通空格一样换行?即,我正在寻找一个宽度与相同的非拉伸、非非换行空格\,
。
我已经尝试过了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
行末是否存在,我在以下代码中将替换\,
为。\bigspace
2em
\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