如何放宽一行的水平间距规则?

如何放宽一行的水平间距规则?

我有一行恰好以不可破坏的代码片段结尾

This is a long line that ends in a \pre{std::ostream}
long word.

打印时行太满。行内单词之间的间距尽可能小。

我想放宽该行的间距规则,以便根据需要拉伸空格以将 -wordpre放在下一行,即使该空格拉伸看起来不再很好看

This   is   a   long   line   that   ends   in   a
\pre{std::ostream} long word.

我确实\hfill把这些词放在了一起,但那不可能是解决方案,对吗?

更新:有问题的行位于列表项内似乎有所不同。是否有一种“无段落”解决方案可以同时适用于段落和列表项(并且据说在许多其他情况下也适用)?

* This is a long line that ends in a \pre{std::ostream}
  long word.

相对

* This   is   a   long   line   that   ends   in   a
  \pre{std::ostream} long word.

当我使用时,sloppypar我得到了一个额外的换行符。

在此处输入图片描述

答案1

\sloppy放松对整个文档的对齐约束,sloppypar环境可以限制损坏对局部区域的影响。

在我的 MWE 中,\hrulefill显示左/右边距的范围。

\documentclass{article}
\def\pre#1{\makebox{#1}}
\begin{document}
\noindent\hrulefill

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxThis is a long line that ends in a 
  \pre{std::ostream}long word.

\begin{sloppypar}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxThis is a long line that ends in a 
  \pre{std::ostream}long word.
\end{sloppypar}
\end{document}

在此处输入图片描述

理解这一点会有所帮助:当 TeX(LaTeX 的基础)对齐段落时,它会尝试满足一组加权约束和惩罚来指导布局。当无法满足这些惩罚所带来的约束时,就会产生一个过满或未满的框,在用户看来,这就是边距超出或未满。当一行以一个较长的不可中断对象结尾时,就会发生这种情况(我在 MWE 中使用了一个框)。

通过使用不严格的设置,权重和惩罚会被修改,使“一个”解决方案更有可能出现。正如您所指出的,不严格的解决方案在某些方面可能更丑陋,但它将在很大程度上消除可能导致的边际超支。

答案2

总结@steven-b-segletes 和@werner 的回答,我想与大家分享我的结果。

不同的解决方案如下:

在此处输入图片描述

在每个段落的末尾我都标注了该段落的内容:

  • 原来的
  • \linebreak
  • \begin{sloppypar}
  • \sloppy\fussy
  • 回到原始

答案3

如果我理解正确的话,您还可以使用\linebreak创建新行,同时强制使用旧行的间距。如果使用\newline\\,它将创建新行而不将前一行与边距对齐,这让我很烦。这似乎比您想要的更手动一些。

相关内容