当构建错误发生时,如何轻松确定 latex 文件的全名?

当构建错误发生时,如何轻松确定 latex 文件的全名?

我运行了递归 makefile 来构建我的大型树,该树包含数百个 latex 文件(我使用 latex 来做所有事情)。这些 makefile 遍历树并构建 pdf 文件,并使用 htlatex 生成 HTML 文件。

我遇到的问题是,当出现错误时,我总是很难找到实际导致了该错误的文件。

由于某种原因,Latex 不显示文件名,只显示错误和行号。

我一直觉得这很奇怪。给出文件名有多难?

例如,这是我现在遇到的一个错误:

(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)
! Missing \endcsname inserted.
<to be read again> 
                   \protect 
l.88 \end{tabularx}

所以现在我尝试通过向上滚动终端来查找文件名。但是生成的输出太多了,很多时候我都要花很长时间在缓冲区中上下搜索才能找到 latex 命令,以便找到发生错误时正在编译哪个文件。

是否有一个选项可以告诉 latex/pdflatex 仅显示实际使用的命令而不是所有其他日志记录,以便于查看命令,或者更好的是,是否有办法告诉它除了行号之外还显示文件名?

使用基于 texliver 2012 debian。

答案1

currfile您可以通过\usepackage{currfile}在文档中加载包并使用-interaction=errorstopmode如下参数启动 LaTeX pdflatex -interaction=errorstopmode thesis.tex

出现错误时,按I(大写“i”,如“Insert”)并插入以下内容:

\PackageWarning{Build error in File}{\currfilepath}

这将导致如下输出

Package Build error in File Warning: /home/myuser/theproblematicfile.pgf on input line 1.

您还可以使用输入重定向来自动执行此操作:

echo -e "I\n\\PackageWarning{Build error in File}{\\\currfilepath}" | pdflatex -interaction=errorstopmode thesis.tex

我不确定为什么currfilepath我的 shell 中之前需要三个反斜杠(我期望两个反斜杠),但除此之外它在这里不起作用。

请注意,这不是使用宏的推荐方法PackageWarning。也许一些比我更了解错误输出的人可以相应地改进这个答案(并删除此段落)。

更新 正如 egreg 指出的,我还没有明确写出来:这是一种解决方法,请按照建议创建并跟踪功能请求。每个人都可以受益。

相关内容