我通常在分割外壳中使用 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 $_; }
}