如何避免使用许多 \texttt 的全局 \sloppy

如何避免使用许多 \texttt 的全局 \sloppy

我读到使用全局变量\sloppy是一种不好的做法。我有一个文档,其中包含许多源代码变量,我将其引用为\texttt{VariableName}。我在普通段落中使用了很多变量,有时在章节标题中使用了很多变量。默认情况下,它们的处理非常糟糕,并在右边距产生大量超调。到目前为止,我想出了以下解决方案:

  1. 手动连字符,\texttt{Variable\-Name}这是 (a) 糟糕的逐案工作,并且 (b) 可能会向读者建议使用带连字符的变量名

  2. 在变量之前手动换行,\\ \texttt{VariableName}这(a)再次是可怕的逐案工作,并且(b)在右边距产生空白(行不“满”)

  3. 全局使用\sloppy,这显然是不好的做法,但事实上,这是我看到的唯一不需要我浏览整个文档并逐个修复的解决方案。如果我最后更改边距,页面变大/变小,并且必须再次手动检查所有内容,这将特别糟糕。在我看来,这不是解决方案。

还有更好的解决方案吗?

答案1

这是如何\sloppy定义的(来自 LaTeX 源,你可以使用texdoc source2e或通过加拿大运输安全局或者texdoc.net):

<code>\sloppy</code> 定义的屏幕截图

因此,这些是要做的事情\sloppy

  • 设置\tolerance为 9999:这并不像名字听起来那么糟糕。如果你不愿意注意未满/过满的框警告并修复它们,事实上这永远不是一个坏主意:更高的\tolerance(但非无限的,即小于 10000)所做的就是允许 TeX考虑更糟糕的换行符,同时仍尝试生成最佳段落。它不太可能使输出变得更糟,最糟糕的情况是它使 TeX 工作更加困难,但在当今的计算机上,差异可以用毫秒来衡量。
  • \hfuzz将和设置\vfuzz0.5pt。这只会影响警告显示对您来说:只有超过或低于上限的行0.5pt才会发出警告。(默认值为0.1pt。)
  • 设置\emergencystretch3em。在我看来,这是防止行溢出的最关键因素(您称之为“右边距溢出”)。这是 TeX 在所有其他方法都失败后为每行添加的额外拉伸。如果您愿意接受此类行上的单词之间有超大空格,您可以将其设置为任意大。(如果您不打算重写文本以处理溢出框,那么超大空格绝对比行超出右边距要好!)

现在您已经知道并理解了什么\sloppy,您可以自己决定是否要全局应用它,而不是遵循“全局\sloppy是坏做法”之类的格言。有些情况下这样做是有意义的,有些情况下则没有:如果您的文档中有如此难以打破的界限,那么全局采取措施以获得最佳输出绝对是有意义的。


就我个人而言,对于您提到的情况(由于变量名形成牢不可破的框,文档中有许多难以证明的行\textt),这是我的优先顺序:

  1. 保留所有默认设置;通过重写文本等方式手动留意和修复过满和未满的框。如果您的文档值得付出努力,并且您确定已经对文档进行了润色,则可以进行这种程度的润色。内容足够(您应该始终首先这样做)。否则,下面我假设您不会手动修复过满的框。
  2. 全局(跨所有此类段落)使用\sloppy您认为想要的任何参数:要么是\sloppy其本身,要么是\tolerance 9999\hfuzz您不想收到的警告一起,以及\emergencystretch您可以容忍的参数(越高越好,以避免行数过满)。
  3. 放弃段落对齐,使用右对齐文本。文本不会在右边距对齐,但您不需要任何尴尬的空格或连字符。
  4. 在变量内部全局使用连字符\textt:有多种方法可以做到这一点,但正如你所说,它可以向读者暗示该变量是带连字符的,我真的会避免这种情况。

\sloppy(2) 和 (3)(类似或不规则)之间的选择取决于具体文件。当然,一切都是主观的,取决于您的审美。

答案2

我会使用\sloppy(或者如果您不介意放弃合理的右边距,则可以\RaggedRight从包中使用。)ragged2e

关于避免过度拉伸空白的一般建议是一般建议,但它主要是关于自然语言文本的建议,如果您所写的内容不是自然语言,那么可能适用不同的规则(或者可能没有规则,您必须做您认为最好的事情)。

您不需要做那么多手动工作。如果您接受带连字符的变量名,则可以在 tt 字体中重新启用连字符,但我不会这样做,尤其是当-是所记录语言中变量名中的合法字符时。

类似地,您可以定义一个命令,\zz{MyVariable}MyVariablett 放入其中并在该单词前设置断点,如果在该点处中断,则该行会保持较短(就像\\已经使用过一样),这是一种可能性,但如果有很多,最好使用\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}

在此处输入图片描述

相关内容