答案1
与往常一样,egreg 对我的疯狂想法有一个很好的替代解决方案(由于历史原因,保留在此更新的底部)。:)
有一个名为texloganalyser
(我喜欢这个拼写!) 的工具可能会对我们有所帮助。它包含在 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
在引擎盖下,因此您可以搜索所有内容。:)
我们就这样了,完全没有经过测试,所以我希望得到最好的结果。:)