使用硬包装的优缺点是什么,为什么它在 LaTeX 中如此常见?

使用硬包装的优缺点是什么,为什么它在 LaTeX 中如此常见?

似乎硬换行(即当行达到某个阈值时插入换行符)在撰写技术论文时在 LaTeX 源中极为常见,可以手动插入或让文本编辑器处理。

经过多年在软换行环境中编写文本(文本是显示硬换行(即换行符被换行,但实际上没有插入换行符)让我很难理解为什么硬换行如此常用。我认为理解其背后的原因会让我对使用它不那么反感。

硬包装与软包装相比有哪些优缺点, 和为什么硬包装在 LaTeX 中如此常用?

答案1

许多文本比较工具(例如)diff使用逐行比较。这可以解释为它们作为程序员工具的起源。当行足够短时,这些工具可以很好地处理 TeX 源 - 尤其是与版本控制系统结合使用时。当然,也有一些工具(例如latexdiff(强烈推荐!))不考虑行的长度。

而且,由于 TeX 注释从 % 开始并一直持续到行尾,短行使得注释代码更容易。

最后但并非最不重要的一点是,许多 TeX 作者使用程序员编辑器,例如Emacsvi,它们使用硬换行。这使得代码更具可读性 - 而且 TeX 源代码主要是代码。

无论如何,TeX 本身当然并不关心你的行长度。

答案2

硬换行没有优点,软换行也没有缺点。只是习惯让我们使用硬换行,而不是不知道M-x longline-mode。TeX 不关心单个换行符[1],而是将它们视为普通空格。因此就文档而言,没有争论说哪个优于另一个。

但包装对于我们,作者。假设我们坚持使用
双换行符来写段落(因此在实践中避免输入缓冲区问题)。一个典型的段落超过 80 个字符(
编辑器的屏幕通常宽度),因此要么消失在末尾(没什么帮助),要么编辑器会换行。编辑器可以硬换行或软换行。如果
硬换行(即插入文字换行符),那么以后编辑段落就会有问题:人们通常希望段落回流焊编辑时,否则最终看起来会很
糟糕。
但重新排版 TeX 文档是一门艺术。一个真正的危险是重新排版注释:如果一行以注释结尾,%something like this one
那么换行时不要删除该换行符就非常重要了。对于 TeX 来说,一种不那么严重但对作者来说非常恼人的情况是换行环境和某些其他命令。\item例如,能够轻松看到从哪里开始非常有用,如果它在行首(可能缩进)比在中间某处更容易。

其他一些人也提到了diff。这是另一种需要仔细控制换行符的情况。如果我有一个段落被硬换行到 80 列(或 72 列或其他),并且我在开头更改了一点,然后重新排列文本,这可能会改变每一个在该段落中的行。运行diff结果文件将使每一行都发生更改,但我真正想知道的是开头的更改。因此在文件中你确实想要一些换行符,但这确实是文件中有换行符的主要原因,因此文件中的换行符应该以这样的方式选择,它们回答这个问题“当我运行diff这个文件时,发现有一个变化这里,我还想看到哪些额外信息?”。对我来说,这通常只是有变化的句子,所以我在每个句子后面都放了一个换行符。我还倾向于将大量的内联数学和一些其他东西分离出来。

因此,我们需要一个可以指定肯定换行符为不可变的,其他换行符为可流动的。相当一部分不可变的换行符是可以预测的(注释、某些命令),但一个有用的系统将使作者能够在使用过程中轻松指定它们。Emacs 用它的 来实现这一点longline-mode。作者插入的换行符受到尊重,自动插入的换行符则不被尊重。两全其美。任何可靠的编辑器都会有类似的功能。如果没有,您的编辑器就会强迫您适应它的特质,而事实应该相反。

(我第一次遇到这个问题是在我切换到使用 VCS 时。我写下了我的经历在我的网站上

[1] 据我所知,有三种情况换行很重要:

  1. 换行符标志着评论的结束
  2. 可以强制 TeX 将换行符解释为\par标记,verbatim环境会像 一样执行此操作\obeylines
  3. 如果一切都在一行上,那么当 TeX 一次读取文档的一行时,可能会超出输入缓冲区的承受能力。

答案3

另一个答案是TeX 的输入行的最大大小是固定的,即非换行如果超出了一定的长度,就会出现错误信息。

如今,这个限制相当大。你会发现它在你的texmf.cnf

buf_size = 200000

但在过去,它曾经更小一些,而且无论如何,谁愿意在写文字时考虑这样的事情呢?

答案4

到目前为止的答案(可能除了安德鲁的答案——一如既往的辩证性)都支持强硬换行。所以让我补充一个稍微不同的观点:

(1)作为一个社区,我们非常关心语义的标记:我们将文档文本的实际格式留给后处理器(例如 pdflatex),它能够根据所选字体、纸张格式等将文本分成几行,效果非常好。我们仅在需要时才更改实际的排版。语义( \emph{semantic}) 导致这种情况。这包括段落内带有\\或 的手动换行符\newline;我们插入它们是因为它们带有语义

(2)只有在极少数例外情况下(例如排版代码),我们才会寻求完全控制。在这些情况下,我们使用的环境就像verbatim让 LaTeX 遵守每个空格和换行符一样——因为对于代码来说,每个空格和换行符都带有语义

我认为,文档源代码的格式也应遵循同样的原则!当出现以下情况时,应插入硬换行符:语义这样做的理由。对于文档中与 (2) 类似的部分,即真实代码(就编程语言而言),情况显然如此:序言、宏定义等。这当然也适用于包和类的源代码。

然而,普通的 LaTeX 文档(例如书籍或论文)的大部分内容都是文本内容,这映射到 (1)。因此,编辑应该根据屏幕大小、字体大小、字体规格和电脑前用户的偏好来换行。这在协作环境中尤其重要:为什么我要被迫在 30 英寸的屏幕上人为地限制 80 个字符,只是因为我的同事更喜欢这个行长,并在每行后插入了一个“无语义”的硬换行符?让每个人都按照自己的意愿配置编辑器吧!

这引出了工具问题:从技术上和原则上讲,“80 个字符后中断”规则充其量是过时的。它有历史背景(终端窗口、行式打印机等的固定宽度),并且从那时起就作为许多工具的默认设置而存在,因为似乎没有人质疑它。然而,替代方案。如果diff只适用于基于行的(因为它是为 C 源代码设计的),请使用逐字差异工具。(例如,TortoiseSVN 中包含的 diff&merge 工具在这方面就很不错。)如果您的编辑器不支持软换行缩进,请换一个更好的编辑器!(据我所知,Emacs 支持这一点,而对于 VIM,有一个补丁可用我已经愉快地使用了很长一段时间了。

最后一点:大多数 LaTeX 用户似乎将 LaTeX 文档理解为“源代码”(就编程语言而言,如 C);因此,他们将适用于 C 程序的格式规则和工具应用于它。然而,超过 90% 的典型 LaTeX 文档实际上并不是“代码”,而是“内容”。因此,请应用语义标记规则!

相关内容