如何在 l3build 回归测试中使用 LaTeX dev 格式?

如何在 l3build 回归测试中使用 LaTeX dev 格式?

我正在迈出打包的第一步,并不断学习l3build,这很棒,并且在任务中节省了大量工作,但有一件事我无法弄清楚:如何使用 LaTeX 开发格式进行回归测试。

自从他们被宣布以来我就已经知道他们的存在(https://www.latex-project.org/publications/2019-FMi-TUB-tb125mitt-dev-format.pdf),我相信这是一个非常受欢迎的发布工作流程改进,而且现在我有机会,我很乐意使用它。

据我从l3build的文档中了解到,我们有checkengines(复数) 和checkformat(单数) 作为要设置的变量,后者默认为"latex"。我们还可以使用 指定非标准引擎/格式组合specialformats。我没有尝试用checkengines一些“按摩” specialformats,因为这似乎延伸了变量名称的语义(我也想不出任何明显的方式来做到这一点)。我也不想代替 "latex""latex-dev"其中checkformat,我想运行回归测试两个都(我很乐意为此付出时间)。

在我看来,这l3build将是 LaTeX 开发格式最突出的用例之一,所以我推测有一些(简单的)方法可以做到这一点。但我似乎无法弄清楚。我该怎么做?

编辑:在 Ulrike 的评论帮助下,我能够取得一些进展,但还没有完全实现。

例如build.lua

#!/usr/bin/env texlua

-- Identify the bundle and module
bundle = ""
module = "mytest"

-- Two runs for label testing
checkruns = 2

-- Include LaTeX dev formats in regression testing
checkengines =
  {
    "pdftex" ,
    "xetex" ,
    "luatex" ,
    "pdftexdev" ,
    "luatexdev" ,
    "xetexdev"
  }
specialformats = specialformats or {}
specialformats["latex"] = specialformats["latex"] or
  {
    pdftexdev = { binary = "pdftex"   , format = "pdflatex-dev" },
    xetexdev  = { binary = "xetex"    , format = "xelatex-dev"  },
    luatexdev = { binary = "luahbtex" , format = "lualatex-dev" },
  }

我可以运行检查,因为正确的二进制文件是用正确的格式调用的(据我所知)。

但是,结果比较步骤仍然出了问题。请考虑下面的简单测试文件mytest01.lvt

\documentclass{article}

\input{regression-test}

\usepackage{hyperref}

\begin{document}

\section{Section 1}
\label{sec:section-1}

\START

\setbox0=\hbox{\ref{sec:section-1}}
\showbox0

\OMIT

\end{document}

其结果与引擎相关,因此必须与引擎的结果进行比较,而不是与默认引擎进行比较。因此,我们使用以下方法保存每个引擎的结果:

$ l3build save -e pdftex mytest01
$ l3build save -e luatex mytest01
$ l3build save -e xetex mytest01
$ l3build save -e pdftexdev mytest01
$ l3build save -e luatexdev mytest01
$ l3build save -e xetexdev mytest01

但是我们刚刚保存的检查失败了(luatexdev在这种情况下):

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


  Check failed with difference files
  - ./build/test/mytest01.luatexdev.diff

检查结果显示mytest01.luatexdev.tlg与 相同mytest01.luatex.tlg(正如我所料)。 并且mytest01.luatexdev.diff就像mytest01.luatexdev.tlg和默认值之间的差异一样mytest01.tlg(这是我对发生的事情的猜测)。

答案1

为了不让这个问题悬而未决,我将提供一个自我回答(感谢@UlrikeFischer 的评论)。事实证明,Ulrike 的提示是正确的(像往常一样),而我发现的问题lualatex-dev是由于上游错误(已报告并修复于https://github.com/latex3/l3build/issues/215,感谢@MarcelKruger),它已经是最新l3build版本的一部分。有了它,我们可以进行以下设置。

build.lua

-- Identify the bundle and module
bundle = ""
module = "mypackage"

-- Two runs for label testing
checkruns = 2

-- Set up tests for dev format
checkengines = {"pdftex","luatex","xetex","pdftexdev","luatexdev","xetexdev"}
specialformats = specialformats or {}
specialformats.latex =
  {
    pdftexdev = { binary = "pdflatex-dev" , format = "" } ,
    luatexdev = { binary = "lualatex-dev" , format = "" } ,
    xetexdev  = { binary = "xelatex-dev"  , format = "" } ,
  }

测试文件mytest01.lvt

\documentclass{article}

\input{regression-test}

\usepackage{hyperref}

\begin{document}

\section{Section 1}
\label{sec:section-1}

\START

\setbox0=\hbox{\ref{sec:section-1}}
\showbox0

\OMIT

\end{document}

我们可以将测试结果保存为:

$ l3build save -e pdftex mytest01
$ l3build save -e luatex mytest01
$ l3build save -e xetex mytest01
$ l3build save -e luatexdev mytest01
$ l3build save -e xetexdev mytest01

pdftexdev不包含在保存步骤中,这意味着它将与默认引擎进行比较,即。不幸的是,我们无法省去和 的pdftex保存步骤,因为默认引擎无法通过引擎配置,所以我们必须保存它们。luatexdevxetexdev

对设置的实验观察luatexdev:对于它,可以使用binary = "lualatex-dev" , format = ""binary = "luahbtex" , format = "lualatex-dev"。看似更标准的binary = "luatex" , format = "lualatex-dev"确实给了我一个令人讨厌的“警告:您正在切换到 fmtutil 的每个用户格式。请阅读以下警告!”等。

请注意,我们可以采用稍微不那么冗长的设置,不需要设置specialformats,只需执行即可,例如:

checkengines = {"pdftex", "luatex", "xetex", "pdflatex-dev"}

这是有效的,因为l3build-check.lua在运行测试时执行以下操作:

local binary = engine
local format = gsub(engine,"tex$",checkformat)
-- Special binary/format combos
local special_check = specialformats[checkformat]
if special_check and next(special_check) then
  local engine_info = special_check[engine]
  if engine_info then
    binary    = engine_info.binary  or binary
    format    = engine_info.format  or format
    checkopts = engine_info.options or checkopts
  end
end

因此,对于"pdflatex-dev"引擎来说,二进制文件将是pdflatex-dev,由于它不以 结尾tex$,因此format gsub正则表达式将不匹配,格式也将是pdflatex-dev。我更喜欢使用更冗长的设置,因为依赖这样的实现细节来获得正确结果似乎有些不靠谱。因此,specialformats我们可以独立于该正则表达式明确设置binary和。formatgsub

相关内容