我有一行恰好以不可破坏的代码片段结尾
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
或\\
,它将创建新行而不将前一行与边距对齐,这让我很烦。这似乎比您想要的更手动一些。