Latex 编译错误排查的一些经验

最开始接触Latex排版是从做ppt开始,所以一开始就与其他人的学习路线不同,但是这种奇葩的路线让自己对latex编译命令更为敏感。

首先介绍自己使用工具和环境:

* Tex 编译器:CTex

* 编辑器:Texmaker


错误排查

当在编译出现问题时,不要慌张,查看错误报告,仔细分析问题。

可以尝试下面两则通用的操作:

  1. 通过换用不用的编译命令

    Texmaker 将一些编译命令集成到 一条命令中,可以在 Tools Toolbar 中进行选择(另外可以定制自己的集成编译指令)

    在编译 beamer 模板时一直使用的 Xelatex 命令,但是在编译 article or report 时则应该使用 pdflatex 命令

  2. 删掉目录下的 .aux .log .out .toc 文件

    不同的编译命令之间切换时会出现一些不可预知的错误在日志、输出文件之中,这是可以尝试删掉目录下的相应文件,然后重新编译。


概念与原理

  • 语言抽象层:

    TeX 是一种宏语言。就像别的语言有库一样,TeX 语言有宏的集合。这些宏,就是用这个语言写出来的东西,供大家共用的。TeX 有个最基本的宏集合,与基础语言一起构成一种“格式”,就是 Plain TeX。基本的 TeX 语言和 Plain TeX 的宏,都是 Knuth 完成的。

    后来有了 LaTeX,就是 Lamport TeX。LaTeX 也是宏的集合,也构成一种与 Plain TeX 不一样的格式。这种格式提供了不少方便的功能,并强调结构化的文档,因而很快风行起来。

一个语言是抽象的,不能运行就没有结果。

  • 再来说软件层面:

    1. tex

      Knuth 在设计这个语言的同时也给出了一个程序用来把 TeX 语言的代码转换为排版的结果——这个程序当然也叫 TeX。嗯,可以把这个程序看做编译器。直接运行tex命令(用小写字母表示你实际使用的命令),默认就是用 Plain TeX 这种格式进行排版。为示区别,我们可以把 Knuth 的这个 TeX 程序叫 Knuth TeX。

    2. tex+编译选项:

      用 tex 加上一个选择格式的命令行编译选项,就可以改用 LaTeX 这种格式进行排版了。但这很麻烦,于是就把 tex 命令与对应编译选项合成为一个命令,叫 latex。简言之,latex 命令就是 tex 命令加一个选项的简写方式。

    3. ε-TeX:

      Knuth TeX 这个程序有一些功能不好实现,后面就有人进行扩展,得到 ε-TeX 这个程序,一般写成 eTeX。eTeX 程序和 Knuth TeX 都是 TeX 语言的一个实现,eTeX 增加了少量的几个命令,但一般来说是没有太多区别的。

    4. pdfTeX:

      Knuth TeX 输出的格式是 DVI(DeVice Independent)文件,但后来电子出版业和电子文档交换中常用的格式是 Adobe 公司开发的 PostScript 格式(PS)和 Portable Document Format 格式(PDF)。因此就需要有一些工具完成这样的转换,一些转换程序应运而生:Dvips(把 DVI 转换为 PS);DVIPDF、DVIPDFM、DVIPDFMx(把 DVI 转换为 PDF,可以认为后面的是前面的改进版)。

      转换的过程令人不爽,于是就又有了 TeX 语言的又一个实现,pdfTeX。它会把 TeX 语言写的代码直接编译成 PDF 文件。当然,不难理解 pdftex 命令就是用 pdfTeX 这个程序和 Plain TeX 这个格式进行排版,而 pdflatex 这个命令就是用 pdfTeX 这个程序和 LaTeX 格式进行排版。不过 pdfTeX 程序也保留了输出 DVI 格式的能力。

    5. XeTeX:

      时代在发展,多字节的编码渐渐代替 ASCII 成为主流。为了支持 Unicode 编码和直接访问操作系统字体,又出现了 TeX 语言的新的实现,即 XeTeX。作为一个现代的程序,XeTeX 也直接输出 PDF 文件(我们暂不去管它内部有格式转换的实现方式)。于是,不难理解 xetex 命令就是使用 XeTeX 程序以 Plain TeX 格式排版,而 xelatex 命令就是用 XeTeX 程序以 LaTeX 格式排版

    6. LuaTeX:

      哦,人们的要求总是在发展,现在又想在 TeX 中嵌入其他语言进行更强有力的扩展了。于是 Lua 脚本语言和 TeX 语言的结合体,LuaTeX 应运而生。LuaTeX 程序也是 TeX 语言的一个完整的有扩展的实现。LuaTeX 支持 Unicode、系统字体和内嵌语言扩展,能直接输出 PDF 格式文件,也可以仍然输出 DVI 格式。

