使用 latexmk 过滤日志文件

使用 latexmk 过滤日志文件

我通常在分割外壳中使用 latexmk,左侧放置我的代码,右侧放置 -pvc 模式的 latexmk。

当使用一些本身会加载很多其他包的包(比如 beamer)时,日志文件包含来自正在加载的包的数十甚至数百行消息(还有拼写文件、字体等)。

我希望将输出修剪为仅警告、错误和 latexmk 自己的消息,以免这些消息丢失。

有任何想法吗?

答案1

您可以使用pplatex它来过滤错误、警告和坏框:http://www.stefant.org/web/projects/software/pplatex.html

(汇编http://dl.dropbox.com/u/12697903/pplatex/pplatex-1.0-rc1-src.tar.gz需要在 src/outputfilter.cpp 中添加一个额外的 #include)

如果您ppdflatex在路径中有,您可以创建~/.latexmkrc如下文件来实现良好的工作流程(使用 KDE,但它应该很容易适应):

$pdf_mode = 1;
$pdflatex = 'ppdflatex -- -interaction=nonstopmode -shell-escape -synctex=1';
$pdf_previewer = "start okular";
$pdf_update_method = 0;
$recorder = 1;
$preview_continuous_mode = 1;
$sleep_time = 1;

答案2

我刚想起来橡皮具有日志过滤功能。原来 rubber 包中有一个名为的程序,rubber-info它仅用于解析日志文件。

因为latexmk充当tee(写入日志文件打印到 stdout 和 stderr,我们可以在 latexmk 完成后运行 rubber-info。

因此我将其放入一个 shell 脚本中:

#! /bin/bash

latexmk --pdf $1 > /dev/null 2>&1
rubber-info --check $1
rubber-info --boxes $1

并在 vim 中将 makeprg 设置为

:set makeprg=latexmake\ %:h

现在我只收到错误和警告(包括过满的框)。

答案3

尝试安静包裹,它可以过滤各种错误、警告和消息。

答案4

您需要编写一个用于过滤日志文件的小脚本。Perl、Python 或您选择的类似脚本语言或更长的egrep行(如果您在 *nix 系统下)都可以完成此操作。

在我知道之前latexmk我写了我自己的简约版本的过滤器代码(实际上是的texify)负责进行此类过滤。下面是过滤器代码本身,作为例子。这是一个 Perl 脚本,仍需要进行调整才能包含latexmk自己的消息。

#!/usr/bin/env perl
use strict;
use warnings;
my $nobox = 0; # Should box warning be excluded
my $nextlines = 0;
while (<>) {
    if ($nextlines > 0) { $nextlines--; print STDERR $_; }
    elsif (/^(!\s+)?LaTeX (?:Warning|Error)/i) { print STDERR $_; }
    elsif (/^! Undefined control sequence\./i) { chomp; print STDERR $_, ": "; $nextlines = 1; }
    elsif (/^! Use of .* doesn't match its definition\./i) { print STDERR $_; $nextlines = 3; }
    elsif (/^!/i) { print STDERR $_; }
    elsif (!$nobox && /(overfull|underfull|badbox)/i) { print STDERR $_; }
}

相关内容