我读到使用全局变量\sloppy
是一种不好的做法。我有一个文档,其中包含许多源代码变量,我将其引用为\texttt{VariableName}
。我在普通段落中使用了很多变量,有时在章节标题中使用了很多变量。默认情况下,它们的处理非常糟糕,并在右边距产生大量超调。到目前为止,我想出了以下解决方案:
手动连字符,
\texttt{Variable\-Name}
这是 (a) 糟糕的逐案工作,并且 (b) 可能会向读者建议使用带连字符的变量名在变量之前手动换行,
\\ \texttt{VariableName}
这(a)再次是可怕的逐案工作,并且(b)在右边距产生空白(行不“满”)全局使用
\sloppy
,这显然是不好的做法,但事实上,这是我看到的唯一不需要我浏览整个文档并逐个修复的解决方案。如果我最后更改边距,页面变大/变小,并且必须再次手动检查所有内容,这将特别糟糕。在我看来,这不是解决方案。
还有更好的解决方案吗?
答案1
这是如何\sloppy
定义的(来自 LaTeX 源,你可以使用texdoc source2e
或通过加拿大运输安全局或者texdoc.net):
因此,这些是要做的事情\sloppy
:
- 设置
\tolerance
为 9999:这并不像名字听起来那么糟糕。如果你不愿意注意未满/过满的框警告并修复它们,事实上这永远不是一个坏主意:更高的\tolerance
(但非无限的,即小于 10000)所做的就是允许 TeX考虑更糟糕的换行符,同时仍尝试生成最佳段落。它不太可能使输出变得更糟,最糟糕的情况是它使 TeX 工作更加困难,但在当今的计算机上,差异可以用毫秒来衡量。 \hfuzz
将和设置\vfuzz
为0.5pt
。这只会影响警告显示对您来说:只有超过或低于上限的行0.5pt
才会发出警告。(默认值为0.1pt
。)- 设置
\emergencystretch
为3em
。在我看来,这是防止行溢出的最关键因素(您称之为“右边距溢出”)。这是 TeX 在所有其他方法都失败后为每行添加的额外拉伸。如果您愿意接受此类行上的单词之间有超大空格,您可以将其设置为任意大。(如果您不打算重写文本以处理溢出框,那么超大空格绝对比行超出右边距要好!)
现在您已经知道并理解了什么\sloppy
,您可以自己决定是否要全局应用它,而不是遵循“全局\sloppy
是坏做法”之类的格言。有些情况下这样做是有意义的,有些情况下则没有:如果您的文档中有如此难以打破的界限,那么全局采取措施以获得最佳输出绝对是有意义的。
就我个人而言,对于您提到的情况(由于变量名形成牢不可破的框,文档中有许多难以证明的行\textt
),这是我的优先顺序:
- 保留所有默认设置;通过重写文本等方式手动留意和修复过满和未满的框。如果您的文档值得付出努力,并且您确定已经对文档进行了润色,则可以进行这种程度的润色。内容足够(您应该始终首先这样做)。否则,下面我假设您不会手动修复过满的框。
- 全局(跨所有此类段落)使用
\sloppy
您认为想要的任何参数:要么是\sloppy
其本身,要么是\tolerance 9999
与\hfuzz
您不想收到的警告一起,以及\emergencystretch
您可以容忍的参数(越高越好,以避免行数过满)。 - 放弃段落对齐,使用右对齐文本。文本不会在右边距对齐,但您不需要任何尴尬的空格或连字符。
- 在变量内部全局使用连字符
\textt
:有多种方法可以做到这一点,但正如你所说,它可以向读者暗示该变量是带连字符的,我真的会避免这种情况。
\sloppy
(2) 和 (3)(类似或不规则)之间的选择取决于具体文件。当然,一切都是主观的,取决于您的审美。
答案2
我会使用\sloppy
(或者如果您不介意放弃合理的右边距,则可以\RaggedRight
从包中使用。)ragged2e
关于避免过度拉伸空白的一般建议是一般建议,但它主要是关于自然语言文本的建议,如果您所写的内容不是自然语言,那么可能适用不同的规则(或者可能没有规则,您必须做您认为最好的事情)。
您不需要做那么多手动工作。如果您接受带连字符的变量名,则可以在 tt 字体中重新启用连字符,但我不会这样做,尤其是当-
是所记录语言中变量名中的合法字符时。
类似地,您可以定义一个命令,\zz{MyVariable}
将MyVariable
tt 放入其中并在该单词前设置断点,如果在该点处中断,则该行会保持较短(就像\\
已经使用过一样),这是一种可能性,但如果有很多,最好使用\RaggedRight
。
或者您可以使用,\sloppy
如果您想要两端对齐的段落,这可能也可以。
答案3
对于具有大量此类函数名称的特定段落,请使用
\begin{sloppypar}
...
\end{sloppypar}
这比全球更有意义\sloppy
答案4
以下是基于该hyphenat
包的解决方案:
\documentclass{article}
\usepackage[htt]{hyphenat}
\hyphenation{My-Terribly-Excru-ciating-ly-Long-Identi-fier-Thats-What-You-Get-For-Writing-Java}
\newcommand{\terrible}{{\ttfamily MyTerriblyExcruciatinglyLongIdentifierThatsWhatYouGetForWritingJava}}
\begin{document}
This document describes a new program for comparing two numbers according to size. One number is referred to as \texttt{a}, the other one as \terrible.
\end{document}