为什么 LaTeX 宏如此不一致?

为什么 LaTeX 宏如此不一致?

我每天都使用 LaTeX 来撰写论文,虽然我发现它是一种非常好的文档制作工具,但该系统的某些方面确实令我困扰;例如非常不一致的宏系统。

举几个例子:

许多(但不是全部)块宏/命令看起来像这样:

\begin{lstlisting}
...
\end{lstlisting}

除了看起来像这样的数学块:

\[ ... \]

内联宏通常如下所示:

\footnote{...}

但当它们突然变成这样时:

{\em ...} % I'm aware that \emph{...} also exits

或者像这样:

\lstinline|...|

或者像这样:

$ ... $

那么,为什么 LaTeX 的设计如此不一致呢?似乎我添加的每个包都有一种新的编写方式,这使得 LaTeX 的学习曲线异常陡峭,为什么不保持一切一致和统一呢?

答案1

LaTeX 的主要目的之一是提供持续的 语法与 TeX 基元极不一致的语法不同,因此

\frac{a}{b}不是{a \over b}

\makebox[3pt]{foo}不是\hbox to 3pt{foo}

\begin{math} x \end{math}作为别名$ x $

环境和带参数的命令之间的区别有点随意,但通常效果还不错,使用环境主体来处理大块文本。在大多数文档标记系统中,您都会看到类似的东西,例如 HTML 或 XML 中的属性和元素之间的区别,<p> xxx </p>href=....

\bf自从 LaTeX2e 发布以来,大多数双字母字体命令(等)已被弃用,部分原因就在于此。(\em如评论中所述,略有不同。)

其他与列表和逐字相关的示例,它们必然具有不同的语法,比较 XML,其中类似的构造不是元素或属性,而是<![CDATA[....]]>

答案2

除了 David Carlisle 的回答之外,我还要引用 Python 之禅的这句话:

特殊情况还不足以打破规则。
尽管实用性比纯粹性更重要。

正如 David 指出的那样,有多种方法可以以标准格式编写这些命令。但如果我在写论文,我不希望它充斥着

Then substitute
\begin{math}
  x^2
\end{math}
for
\begin{math}
  y
\end{math}
in \ref{eq:foo}.

什么时候

Then substitute $x^2$ for $y$ in \ref{eq:foo}.

就足够了。

这是实用性打破纯粹性的一个典型案例。当然,第一个版本更纯粹。但纯粹性根本不值得。

答案3

不去讨论哪种语法更有用、更合理、更成熟,有一个根本原因。

(La)TeX 没有(静态)语法。词法分析器可以在解释过程中的任何时候重新定义,甚至由最终用户重新定义(即在文档代码中)。

这使得每个软件包和文档作者都可以开发自己的语法,无论多么聪明或不明智。经过几十年的(重新)开发,你只能面对大量(遗留)的东西,这些东西几乎只能靠一些大胆的惯例拼凑起来。

相关内容