最近,我发现很长一段时间以来我在 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
时出现的错误消息一样令人困惑。$