有一个与此大致相同的问题:确保最后一行的长度最短,但我绝对需要一个 TeX 解决方案。我或多或少偶然发现了讨论中提到的问题egreg 的回答,我希望看到更深入的分析,以确保绝对没有可行的 TeX 解决方案。
在 TeX 中复制 Patrick 的解决方案(在末尾的单词之间插入不可中断的空格)会变得非常丑陋。
所以我天真地说
\parfillskip 0pt plus 100pt
希望这可以确保每个段落最后一行末尾的水平空间最多为 100pt 宽。
但请看一下我的 MWE 的结果:
\documentclass[11pt]{article}
\usepackage{lipsum}
\begin{document}
\parfillskip 0pt plus 100pt
\let\opar\par
\def\par{\opar\hbox to \linewidth{\hfill\vrule width100pt height\fboxrule}}
\lipsum
\end{document}
您会发现,即使是“没有问题”的段落也会忽略 100pt。这\sloppy
实际上也没有帮助,所以问题实际上并不在于没有足够的材料可以延伸。
这是一个极端的例子:
该规则指示了最后一条线应该延伸到的点。
查看最终的箱体产量
.\hbox(7.60416+0.0)x360.0, glue set 2.49602
..\OT1/cmr/m/n/10.95 c
..\OT1/cmr/m/n/10.95 u
..\OT1/cmr/m/n/10.95 r
..\discretionary
...\OT1/cmr/m/n/10.95 -
..\OT1/cmr/m/n/10.95 s
..\OT1/cmr/m/n/10.95 u
..\OT1/cmr/m/n/10.95 s
..\glue 3.65 plus 1.825 minus 1.21666
..\OT1/cmr/m/n/10.95 l
..\OT1/cmr/m/n/10.95 u
..\OT1/cmr/m/n/10.95 c
..\discretionary
...\OT1/cmr/m/n/10.95 -
..\OT1/cmr/m/n/10.95 t
..\OT1/cmr/m/n/10.95 u
..\OT1/cmr/m/n/10.95 s
..\glue 3.65 plus 1.825 minus 1.21666
..\OT1/cmr/m/n/10.95 m
..\OT1/cmr/m/n/10.95 a
..\OT1/cmr/m/n/10.95 u
..\discretionary
...\OT1/cmr/m/n/10.95 -
..\OT1/cmr/m/n/10.95 r
..\OT1/cmr/m/n/10.95 i
..\OT1/cmr/m/n/10.95 s
..\OT1/cmr/m/n/10.95 .
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 100.0
..\glue(\rightskip) 0.0
因此我假设将其glue set 2.49602
应用于\parfillskip
胶水,产生 249.6pt,这看起来或多或少与屏幕截图上的内容相似。
我现在的问题是:是否有其他解决方案可以在 TeX 中获得预期的效果?
编辑:我发现\usepackage[latin]{babel}
在这种情况下添加会使“问题”消失,但我需要排版的真正“文本”是带有空格的符号列表。它们需要以任何方式隔开,以使最后一行不会太短,因此实际应用程序更接近我给出的 MWE(没有正确的连字符)。
结论感谢 David,我原来的应用程序现在运行得很好:
我认为稍微拉长的象形文字看起来比最后一行只有一个象形文字的方案好得多!
答案1
\emergencystretch.3\textwidth
对我来说,可以将所有最后一行保留在标尺区域内。
或者你可以
\parfillskip 100pt minus 100pt
但这种方法只拉伸最后一行,所以看起来相当糟糕。或者你可以将两者结合起来……
答案2
我在 TUGboat 的 Glisterings 专栏(TUGboat, 28, 2, 229--232, 2007)中写到了几种不同的段落格式设置方法(参见www.tug.org/TUGboat/tb28-2/tb89glister.pdf)。下面的代码取自2007年那篇文章。
\newdimen\parabout
\newdimen\about
\about=2em
\def\nottooshort{%
\parabout=\hsize
\advance\parabout -\about
\leftskip=0pt plus 0pt minus 0pt
\rightskip=\leftskip
\parfillskip=\parabout minus \parabout
\parindent=2em}
声明之后的\nottooshort
最后一行段落至少会大约有那么\about
长。
答案3
根据我的经验,自动化解决方案往往不会产生理想的结果。对于小说排版,我发现最好的解决方案是设置\linenottooshort
为\linenottooshort[5em]
。然而,即使这样也会产生一些意想不到的结尾行,单词之间的间距很奇怪。我最终选择使用 来\linebreak
决定段落最后一行的长度。