是否有某种自动化方法可以测试 LaTex 文档中损坏的 URL 是否存在 404 等错误。我注意到一些损坏的 URL,但参考列表太大,无法逐一查看。有什么想法可以快速解决此类质量控制问题?
我有一些解决这个问题的想法:
像 SO 一样开放写作过程,在同伴的密切关注下,bug 往往会变得浅显
至少部分自动化处理文档,也许像 apache-logging 或类似的东西?(这只是猜测,我不知道如何对 LaTex 文档进行此操作以查找和处理损坏的材料 - 也许将大型文档分解成一些博客系列以供同行评审,任何人都可以发表评论,但这可能会成为数据管理的更大问题)
还有其他想法吗?
答案1
遇到同样的问题,我使用了以下脚本。当然,一些 Perl 黑客可以将其变成一行 ;-)。第一个提取所有显式 URL(\url{...}
来自.tex
和url = {...}
来自).bib
。我将其称为extractlinks.pl *.tex *.bib | sort | uniq > urls.txt
获取文件中的 URL 列表:
#!/usr/bin/perl
use File::Slurp qw(read_file);
foreach my $file (@ARGV) {
foreach my $line (read_file($file)) {
my @urls = ($file =~ /\.bib$/)
? $line =~ m/^\s*url\s*=\s*{([^}]+)}/
: $line =~ m/\\url{([^}]+)}/g;
print "$_\n" for @urls;
}
}
第二个脚本尝试使用 下载每个 URL wget
。成功时,URL 会打印到 STDOUT,失败时,会打印到 STDERR。我将脚本调用为
./checklinks.sh < urls.txt > url-ok.txt 2> url-fail.txt
:
#!/bin/bash
while read url; do
wget -O/dev/null -q "$url"
if [ $? -eq 0 ]; then
echo $url
else
echo $url 1>&2
fi
done
答案2
如果您的 URL 始终被标记,例如,\url{...}
那么应该很容易提取它们的完整列表,只需使用 sed 或其他东西或重新定义 \url 即可将其写出。有了这样的列表,很容易检查所有指向可用文档的 url 链接,您只需使用 wget 等命令行工具或在线链接检查器即可http://validator.w3.org/checklink