我如何强制 ShareLatex 在编译时不篡改代码?

我如何强制 ShareLatex 在编译时不篡改代码?

我正在使用 ShareLatex,但遇到了错误! Missing $ inserted.。看到有很多关于这个主题的帖子,但我找到的修复方法对我的代码不起作用。我没有尝试的是告诉 latex 忽略该问题并继续,而不是尝试修复它。我最终通过剪切部分代码并进行编译以查找错误来源(这花了很长时间)找到了引发错误的文本。原来是\muShareLatex 包装为$\mu$。问题是错误消息说错误发生在行中\end{frame}(根本没有帮助),如果知道问题出在哪一行,那就太好了。

答案1

你提到\end{frame},这表明你使用beamer(或类似物)。

beamer全部的 frame在构建内容之前,它需要协商可能的叠加规范(将幻灯片frame分成不同的幻灯片)。因此,由于它读取了整个幻灯片frame,因此任何错误之内该框架将平移至指向\end{frame}

这是一个复制您的问题的最小示例:

\documentclass{beamer}
\begin{document}
\begin{frame}
\mu

abc
\end{frame}
\end{document}

这是另一个指向错误位置的错误最小示例:

\documentclass{article}
\usepackage{tabularx}
\begin{document}

\begin{tabularx}{\linewidth}{c}
  \mu \\ a \\ b \\ c
\end{tabularx}

\end{document}

原因(再次)是tabularx处理其中的内容与常规tabulars 不同,就像beamer处理frames 与常规文档文本不同一样。

解决这个(非常)特殊问题的一种方法是重新定义\mu工作方式:

\let\oldmu\mu
\renewcommand{\mu}{\ensuremath{\oldmu}}

以上\mu内容根据需要插入$s,取决于它是否处于数学模式或文本模式。

答案2

我想知道这里是否有一些混乱。你报告了错误

! Missing $ inserted

并询问如何停止 ShareLaTeX 将您的内容包装\mu$s 中。

但这反映出了一种误解。ShareLaTeX 对错误或插入美元符号不负任何责任。这是 TeX 试图弄清楚发生了什么,并纠正它认为可能导致编译文档时出现问题的错误。

这是 TeX 工作原理的一个基本部分。它会解析内容,尝试理解内容,并在遇到问题时采取各种措施。您可以以“全局”方式在一定程度上控制这一点。例如,您可以告诉它在遇到麻烦时停止,或者尝试继续,或者询问您该怎么做。

这里需要知道的关键一点是,这条消息不是来自 ShareLaTeX。它来自 TeX。您还可能从 LaTeX 或您加载的包中收到消息。我怀疑您会从 ShareLaTeX 收到消息。它只是将消息传递给您。

相关内容