瞧,语言的脉络是简单的,但软件程序总是层出不穷

  • 其他相关工具程序

    最后说一下 BibTeX 和 MakeIndex。这两个都是与 TeX 相关联的工具程序,一般用在 LaTeX 格式上。BibTeX 处理 LaTeX 格式编译时输出的 .aux 文件,根据其中的引用,从文献数据库中提取生成参考文献列表;而 MakeIndex 处理 LaTeX 格式编译时输出的 .idx 文件(里面是索引条目),生成 .ind 文件(里面是排序整理好的索引条目)。


总结

下面将TeX, LaTeX, XeTeX, PdfTeX等基本概念做简单梳理

  • TeX:一种宏语言。
  • Plain Tex: Tex中的一个最基本的宏集合与TeX的基础语言构成的一种格式。
  • LaTex: Tex中的一个宏集合,构成一种与 Plain TeX 不一样的格式。
  • Tex程序:把Tex语言转换为排版的程序,也叫Tex。为区别,称这个 TeX 程序叫Knuth TeX。
  • tex命令:Tex程序中的编译命令。tex命令默认用Plain TeX格式进行排版。也就是说tex命令后面默认跟的tex文件应该是用Plain Tex格式写的。
  • latex命令:tex命令加上某一个选项使用,就会用LaTeX 格式进行排版,也就是说此时后面跟的tex文件应该是用LaTex格式写的。为方便,就把tex 命令与对应编译选项合成为一个命令,叫latex命令。
  • ε-TeX 程序:Knuth TeX程序的一个扩展,也是一个程序,一般写成 eTeX。增加了少量的几个命令,但一般来说是与Knuth TeX程序没有太多区别的。
  • 实现:在文中的意思就是指“程序”的意思。如文中:eTeX 程序和 Knuth TeX 都是TeX语言的一个实现(也就是说,eTeX 程序和 Knuth TeX 都是把TeX语言转换为排版的程序。程序作用于tex文本文件,把tex文件编译成dvi文件)。
  • pdfTeX程序:Tex语言的又一个实现,也就是把Tex语言转换为排版的又一个程序。它会把 TeX 语言写的代码直接编译成 PDF 文件。
  • pdftex命令:pdfTex程序中的命令,用来编译用Plain TeX格式写的tex文件。
  • pdflatex命令:pdfTex程序中的命令,用来编译用LaTeX格式写的tex文件。
  • XeTeX程序:TeX语言的新的实现,即把Tex语言转换为排版的一个新程序。支持Unicode 编码和直接访问操作系统字体。
  • xetex命令:XeTeX程序中的命令,用来编译用Plain TeX格式写的tex文件。
  • xelatex命令:XeTeX程序中的命令,用来编译用LaTeX格式写的tex文件。
时间: 2024-08-25 16:09:42

Latex 编译错误排查的一些经验的相关文章

Latex 编译错误: ! pdfTeX error (ext4): \pdfendlink ended up in different nesting level than \pd fstartlink. 解决方法

