跳过源代码中的行的安全位置

跳过源代码中的行的安全位置

理想情况下,我希望能够跳过 之前和之后的行\section、许多环境(定理、逐项、枚举等)之前和之后的行、\item列表中的 s 之间、显示样式数学之前和之后以及其他几个地方的行。它可以帮助我保持源代码井井有条。

不幸的是,Donald Knuth 决定跳过的行在源代码中应该具有语义含义。我相信他这样做有充分的理由,但如果开始新段落需要命令,我个人会更高兴\par

我知道代码组织的常规解决方案是%在由于非语义原因而跳过的行开头放置一个符号;然而,我发现这些额外的%符号使我的代码变得混乱,而且不如纯粹跳过的行有用。


问题:

在传统的 LaTeX 文档中,哪些地方(如果有的话)可以跳过一行或多行而不影响输出?我认识到如果允许重新定义,那么没有地方可以完全安全,因此假设正在使用标准或 AMS 文档类之一,没有加载任何附加包,并且序言中唯一的定义是定义定理类型。

为区分这个问题与什么时候可以安全地添加空行?假设我不知道各种命令和环境如何影响垂直模式。如果您愿意,我的问题是要求提供一份(不一定全面的)列表,列出哪些命令/环境会影响垂直模式,以至于之前和/或之后跳过的行不会产生任何影响。

答案1

链接问题中的答案有点误导,因为处于垂直模式是一个技术实现细节,与用户行为的关系并不像暗示的那样紧密。例如,您在列表后处于垂直模式,但 latex 会付出很大努力使空白行产生效果,以便列表行为与显示数学行为相匹配(显示后处于水平模式)。

首先,该行为不是嵌入在 TeX 中的,它取决于当前的 catcode 设置。

TeX 删除每行中的所有空格,包括系统相关的行尾标记(这部分是不是可定制)然后插入\endlinechar设置的 if。通常在 LaTeX 中为 ^M。然后,使用的 catcode\endlinechar就像它是文件中的普通字符一样。通常,它是 catcode 5,这是特殊的 catcode,它使单个 ^M 像空格一样,但两个 ^M 像空格一样\par(省略一些细节)。但是,当 ^M 像空格一样时,您可以让其具有 catcode 10,或者设置,\endlinechar=32然后在每个行尾生成一个空格(并且没有行尾)。

在此处输入图片描述

\documentclass{article}

\begin{document}\endlinechar=32

One two    three



four

five

\begin{itemize}

\item one

two \item

three

\end{itemize}

\end{document}

但是,如果您不想这样做并保留标准设置,那么规则应该很简单,在您想要结束当前段落的地方使用空白行。

因此空行是错误在数学模式中。

空行在垂直方向上形成一个 \par 段落结束标记(par 模式)(但由于\par在垂直列表的开头会被忽略,因此在 等的开头以及每个段落之后都有一个空行是可以的\parboxminipage

你应该绝不在显示数学之前放置一个空行(TeX 认为显示数学应该始终位于段落内而不是段落之间,因此如果在之前使用空行\[或任何其他$$内部使用的内容,则 TeX 将插入等效于\indent$$作为恢复操作的代码,并且您会得到一条由缩进框组成但没有文本的虚假白线,看起来像显示前的虚假垂直空间。

您是否应该在显示数学环境后放置一个空行,这取决于下面的文本是新段落还是显示之前段落的延续。

如果在乳胶列表环境之前或之后放置一个空白行,则该环境后面的文本将开始一个新段落,因此通常会缩进,如果没有在列表之前或之后放置空白行,则以下文本将被视为列表前段落的延续。

几乎所有 latex 构造的位置都与字母 相同X。人们经常问如何使包含的图像并排或一个在另一个之上。答案是这样的X

X X

把两个 X 并排放置

X

X

X一个放在另一个之上,放在单独的段落中。您可以替换X\includegraphics\fbox\parbox或 ,\begin{tabular}...\end{tabular}并且与空白行的交互相同。

答案2

我学会了通过在短语后(即标点符号后)拆分行来组织我的资料。这样,大多数编辑就变成了对行进行重新排列,文本编辑器通常对此有很好的支持。作为额外的好处,版本控制系统也以更改的行为基础工作,因此这是一个很好的匹配(例如,添加一个单词不会导致由于重新填充段落而导致十几个更改;更改很容易发现)。将例如文章和装订在一起可以使错误(如狗或错误)很容易被发现(搜索不到)。

我大多以相同的方式编写等式,排列等号(如果有多个的话),拆分和缩进较长的项,如果出现长因子,则再次缩进它们,依此类推。

总之,我努力使源代码保持缩进,就像您在非常狭窄的边距下缩进程序一样(LaTeX 比用 C 等语言编写的数学表达式要冗长得多)。只有极少数情况下,自然的源代码空白会产生不必要的段落中断,偶尔一行必须以 % 结尾,这样逻辑上的拆分才不会导致不必要的空白。

无论如何,这是源代码。它旨在供人们阅读,特别是不只是作者。任何非标准的东西都会使文档难以阅读,更难重用或与其他文本集成,并且几乎不可能与他人共享。

相关内容