用 PDF 比较来测试一个包

用 PDF 比较来测试一个包

你们中有谁使用 PDF 来测试其包的良好输出吗?

我计划做以下事情。

  1. 手工构建我认为正确的示例:TEX + PDF 文件。
  2. 每次我更新源代码时,我都会重新编译第一步的 TEX 文件,以将它们的 PDF 与标记为正确的 PDF 进行比较。

你会这样做吗?是否有现成的脚本可以做到这一点?

答案1

这可以通过 l3build 自动完成

目录布局包含

build.lua
pkg.sty
testfiles/test1.lvt

构建文件

module = "pkg"

sourcefiles={"*.sty"}

软件包

\ProvidesPackage{pkg}[2022-11-19 l3build example package]

\def\foo{abc}

测试文件/test1.lvt

\documentclass{article}
\usepackage{pkg}
\input{regression-test}

\begin{document}
\START

\TEST{basic expansion}{\show\foo}

\showoutput

abc \foo

\foo

\end{document}

您可以自动运行测试。

build.lua设置包,我需要.sty在这里指定源,因为通常它假定.sty 是从.dtx源生成的。

测试文件是一个 latex 文档,但通常给出.lvt扩展名。您可以用各种方式进行测试,这里我使用,\show但也\showoutput显示了 pdf 输出的符号表示。

然后

l3build save test1

将运行 latex 并保存规范化的测试结果日志文件,test1.tlg 假设这看起来不错,这通常会被签入到源代码控制中。

l3build check

然后将运行所有测试

$ l3build check
Running checks on
  test1 (1/1)
          --> failed


  Check failed with difference files
  - ./build/test/test1.luatex.diff
  - ./build/test/test1.xetex.diff

由于 luatex 使用的是 latin modern opentype 而我们保存的结果 showoutput 使用的是 computer modern,因此保存引擎特定的参考结果:

cp ./build/test/test1.luatex.log testfiles/test1.luatex.tlg
cp ./build/test/test1.xetex.log testfiles/test1.xetex.tlg

然后再次检查:

$ l3build check
Running checks on
  test1 (1/1)

  All checks passed

现在如果我们对包进行更改

\ProvidesPackage{pkg}[2022-11-19 l3build example package]

\def\foo{
% egreg left a space
abc}

并运行检查:

$ l3build check
Running checks on
  test1 (1/1)
          --> failed


  Check failed with difference files
  - ./build/test/test1.luatex.diff
  - ./build/test/test1.pdftex.diff
  - ./build/test/test1.xetex.diff

然后您需要检查差异并撤销更改,或者更新 tlg 文件。

相关内容