为什么文本超出了指定的线宽?

为什么文本超出了指定的线宽?

我以为我知道一些事情,但看起来我对 TeX 如何排版材料有一些基本的误解。我以为 geometry 包的设置会强制文本适合给定的\geomerty{textwidth=6.0in}。它似乎有时有效,但并非总是有效。下面的代码说明了以下内容:

案例 0说明了文本的正确位置。我认为它应该位于左侧和右侧。这里一切如预期般运作。

情况1使用了一个非常长的单词。当像案例 1a 中那样使用时,文本会超出指定的结尾textwidth。案例 1b 似乎并没有太大不同,但一切似乎都运行正常:长单词被连字符连接。是什么差异导致案例 1a 中断,但案例 1b 可以正常工作?更重要的是,我如何获得案例 1B 的行为全部时间。

案例 2文本位于两个小页面之后,占用了0.65\linewidth0.30\linewidth。插入了一些前导空间,所以也许这就是问题所在,因此我将小页面宽度总和限制为0.95\linewidth。我可以忍受小页面的前导空间,但我真的不喜欢“为什么这不从新行开始?”开头的那行过去的应放置文本的边缘。

案例 3(在我看来似乎不同,但我怀疑这可能是同一个根本问题)在一段文本后面有一个宽小页面。我的理解是 TeX 会为这个小页面创建一个框,意识到它不适合当前行中的位置,然后自动转到下一行,但它似乎并没有这样做。

\documentclass{article}
\usepackage{geometry}

\newcommand*{\BlahBlah}{
blah blah blah blah blah blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah blah blah blah blah blah 
blah blah blah blah blah blah blah blah blah blah blah blah 
}

\newcommand*{\LongText}{
YadaYadaYadaBlahBlahBlahYadaYadaBlahBlahBlahYadaYadalahYadaYadaYadaBlahBlahBlahYadaYadaBlahBlahBlah
}

\geometry{top=0.5in}%
\geometry{bottom=0.5in}%
\geometry{paperheight=11.0in}%
\geometry{paperwidth=8.5in}%
\geometry{textwidth=6.0in}%
\geometry{left=1.125in}  %{(\paperwidth-\textwidth)/2)}
\geometry{right=1.125in}  %{(\paperwidth-\textwidth)/2)}
\geometry{showframe=true}%

\begin{document}
\textbf{Case 0}: This illustrates the correct placement of the text: \BlahBlah 

\textbf{Case 1a}: \LongText

\textbf{Case 1b}: The above did not stop at end of line, but this does: \LongText

Case 2: Text following minipages:

\begin{minipage}{0.65\linewidth}
\textbf{Minpage 1}: \BlahBlah
\end{minipage}
\begin{minipage}{0.30\linewidth}
\textbf{Minipage 2}: \BlahBlah
\end{minipage}
% Adding a blank line here will fix this problem
Why does this not start on a new line?

\textbf{Case 3}: \BlahBlah \BlahBlah
% Why does commenting this out result is a line much longer than 6.0in
\begin{minipage}{0.65\linewidth}
\textbf{Minipage 3}: \BlahBlah
\end{minipage}
\end{document}

我意识到案例 2 和 3 很容易通过插入一个空白行(当前为注释行)手动修复,该空白行告诉 TeX 开始一个新段落,一切正常。但我想知道为什么这不会自动发生。我在更复杂的情况下遇到了问题,并且本 MWE 中描述的问题非常相似,所以如果我能理解这一点,我就可以解决更复杂的问题。

总而言之,我怎样才能强制文本总是放置仅有的在我设定的尺寸范围内\textwidth。当然,如果有一个迷你页面(或图像)比指定的宽度更宽,textwidth那么一切都将不复存在,但我只对宽度小于指定宽度的情况感兴趣textwidth

我本来想附上结果图片,以便更容易理解这个问题,但我想我还没有足够的名气来做到这一点......希望我能很快到达那里......

答案1

对你的主要问题的简短回答是,TeX 永远无法强制将文本保持在边距内;它只会尽力这样做。正如你所发现的,很容易导致它失败。

稍微长一点的答案是,TeX 的工作原理是最小化段落的总体糟糕程度,其中糟糕程度由多种因素计算得出,例如拉伸和收缩空格以使文本适合、连字符等等。但是,如果超过一定的糟糕程度(准确地说是 10000),段落就会被视为无限糟糕,因此 TeX 会放弃。

在案例 1a 中,由于单词非常长,并且可拉伸空间相对不足,TeX 无法找到产生可接受结果的连字点,因此长单词保持未连字状态并进入边距。在案例 2a 中,有更多的空白空间需要拉伸,也许您也很幸运地在合适的范围内找到了一个连字点。

至于小页面,LaTeX 将小页面视为一个巨大的字母。这就是为什么你需要在它后面留一个空行,以便在那里开始新行。

答案2

我想我找到了自己的解决方案:\sloppy按照\begin{document}建议使用关于如何使文本不超过右边距的问题似乎修复了全部我在这里提到的问题,而且输出实际上看起来不那么马虎用这个。但是,我想知道使用这个是否可能在其他地方出现一些令人不快的意外。有什么想法吗?也许我应该发布一个后续问题,但我打算尝试一下。

相关内容