我在编写论文时遇到问题。
我想知道错误发生在哪一行?
我怎样才能做到这一点?
答案1
例如,参见以下带有错误的 MWE:
% http://tex.stackexchange.com/questions/315916/how-to-solve-compiling-error
\documentclass{article}
\begin{document}
Hello \World!
\end{document}
编译后,您将获得一个log
包含以下行的文件:
! Undefined control sequence.
l.4 Hello \World <========================================= error here===
!
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
[1
{C:/Users/Internet/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}] (315916-HelloWorld.aux) )
那里! Undefined control sequence.
有一行错误信息。
该行l.4 Hello \World
提到,在给定代码的第 4 行中,错误已认可!
请注意,错误可能发生得更早,但在这个简单的例子中,错误被正确发现。
该线!
表明该符号!
不是错误的一部分。
接下来是错误描述,告诉您\World
(最后显示的控制序列)未定义。
确实如此,因为对于HelloWorld
示例,我们不需要命令,因此前导\
只是一个拼写错误。如果应该有一个命令,\World
则必须像这样定义\newcommand{\World}{World}
或...
错误描述的结尾是行and I'll forget about whatever was undefined.
带有误差的 MWE 的结果 pdf 为
显示Hello
和!
被打印出来,但World
当然是缺失的。这可能是另一个提示,可以在不知道给定错误消息的完整含义的情况下找到错误...
[1
顺便说一句:文件中的行log
显示第 1 页已开始打印...
现在让我们看一个更复杂的例子:
% http://tex.stackexchange.com/questions/315916/how-to-solve-compiling-error
\documentclass{modernCV} % <============================================
\moderncvstyle{mycasual} % <============================================
\moderncvcolor{blue}
\name{Joe}{Doe}
\begin{document}
\makecvtitle
\chapter{nonsens} % <===================================================
\section{Languages}
\cvitemwithcomment{Language1}{Mother tongue}{}
\cvitemwithcomment{Language2}{Some text}{This text is located on the right}
\cvitemwithcomment{Language3}{Some longer text}{This text is located on the right and it is longer}
\section{Languages 2}
\mycvitemwithcomment{Language1}{Mother tongue}{}
\mycvitemwithcomment{Language2}{Some text}{This text is located on the right}
\mycvitemwithcomment{Language3}{Some longer text}{This text is located on the right and it is longer}
\section{Languages 3}
\mybcvitemwithcomment{Language1}{Mother tongue}{}{5cm}
\mybcvitemwithcomment{Language2}{Some text}{This text is located on the right}{5cm}
\mybcvitemwithcomment{Language3}{Some longer text}{This text is located on the right and it is longer}{5cm}
\end{document}
我用 标记了这三个错误<===========
。您将收到一条消息,指出有 3 个错误且没有写入任何页数(当然,文档类别是错误的!)。
如果出现多个错误,请始终检查文件log
并找到第一的错误!为什么是第一个?因为通常第二个、第三个等错误都是由第一个错误引起的。
因此,通常可以通过以下方式找到错误
- 定位第一的日志文件中的错误。
- 纠正这个错误
- 重新编译并从点 1 开始。...
好的,日志文件中的第一个错误是一个警告,我们应该阅读并更正:
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (MiKTeX 2.9 64-bit) (preloaded format=pdflatex 2016.5.24) 23 JUN 2016 01:34
entering extended mode
**./315916-Sample1.tex
(315916-Sample1.tex
LaTeX2e <2016/03/31>
Babel <3.9r> and hyphenation patterns for 75 language(s) loaded.
("C:\Program Files\MiKTeX 2.9\tex\latex\moderncv\modernCV.cls"
LaTeX Warning: You have requested document class `modernCV',
but the document class provides `moderncv'.
我们使用的文档类中有一个拼写错误。请将其更正为moderncv
(无大写 CV)!
我们遇到的第一个错误是:
! LaTeX Error: File `moderncvstylemycasual.sty' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)
这里你需要知道moderncv
通过连接两部分来构建一些常用的文件名,这里moderncvstyle
和mycasual
。因为我们有不是定义后,mycasual
我们收到错误消息,提示无法找到结果文件。更改mycasual
为casual
,此错误消失。
第二个错误是:
Enter file name:
! Emergency stop.
<read *>
这是由之前的错误引起的,在纠正第一个错误并重新编译后就会消失!
以下是之前的错误导致的,在纠正第一个错误并重新编译后就消失了:
l.5 \moderncvcolor
{blue}
*** (cannot \read from terminal in nonstop modes)
3. 错误是没有产生 pdf 输出...
所以您看到三个错误,请在我给出的第二个 MWE 中更正前两行并再编译三次。
现在我们得到 6 个错误,因为现在pdflatex
识别出一个未定义的命令mycvitemwithcomment
和mybcvitemwithcomment
。假设这是一个拼写错误,并将所有 3 个错误更改mycvitemwithcomment
为cvitemwithcomment
。删除/注释“语言 3”的部分。
修正后的 MWE:
% http://tex.stackexchange.com/questions/315916/how-to-solve-compiling-error
\documentclass{moderncv} % <============================================ modernCV
\moderncvstyle{casual} % <============================================ mycasual
\moderncvcolor{blue}
\name{Joe}{Doe}
\begin{document}
\makecvtitle
\chapter{nonsens} % <===================================================
\section{Languages}
\cvitemwithcomment{Language1}{Mother tongue}{}
\cvitemwithcomment{Language2}{Some text}{This text is located on the right}
\cvitemwithcomment{Language3}{Some longer text}{This text is located on the right and it is longer}
\section{Languages 2}
\cvitemwithcomment{Language1}{Mother tongue}{}
\cvitemwithcomment{Language2}{Some text}{This text is located on the right}
\cvitemwithcomment{Language3}{Some longer text}{This text is located on the right and it is longer}
\end{document}
现在看一下pdf。
在那里你会看到一条nonsens
来自生产线的印刷品\chapter{nonsense}
。你会看到不是所有错误都必须由 LaTeX 发现……