最近写 AAAI 的文章,下载了其模板,但是蛋疼的是,总是提示错误,加上参考文献总是出错: 如下: ! pdfTeX error (ext4): \pdfendlink ended up in different nesting level than \pd fstartlink. \[email protected] ...ipout \box \AtBeginShipoutBox \fi \fi l.119 \begin{equation} ! ==> Fatal error occurre

LaTex编译错误

Error Launching Console Application PDFTeXify ... Command Line: gbk2uni.exe "XXX" Startup Folder: XXX 系统找不到指定的文件 解决方法: http://www.hooklee.com/default.asp?t=TeX%2FLaTeX 下载gbk2uni.zip,包含gbk2uni.exe等4个文件 把gbk2uni.exe放到ctex安装的bin目录下 查看ctex的安装目录:Opti

排查Android编译错误时的技巧

编译Android时,我们常用命令 make flashfiles -j8 -j8代表用系统的8个线程去编译 但是这样出来的log会直接打印在标准输出里,会存不全:而且因为是8个线程,会导致log的顺序是乱的 所以当我们编译过一次之后(大部分文件已经被编译了,下次编译会跳过,这样节省下大部分时间) 选择下面的命令编译比较好: nohup make flashfiles -j1 log会存储在当前目录下的"nohup"文件中,并且-j1参数指定只用1个线程去编译,log顺序不会乱,这样方便我们排查

visual studio编译错误集(转)

1.error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 在项目属性->Configration Properties->C/C++->Command Line页面的Additional Options中加入/wd4430 2.error MSB3073: The command regsvr32 /s /c 解决办法 最近将VC2002 代码移植到VC2010,

Error:Execution failed for task ':app:compileDebugAidl'. > aidl is missing(Android Studio编译错误)

今天下载了一个1.2.1.1版本的Android Studio,使用VPN更新好SDK之后就新建了一个hello world工程测试一下环境,然后就出现以下错误: Error:Execution failed for task ':app:compileDebugAidl'. > aidl is missing 什么情况?全新安装的环境也有错误?Google发布这个工具时没有测试好吗? 没搞过这个工具,一阵搜索得到以下方案: 1.右键工程->Open Module Settings 2.将Bu

nginx 504 Gateway Time-out错误排查

一次nginx 504 Gateway Time-out错误排查.解决记录,经过反复检查,发现造成这个问题的原因就是PHP的CURL没有设置超时时间,解决办法只要设置超时时间或者修改一下nginx的配置即可解决. 记一次莫名其妙的网站失去响应排查.之前网站一直是使用nginx做代理后端的apache运行php来提供服务.apache经常会不定期不定时间的出现不能服务失去响应,然后nginx出现"504 Gateway Time-out"查看错误日志也看不到任何东西,以为是apache的

Cocos2d-x文件编译错误解决

编译出现的错误: 1>------ 已启动生成: 项目: HelloCpp, 配置: Debug Win32 ------ 1>生成启动时间为 2014/5/9 14:43:43. 1>InitializeBuildStatus: 1>  正在创建"Debug.win32\HelloCpp.unsuccessfulbuild",因为已指定"AlwaysCreate". 1>ClCompile: 1>  所有输出均为最新. 1>

解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题

右键New->Other->Android Sample Project->选择Android 4.4.2->选择Support7Demos ,finish. 会出现编译错误 解决如下: 1.把这三个文件导入到Eclipse里, 这三个是库文件,并且勾选COPY到工作空间里选项 如果没有这三个文件,就从这里下载 2.导入三个library工程后,mediarouter会无法编译,打开工程属性在anroid里将api-level改成17,添加依赖工程appcompat 3.就是将刚才

java编译错误 程序包javax.servlet不存在javax.servlet.*

java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax.servlet.http 不存在 等错误 由于servlet和JSP不是Java平台JavaSE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置. 解决“软件包 javax.servlet不存在”错误的方法: 1. 搜索servlet-api.jar