LaTeXTools 'No bib files found' Error

把文本编辑器从EverEdit换成了SublimeText 3。 装上LatexTool过后写latex十分方便,使用\ref, \cite等命令时还会自动补全提示。

但在latex码字过程中,如果对latex文件进行了拆分,使用\include一类的命令包含到一个主tex文件中。 由于子文件里面没有使用\bibliography之类的命令包含bib文件,因此在子文件中使用\cite时会提示No bib files found的错误。 翻了一下LatexTool源码里面实现bib文件查找的代码(python实现)

发现是LatexTool每次输入\cite{会触发一个叫latex_cite_completions.py的python代码,读取本tex文件以及它\include进来的文件中\bibliography和\addbibresource语句所指定的bib文件, 获得bib item信息。

因此,在这些子文件中,可以伪造一个无用\bibliography语句来骗LatexTool。 比如加一句:

\iffalse
\bibliography{../mybibfile.bib}
\fi

由于latex_cite_completions.py在读取tex文件时,会进行预处理,把%打头的字符串忽略掉, 但有个诡异的bug:在处理有些文件时会把%后面的所有后文都忽略,导致出现在%以后的\bibliography也漏掉了。 因此加在tex文件的前面比较稳妥。

shouxi /
Published under (CC) BY-NC-SA in categories latex  tagged with st  bib  latex 
comments powered by Disqus