假设在文本的某处,我有以下两句话:
This is one sentence. Another sentence is this.
如果我们写“sentence.~Another”,空格就会太短。“sentence@.~Another”也是一样。
我怎样才能确保句号和“A”之间的线不会断开,但
- 句号和“A”之间的间距是正确的单词间距,包括其可拉伸性;
- LaTeX 能够对“句子”进行连字符连接,并在连字符处断行。“Another”也一样。
简而言之,我怎样才能得到一个像‘~’一样的领带,但它连接了一个句子的最后一个单词和下一个句子的第一个单词?
我猜应该\hspace*
可以。比如
'This is one sentence.\hspace*{\StandardInterspace plus \StandardInterspacePlus minus \StandardInterspaceMinus}Another sentence is this.
只要对长度、和使用正确的\StandardInterspace
值StandardInterspacePlus
即可\StandardInterspaceMinus
。
这是正确的吗?如果正确,如何才能找出适合自己的 LaTeX 类和字体的正确值?(我想应该\StandardInterspace
根据其中一个答案进行设置这里。
答案1
使用普通空格,前缀为\nolinebreak{}
\documentclass{article}
\begin{document}
\hrule
\bigskip
\makebox[8cm][s]{This is one sentence. Another sentence is this.}
\makebox[8cm][s]{This is one sentence.~Another sentence is this.}
\makebox[8cm][s]{This is one sentence.\ Another sentence is this.}
\makebox[8cm][s]{This is one sentence.\nolinebreak{} Another sentence is this.}
\end{document}
该示例仅演示了句子空间,它实际上不能在框内换行。
答案2
(主动)~
定义为给出\nobreakspace
,进而是
\leavevmode\nobreak\ %
我使用 a%
来强调最后一项是“control-space”。这是一个 TeX 原语,它做两件事:
- 它将空间因子重置为 1000;
- 它产生了一个空间。
以防\leavevmode
万一您恰好~
在段落开头使用;\nobreak
是 的简写\penalty10000
,禁止换行。
因此.~
不是产生句末加宽空间(\nonfrenchspacing
当然,当 有效时)。~
首字母后的主要用法之一是:
D.~E.~Knuth
句号无论如何都不会是句子的结尾,但有些人使用缩写,例如“ie”,而后面没有逗号和换行符,这会很糟糕,应该编码为i.e.~something
,因此在产生空格之前会重置空格因子(句号后为 3000)。
我不确定为什么要在句子结束后留一个不间断的空格,但现在很明显这~
对工作不利。
定义
\newcommand{\st}{\nolinebreak\space}
对于这种罕见的情况。但在我看来,句末句号始终是换行的好地方。
\documentclass{article}
\newcommand{\st}{\nolinebreak\space}% sentence tie
\begin{document}
This is one sentence. Another sentence is this. (good)
This is one sentence.\st Another sentence is this. (good)
This is one sentence.~Another sentence is this. (bad)
\end{document}
或者直接\frenchspacing
在序言中发出并忘记标点符号后老式的加宽空格,这样您就可以使用~
。