将 $$...$$ 映射到 \

将 $$...$$ 映射到 \

正如下面的文章中提到的,$$...$$不应该在 LaTeX 中使用:

为什么 \[ ... \] 比 $$ ... $$ 更可取?

如果$$...$$不被使用而\[...\]必须使用 ,为什么$$...$$仍然可用?为什么不能$$...$$映射到\[...\]

答案1

在 INITEX 中,$没有预定义的含义。其中第一行plain.tex

\catcode`$=3

为该角色赋予其常用的“数学移位”功能。任何字符可以被赋予这个含义,但 Knuth 以此为开端,然后 LaTeX 也效仿。

在下面的考虑中,$将表示“类别代码为 3 的字符”。

如何$工作?有几种情况需要考虑。

  • 如果 TeX 处于垂直模式,它将启动水平模式并重新读取$标记。

  • 如果 TeX 处于受限水平模式,它会丢弃$并进入内联数学模式。

  • 如果 TeX 处于(不受限制的)水平模式,它会查看下一个标记无需扩大; 叫它。 如果然后$TeX 进入显示数学模式并丢弃发现的$标记。如果不是$,那么 TeX 进入内联数学模式,丢弃$标记并重新读取

  • 如果 TeX 处于显示数学模式,它会寻找下一个标记无需扩大; 叫它。 如果$,TeX 结束显示数学模式(并做很多事情)。如果不是$,则 TeX 发出错误消息并插入$,这会导致结束显示数学模式(假设用户点击回车或\errorstopmode不起作用)。标记重读。在两种情况下,均恢复水平模式,无需插入\indent\parskip粘贴。

  • 如果 TeX 处于内联数学模式,它会结束它(做很多事情)并恢复水平模式(受限或不受限制)。

\eqno注意:关于和有一些微妙之处\leqno,但与大局无关。

您可以看到,这$$在语言中是某种程度上硬连线的:它不是诸如\halign\par之类的原始事物,我们可以随意赋予其新的含义(当然,知道我们在做什么)。

LaTeX 诞生时,提供了宏\(\)和用于启动/关闭内联数学模式和显示数学模式。但由于格式基于 Plain TeX,并且许多人已经习惯使用\[进入和退出数学模式,Leslie Lamport 决定不禁用它,这可以通过简单的指令实现\]$

\catcode`$=12

在定义了所有使用数学模式的宏之后。为什么不禁用它?因为从 Plain TeX 移植代码会更容易。但是,$$...$$手册中没有提到,原因很充分:当fleqn使用该选项时,此构造无法正确运行;用构建的数学显示$$...$$无论如何都会居中。对于用\[...\]或等效displaymath环境构建的数学显示则并非如此。

使其成为$$...$$非法意味着也$...$将使内联数学模式也成为非法。现在不是一个选择,它可能在 LaTeX 诞生之初就已经可以做到了。现在这么做会破坏数千份旧文档。

为什么不能$$...$$映射到\[...\]?由于上述原因。它可以通过变成一个活跃的角色来完成$,作为我的回答定义 `$$$ $$$` 来对齐展示。但是,这违反了其他几个法律规定,因此也不是一种选择。

没有狂热建议用户不要使用$$...$$;如果人们愿意,他们有自由意志,可以不听专家的意见。他们可能会搬起石头砸自己的脚,但这是他们的问题。

我会继续建议用户不要使用$$...$$。你想听这个建议吗?好。你不想吗?再好不过了,但如果你的文档坏了,你就得自己承担责任了。

答案2

正确答案是为什么$$...$$仍然可用是:因为 LaTeX 已经老了。这实际上并不是唯一被弃用的东西;您有\bf\it和朋友,eqnarray以及eqnarray*,一堆包,$$...$$等等。

为什么 LaTeX 没有“清理干净”?首先,你至少需要一定程度的向后兼容性。其次,你让人们使用坏代码;那么会发生什么呢?

LaTeX 是否应该崩溃并出现错误:“嘿,老兄,你最好使用 2014 年的语法,而不是 1992 年的语法,我不会支持这种老旧的垃圾”?(这确实不是一个好主意,考虑到使用 LaTeX 并且不擅长任何编程的人的数量,很高兴它能做一些在他们看来合理的事情。)

是否应该出现警告?(请注意,会出现许多警告,如果人们读到它们,我们在这里回答问题的工作量就会少很多。尤其是$$,因为它是 TeX 原语,而 LaTeX 层对它的控制很少,它甚至不能发出警告。)

所以剩下的唯一选择是:保留弃用的语法。

相关内容