latex 文字出现在float之前_Latex排版的报错,学会看懂之后的你有多厉害?

  点击上方蓝字,关注学新知!! f68e16f2a85ebc3866cc4e014f20885d.png

Latex 的简单报错的梳理

「Latex」是非常好用的排版工具,可以让我们免于各种格式对齐的烦恼,而仅仅「专注于我们的内容」

此外,我们也可以套用别人的「模板」来进行排版,例如杂志投稿、毕业论文排版、竞赛论文排版等等。

不过,在套用模板的时候常常会出现很多令新手很茫然、乃至于无奈而恼火的错误。

要解决这样的错误,我们首先就是要学会读懂当排版发生问题时的「报错的内容」

本文我来总结一些在 Latex 编译运行时候经常会遇到的「简单错误」

因为对 Latex,我也仅仅是视作工具,浅尝辄止,因此本文不治疑难杂症,而是分享最简单的错误以及「发生错误的机理」

这种简单的内容「有必要」做一个分享吗?

我想是有的。

对于新手来说,Latex 的编译就是一个黑盒子。因此首先要破除的就是,“一旦报错就完了”,“我肯定搞不定”的思想。

Latex 也是有逻辑的,就算它报错也是有逻辑的。只有掌握了最基本的概念,遇到问题时才不会慌乱,才会带着关键的信息去搜索引擎中寻找答案。

错误信息去哪看?

在 Latex 编辑器中排版时,控制台(console)会输出一些排版的信息。我以 Mac 上的 Texshop 为例,就是下面这个图,其中有 5 个要素

a34daea63d3cb7347829ff9376ebbbc4.png
  • 「数字 1」mytest console 指出这是 mytest.tex 排版的控制台
  • 「数字 2」:转到错误-点击之后会跳转到 Latex 认为错误发生的地方
  • 「数字 3」:删除 Aux 文件。Aux 文件是排版的辅助文件,后面有例子说明这一项的功能
  • 「数字 4」:报错信息
  • 「数字 5」:错误原文

「值得说明」的一点是:

  • 如果你是正文中的笔误,跳转错误一般会跳到发生错误的附近。但如果你是配置问题,一般跳转不出来。

后文我们截图就仅仅针对错误信息的部分。

常见的错误

下面列举一些常见的错误,我会贴上报错的信息,分析报错的原因,以及最后解决的方法。在每个案例中,我都会重复这一个过程。

重复定义的错误

0a89e2ef728b6cdd9039c03abea95481.png

这句话中信息量很大,包括:

  • ./mytest.tex:29:包括了 tex 文件的名称,相对路径,以及错误的行号-第 29 行
  • Latex Error:这是一个 Latex 错误
  • Command \rm already defined:错误原因

这个错误是因为我使用了下面的命令

\newcommand{\rm}{\textrm{div}}

本来,newcommand 命令可以帮助我们在 Latex 中定义简写。

但是,因为 \rm「Latex 系统自带」的命令,你再用这个名字的话,Latex 就不买账了,类似的,这里用 \div 也是不行的。

此外,如果你定义了两遍

\newcommand{\R}{\mathbb{R}}
\newcommand{\R}{\mathbb{R}}

也是会报错的。

你会说,我又不傻,怎么会一句话写两遍呢?没错。

但也许你的内容是 Ctrl+C、Ctrl+V 过来的,那还是有出现这种错误的情况的。

公式中出现了空行

c162fbd1417fab40c048d38a8ab237ae.png

根据报错信息

  • 第 77 行有问题
  • Latex 说缺少 $

下面给出错误的原文

\begin{equation}
f

\end{equation}

错误原因是在 equation 环境中有空行。

重复的 labels

在 Latex 中我们可以使用 \label{mylabel}\ref{mylabel} 来建立公式的引用。

但是在使用了 CMS 的模板之后,如果你使用了重复的标签,比如

\section{Preliminaries}\label{Sec.2}
\section{Numerical Tests}\label{Sec.2}

就会出现问题。报错内容为

d151cb6aed9721536f391ffeecacc181.png

仔细看看,我们可以注意到之前的区别。

  • 错误不是出在 ./mytest.tex 中,而是出现在 ./mytest.aux 文件中。

上面说了, .aux 文件是排版的辅助文件,会随着你点击排版一并运行出来的一堆文件中的一个。

00bb6124b73371cad8fb420b1b63588f.png
除了.tex文件是源文件,其他都是运行出来的
问题来了

既然错误不是出现在 .tex 文件中,那你在 .tex 中再怎么修改都是无济于事。

这时候我们就要使用在控制台界面中的 「删除 Aux 文件」 的功能了。

