如何强制仅使用 LaTeX 命令?

如何强制仅使用 LaTeX 命令?

最近,我发现很长一段时间以来我在 LaTeX 中做的所有数学题都是错误的!

我使用的$是 TeX 命令,而不是\(LaTeX\)命令!我立即回去修复了我的错误,但这让我很疑惑,有没有办法让 LaTeX 编译器和 TexStudio(或其他编辑器)不使用 TeX 命令以保留正确的排版?

此外,是否可以编写一个宏来自动将符号转换$为相应的\(\)?我试过了

\renewcommand{$}{\relax\ifmmode\)\else\(\fi}

但由于特殊符号的处理,这是完整的或错误的。

我可能在很多地方都会犯类似的错误,所以我还想知道是否有一个类似于网站的 W3C HTML 验证器的 LaTeX 语法检查器,或者一个可以强制我使用正确命令的 IDE。

答案1

正如评论中提到的,该nag软件包不仅尽力使用 TeX 而不是 LaTeX 语法,而且还使用已弃用的 LaTeX 内容。这是使用 LaTeX2e 所能做到的最好事情,因为内核本身和软件包的编写方式是:它们使用 TeX 构造而不使用“LaTeX 包装器”。

LaTeX3 项目的目标之一是开发一种新的 LaTeX,为这些低级结构提供“适当的”LaTeX(代码)接口。然而,目前这还未达到完全可用的格式,因此 LaTeX2e 的限制仍然存在。

关于$...$ 相对 \( ... \),请注意 LaTeX2e 明确允许使用类似 TeX 的语法:LaTeX:文档准备系统(第 2 版,第 39 页)。因此,除了任何技术讨论之外,禁用它$实际上没有任何意义,因为您(以及扩展包作者)被允许将其用于内联数学模式。(这不扩展到$$显示数学模式,官方 LaTeX 界面是\[ ... \]。)

答案2

您从哪里“了解到”使用$作为开关来启动和终止内联数学模式对于 LaTeX 用户来说是不正确的?

我会走得更远@egreg在他的评论中指出,不仅使用$来启动和结束内联数学模式没有错\(,它比和具有某些优势\)。考虑以下 MWE:

\documentclass{article}
\begin{document}
\tableofcontents
\section{\(1+1=2\)}
\end{document} 

如果您编译两次,您将收到以下不太具启发性的错误消息:

>  LaTeX Error: Bad math environment delimiter.  

收到此错误信息的原因\(\)不“健壮”(在 TeX/LaTeX 意义上),这会导致生成目录的 LaTeX 代码出错。为了避免出现此错误消息,您可以可以类型

\section{\protect\(1+1=2\protect\)}

但我敢说你很快就会决定最好这样写

\section{$1+1=2$}

附录:检查\(\)在 LaTeX 内核中是如何定义的可能会很有启发(例如,参见文件latex.ltx):

\def\({\relax\ifmmode\@badmath\else$\fi}
\def\){\relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}

其中\@badmath定义为

\gdef\@badmath{\@latex@error{Bad math environment delimiter}\@eha}

因此,\(\)最终都会调用$,并加入一些错误检查:\(如果在数学模式下遇到错误,则会引发错误,\)如果在数学模式下遇到错误,则会生成错误不是在所谓的“内部”数学模式中。

实际上,除非宏\(\)在 LaTeX 意义上变得健壮(例如,通过加载包),否则使用它们可能会导致其他错误消息 - 参见上面的例子 - 这些错误消息与错误使用fixltx2e时出现的错误消息一样令人困惑。$

相关内容