Latexmk:“Fls 文件将日志文件列为输入文件”和“使用 biber OMITTING TEST 对丢失的 bib 文件进行测试”警告

Latexmk:“Fls 文件将日志文件列为输入文件”和“使用 biber OMITTING TEST 对丢失的 bib 文件进行测试”警告

我正在运行latexmk我的文档main.tex

latexmk -pdfxe -silent -synctex=1 "main"

当我运行命令时,我收到此消息(通常连续重复几次):

Latexmk: ???!!!==== Using biber OMITTING TEST on missing bib files
Latexmk: !!!!!!!!!!! Fls file lists log file as an input file for rule 'xelatex'. I won't treat it as a source file, since there appear to be no good uses for it. This behavior happens at least under acmart.cls with xelatex

我没有acmart.cls在我的文档中使用,除非它被包含在另一个包中。

我的.latexmkrc文件包含以下内容:

ensure_path( 'TEXINPUTS', './pkg//' ); # Includes custom package files that I have placed in the ./pkg directory
$bibtex_use=2;

# Run bib2gls as needed
# From support/latexmk/example_rcfiles/bib2gls_latexmkrc (CTAN)
push @generated_exts, 'glstex', 'glg';

add_cus_dep('aux', 'glstex', 0, 'run_bib2gls');

sub run_bib2gls {
    if ( $silent ) {
        my $ret = system "bib2gls --silent --group '$_[0]'";
    } else {
        my $ret = system "bib2gls --group '$_[0]'";
    };
    
    my ($base, $path) = fileparse( $_[0] );
    if ($path && -e "$base.glstex") {
        rename "$base.glstex", "$path$base.glstex";
    }

    # Analyze log file.
    local *LOG;
    $LOG = "$_[0].glg";
    if (!$ret && -e $LOG) {
        open LOG, "<$LOG";
    while (<LOG>) {
            if (/^Reading (.*\.bib)\s$/) {
        rdb_ensure_file( $rule, $1 );
        }
    }
    close LOG;
    }
    return $ret;
}

有人可以解释一下我运行时输出的消息latexmk(以及如果可能的话,如何修复它们)吗? 我没有包含 MWE,因为我只是想询问错误消息的含义。

答案1

Latexmk 维护者在这里:

为什么会出现有关 .log 文件的警告? 正如 David 和 OP 所发现的,第二条警告消息(关于 .log 文件的消息)是由于将 hyperxmp 包与 xelatex 一起使用而导致的。在这种情况下,hyperxmp 会读取 .log 文件的元数据来设置当前日期和时间的值。这会导致 .log 文件在 .fls 文件中被列为 INPUT 文件。通常,latexmk 将 .fls 文件视为 *latex 的源文件的最终列表。

现在,任何源文件内容的更改通常都是 latexmk 重新运行 *latex 的原因。但 .log 文件不是正常的输入文件,因此 latexmk 应该警惕这种情况。存在潜在的无限循环,因为日志文件的第一行包含运行时间,并且可能在每次运行时发生变化而不会影响任何相关输出。

此时,我更愿意保留有关 .log 文件被列为源文件的警告消息,因为它表示可能存在异常情况。但我已修改了 latexmk 下一版本的消息措辞,并提到 hyperxmp 是可能的(且无害的)原因。

附加评论:在调试此类问题时,.fls 文件(以及 latexmk)报告已输入 .log 文件,一种自然的策略是查看 .log 文件以查看 .log 文件被读入的位置。当您这样做时,您会一无所获。一旦您知道 .fls 文件中的“INPUT file.log”行可能是由编译读取引起的,表面上的矛盾就解决了元数据.log 文件,而不是仅仅通过读取 .log 文件的内容。

为什么会出现关于省略缺少 .bib 文件的测试的警告? Latexmk 有一个配置变量$bibtex_use,其默认设置是只有 .bib 文件存在时才运行 bibtex;这可以防止在 .bbl 文件可用但 .bib 文件不可用的情况下覆盖 .bbl 文件。但是当使用 biber 而不是 bibtex 时,latex 当前确定 .bib 文件名称的方法仅适用于运行 biber,与 bibtex 的情况不同。因此,您读到的消息实际上是在说 latexmk 不会遵循变量$bibtex_use。这个问题将在下一个版本中得到修复。

答案2

这个警告意味着 latexmk 认为你有一个像这样的文档

\documentclass{article}

\begin{document}

\input{\jobname.log}
xxx

\end{document}

它输入一个.log文件,它只是警告你,即使它是输入,它也不会将其视为源文件。

上述代码生成:

Latexmk: Examining 'dd159.fls'
Latexmk: !!!!!!!!!!! Fls file lists log file as an input
   file for rule 'latex'. I won't treat it as a source file, since
   there appear to be no good uses for it.
   This behavior happens at least under acmart.cls with xelatex
Latexmk: !!!!!!!!!!! Fls file lists log file as an input
   file for rule 'latex'. I won't treat it as a source file, since
   there appear to be no good uses for it.
   This behavior happens at least under acmart.cls with xelatex
Latexmk: !!!!!!!!!!! Fls file lists log file as an input
   file for rule 'latex'. I won't treat it as a source file, since
   there appear to be no good uses for it.
   This behavior happens at least under acmart.cls with xelatex
Latexmk: !!!!!!!!!!! Fls file lists log file as an input
   file for rule 'latex'. I won't treat it as a source file, since
   there appear to be no good uses for it.
   This behavior happens at least under acmart.cls with xelatex
Latexmk: Examining 'dd159.log'
Latexmk: Log file says output to 'dd159.dvi'

相关内容