只有先在 .tex 中修改正确,然后删除辅助文件(Aux)再次运行才能成功。

想起来,如果新手遇到了这样的问题,不知道要删除 Aux 文件,真是头大,而且火大。

定理环境

在 Latex 中,要使用定理环境的话,我们需要先定义定理环境

\newtheorem{theorem}{Theorem}

这里第一个花括号中的 theorem 是我们的环境的名称。因此我们在使用的时候

\begin{theorem}
\end{theorem}

如果我们事先没有使用 \newtheorem 来申明环境,或者我们的申明是这样的

\newtheorem{thm}{Theorem}

那么我们在使用 \begin{theorem} 时就会出现下面的错误

0cb34b8057cf261eb18f5bbd3f893c9d.png

Latex 会告诉我们找不到「theorem环境」

这种错误容易发生在新手对定理环境的熟悉和理解不足之时。

https://www.overleaf.com/learn/latex/theorems_and_proofs

耐心阅读一下上面的文档,就可以明白

  • 如何让定理按章节编号
  • 让引理接着定理编号
  • 让推论单独跟随定理编号

中文字体

在 Texlive 中,使用中文已经非常方便。直接使用 XeLatex 对应的模板就可以。

照旧使用 article,而不用 CTEX,即

\documentclass[12pt]{article}

需要导入如下的 package

\usepackage{xeCJK}
\usepackage{fontspec}

然后设定 CJK 的中文字体,例如楷体

\setCJKmainfont{Kai}

问题是,Latex 怎么能理解我所理解的字体呢?

如果我们把 Kai 更换成 kai,就会报错,错误信息是

0242c2c900fdf44a33c8435c61c10f3e.png

它会告诉我们 kai 这个字体找不到。

公式错误

上面说的大多都是模板以及配置上的错误,这些错误相对来说更难处理。

此外就是我们在输入的时候发生的错误

  • 标注环境的花括号没有配对
  • 基本的 align、array 语法不熟悉

等等。

这里也举一个例子——大括号的公式

$$
\left\{
\begin{aligned}
& a+b = c\\
& c+d = a
\end{aligned}
\right.
$$

这是一段新手「特别想用」,但往往「记不住、记糊涂」的代码

  • 「最外层」是行间公式 $$ ... $$
  • 左侧括号和右侧没有括号,分别是 \left\right
  • 括号需要用 \ 转义
  • 内侧是 aligned 环境而不是 align

下面给出一个错误的示范,我们来看看报错是什么样的,错误的代码为

\begin{align}
\left\{
& a+b = c\\
& c+d = e
\end{align}
594f94fcf487beba1b943680b77dddf6.png

这里我「多截取」了几句控制台的输出,这样免得有些读者觉得错误信息就在输出的最后一句,并不是如此。

可以看到,它提示我们可能是少了 \right.,我们加上之后,依然报这个错误。

这个时候我们就需要反思,以及回顾一下,这个花括号的结构是怎样写的。

小总结

相对来说,在编辑公式时候发现的问题会好处理一些。这是因为

  • 模板错误一般发生在你打开了别人的文档,或者你「复制粘贴一大段」。因此你不容易进行「错误的定位」
  • 编辑公式的时候一般写了一句话你就要编译一下。因此你很容易就知道是哪个「细微的动作」发生了错误。

比如你知道你的大括号的公式写的不对,你根本就不必纠结怎么改正.

直接删掉,然后百度一个正确的大括号的写法不就 ok 了吗?

但从这里也可以看出,在运行「别人的文档」的时候,如果出了问题,而你又看不太懂报错的话,也是可以「一部分一部分粘贴」别人的文档,看看究竟是哪一小步会出现问题。

这就是「控制变量」「定位出错误」的思想了。

从没见过的错误

虽然上面列举了不少错误的种类,但列举完是不可能的,甚至很多错误其实并不具有代表性。所以,感谢你能坚持读到这。

我想强调的是什么呢?是

  • 找到报错的信息
  • 分析报错的原因
  • 寻求解决的方法

这个「过程」

虽然我们都会遇到没有见过的错误,但是我们有「搜索引擎」

但搜索引擎并不是万能的,也「不是智能」的,你只有拿着合适的钥匙才能找到正确的答案。而这个钥匙就是控制台输出中的「报错信息」,以及你对他的理解。

顺便说一句,上面的个别例子中的报错信息非常含混。报错位置甚至就是文档的第一行。这很容易就能「让新手从入门到放弃」

所以本次分享的一个用意也是希望新手能迈开这一步,这样后面我们对 Latex 的报错就不会那么恐惧啦~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值