用于日志文件抓取的 Arara 规则

用于日志文件抓取的 Arara 规则

是否有脚本或arara规则会从日志文件中抓取有关坏盒、警告和明显的重新运行消息的消息并将其输出到 stdout?它不需要完美。我正在寻找替代什么基勒在“构建”操作结束时执行此操作,因为我使用arara清理规则删除日志文件,从而阻止 Kile 抓取它。

答案1

与往常一样,egreg 对我的疯狂想法有一个很好的替代解决方案(由于历史原因,保留在此更新的底部)。:)

有一个名为texloganalyser Rule Britannia!(我喜欢这个拼写!) 的工具可能会对我们有所帮助。它包含在 TeX Live 中,因此快速texdoc texloganalyser(将我们重定向到perldoc texloganalyser) 会为我们提供所需的所有标志:

-e: displays the end of the log, about the TeX's memory.
-f: outputs the LaTeX Font Infos warnings and calculations.
-h: outputs only warnings about horizontal boxes.
-i: displays 'images' (pdf, [e]ps, png, jpg) used.
-o: outputs only warnings about overfull boxes.
-p: outputs the LaTeX Packages infos and warnings.
-r: displays warnings about references (missing or
multiply-defined).
-s: displays .sty and .cls files used.
-t: displays .tex files used. This option is very useful when you parse
logs of master files, to know in which file to look to correct
errors/warnings.
-u: outputs only warnings about underfull boxes.
-v: outputs only warnings about vertical boxes.
-w: displays all TeX, LaTeX and font Warnings.

texloganalyser因此这实际上是一个规则包装的问题arara

identifier: texloganalyser
name: TeX Log Analyser
commands: 
- <arara> texloganalyser @{ overfull } @{ underfull } "@{ getBasename(file) }.log"
arguments:
- identifier: overfull
  flag: <arara> @{ isTrue(parameters.overfull, "-o") }
- identifier: underfull
  flag: <arara> @{ isTrue(parameters.underfull, "-o") }

因此我们可以得到:

% arara: texloganalyser
% arara: texloganalyser: { overfull: yes }
% arara: texloganalyser: { underfull: yes }
% arara: texloganalyser: { overfull: yes, underfull: yes }

再次,未经测试。:)


我不确定以下解决方案是否真的好,但这是我能想到的唯一解决方案。:)遗憾的是,arara它本身没有用于文件抓取的内置功能,所以我认为我们可能需要在终端上做一些卑鄙的伎俩。

我的这个古怪的想法是基于使用 bash 脚本arara(参见是否可以编写使用 bash 脚本的 arara 规则?)。遗憾的是,我们有一个特定于操作系统的技巧,我不知道如何在 Windows 上模仿这种行为。无论如何。

我正在考虑这样的脚本:

function lookuplog() {
    log="$1"
    text="$2"
    output=$(grep "$text" "$log")
    status=$?
    if [ $status -eq 0 ]
    then
        echo "$output"
    else
        echo "Nothing suspicious found."
    fi
}

我起初想,“嘿,让我们grep直接使用吧”,但由于其退出代码与发现的出现次数相关,我们可能会遇到一些问题!这就是为什么我决定将其绑定grep到一个脚本中,以确保退出代码始终为零,并且不会干扰的arara工作流程。

我们刚刚编写的脚本检查文件中某些关键字的出现情况.log。例如,

I like ducks!\bye

如果我们lookuplog在生成的.log文件上运行并寻找未满的盒子,这就是我们的输出:

paulo@alexandria ~$ lookuplog ducks.log "Underfull"
Nothing suspicious found.

现在,让我们检查一下 David Carlisle 提供的这个文件:

\hbox to 3in{a}\bye

如果我们运行脚本,事情就会完全不同:

paulo@alexandria ~$ lookuplog mallard.log "Underfull"
Underfull \hbox (badness 10000) detected at line 1

耶!等一下,我们的箱子还没装满。:)

现在,只需将该脚本包装在arara规则内即可。:)

identifier: lookup
name: LookUp
commands: 
- <arara> bash -i -c lookuplog "@{ getBasename(file) }.log" "Underfull"
- <arara> bash -i -c lookuplog "@{ getBasename(file) }.log" "Overfull"
arguments: []

当然,我们需要进入verbose模式才能看到发生了什么。:)

如果坏盒子是不可接受的,我们可以改变脚本,使其在被发现时实际返回一个非零值 - 这样,arara就会在出现坏盒子的迹象时停止。:)

您可以将所有这些命令包装在一条规则中,甚至可以为过满或未满的框创建其他规则。事实上,请注意,该lookuplog文件就grep在引擎盖下,因此您可以搜索所有内容。:)

我们就这样了,完全没有经过测试,所以我希望得到最好的结果。:)

相关内容