我使用这个函数通过 arara 在 gVim 中编译我的 latex 文档:
function! CompileTex()
silent write!
call setqflist([])
echon "compiling with arara ..."
exec "lcd %:h"
setlocal makeprg=arara\ -v\ %
silent make!
if !empty(getqflist())
copen
wincmd J
else
cclose
redraw
echon "successfully compiled"
endif
endfunction
并有以下映射来调用它:
nnoremap <buffer> <F6> :call CompileTex()<CR>
我使用 Latex-Box 来很好地解析和过滤 tex 构建输出。一切都运行良好(arara 真的很棒),但有一件事我想知道它是否可以改进。假设我有以下文档:
\documentclass{article}
% arara: pdflatex: {synctex: yes, action: nonstopmode, options: "-file-line-error-style"}
% arara: bibtex
% arara: pdflatex: {synctex: yes, action: nonstopmode, options: "-file-line-error-style"}
% arara: pdflatex: {synctex: yes, action: nonstopmode, options: "-file-line-error-style"}
\begin{document}
\section{Foo}
\label{sec:foo}
\ref{sec:foo}
\end{document}
正如你所看到的图像,当我编译文档时,quickfix 窗口(显示错误和警告)显示第一次调用编译器的警告(再次编译后该警告消失)。有什么方法可以告诉 arara 忽略警告直到最后一次调用?
注意:i)我知道我可以只添加一个指令并避免该问题,但这只是较大文档中发生的情况的 MWE。ii)如果这个问题不属于这里,请删除它(我实际上把它发布在arara 的 github 问题但尚未收到答复)。
编辑:我(还)想知道是否可以通过告诉 arara 只运行 pdftex 一次并且仅在真正需要时执行连续运行(例如,纠正交叉引用)来减少编译时间。
答案1
gVim 确实使用控制台输出来获取警告petobens 的评论。然后可以action: batchmode
在第一次运行时使用 来抑制控制台输出。该选项也draft: true
很有用,因为它可以抑制尚不需要的 PDF 输出文件(但辅助文件已写入)。
并且选项确实--halt-on-error
在第一个错误时停止,它可以通过 来指定options: "--halt-on-error"
。
如果 (pdf)TeX 遇到错误,则 (pdf)TeX 将退出代码设置为非零。Arara 不会检查任何.log
文件或命令的控制台输出。它只检查程序的退出代码。如果退出代码为零,则假定程序运行成功并继续执行下一个指令。否则,arara 会以“FAILURE”中止作业,并且不会执行下一个指令。
本例中 arara 指令的示例:
% arara: pdflatex: {synctex: yes, action: batchmode, draft: yes, options: "-halt-on-error -file-line-error-style"}
% arara: bibtex
% arara: pdflatex: {synctex: yes, action: batchmode, draft: yes, options: "-halt-on-error -file-line-error-style"}
% arara: pdflatex: {synctex: yes, action: nonstopmode, options: "-halt-on-error -file-line-error-style"}