使用脚注网址和 bibtex 网址在 LaTex 文档中查找所有损坏的网址和参考资料

使用脚注网址和 bibtex 网址在 LaTex 文档中查找所有损坏的网址和参考资料

是否有某种自动化方法可以测试 LaTex 文档中损坏的 URL 是否存在 404 等错误。我注意到一些损坏的 URL,但参考列表太大,无法逐一查看。有什么想法可以快速解决此类质量控制问题?

我有一些解决这个问题的想法:

  1. 像 SO 一样开放写作过程,在同伴的密切关注下,bug 往往会变得浅显

  2. 至少部分自动化处理文档,也许像 apache-logging 或类似的东西?(这只是猜测,我不知道如何对 LaTex 文档进行此操作以查找和处理损坏的材料 - 也许将大型文档分解成一些博客系列以供同行评审,任何人都可以发表评论,但这可能会成为数据管理的更大问题)

  3. 还有其他想法吗?

答案1

遇到同样的问题,我使用了以下脚本。当然,一些 Perl 黑客可以将其变成一行 ;-)。第一个提取所有显式 URL(\url{...}来自.texurl = {...}来自).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

答案3

我发现最简单的方法(无需编码)是将文件导出.tex为 PDF,然后使用名为pdfx扫描 PDF 以查找无效链接。Github 链接这里

对我来说,开箱即用。只需两个简单的步骤(假设您已经安装了 python 和 pip)。

$ pip install pdfx
$ pdfx <mydocument.pdf> -c

我尝试用这个工具来检测我的简历,它有 90 多个不同的纯文本形式的链接\href{}{}。这个工具检测到了所有链接。果然,它发现了一些无效的链接,我立即着手替换它们。

相关内容