arara:仅在最后一步编译中显示警告

arara:仅在最后一步编译中显示警告

我使用这个函数通过 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"}

相关内容