我仍在尝试了解l3build
测试是如何进行的,尤其是针对课程的测试。standalone
更具体地说。
myclass.cls
考虑以下基于该类的自定义类( ) standalone
,其中varwidth=15cm
设置确实很重要:
\ProvidesExplClass
{myclass}
{2023/03/27}
{0.1}
{
My Nice Class.
}
\NeedsTeXFormat{LaTeX2e}
\LoadClass[varwidth=15cm]{standalone}
\endinput
显然,以下测试文件的输出:
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
varwidth=15cm
如果被 取代 的话 就会 完全 不同varwidth=10cm
。
我尝试创建一个l3build
测试来检查这个差异,按照文档第 2.4 节“测试整个页面”l3build
提供了以下示例:
\input{regression-test.tex}
\documentclass{article}
\usepackage{expl3}
\START
\showoutput
% Test content here
\vfil\break
\END
为此,我创建了一个sandbox
目录,其内容如下:
$ tree sandbox/
sandbox/
├── build.lua
├── myclass.cls
└── testfiles
└── myclass-test.lvt
可以使用以下命令生成此目录结构和这些各种文件的内容:
mkdir -p sandbox/testfiles
pdflatex generate-sandbox.tex
其中generate-sandbox.tex
有以下内容:
\begin{filecontents*}[overwrite]{sandbox/build.lua}
#!/usr/bin/env texlua
-- Build script for "myclass" files
-- Identify the bundle and module
module = "myclass"
-- Engines checked
checkengines = {"luatex"}
-- Source files cover those for rollback
sourcefiles = {"*.cls"}
-- Installed files
installfiles = sourcefiles
\end{filecontents*}
\begin{filecontents*}[overwrite]{sandbox/myclass.cls}
\ProvidesExplClass
{myclass}
{2023/03/27}
{0.1}
{
My Nice Class.
}
\NeedsTeXFormat{LaTeX2e}
\LoadClass[varwidth=15cm]{standalone}
\endinput
\end{filecontents*}
\begin{filecontents*}[overwrite]{sandbox/testfiles/myclass-test.lvt}
\input{regression-test.tex}
\documentclass{myclass}
\usepackage{lipsum}
\START
\showoutput
\lipsum
\vfil\break
\END
\end{filecontents*}
\documentclass{article}
\begin{document}
\end{document}
如果我将测试输出保存myclass-test.lvt
到.tlg
文件:
cd sandbox
l3build save myclass-test
然后替换varwidth=15cm
为varwidth=10cm
,则:
l3build check myclass-test
声称“所有检查都通过”,而如上所述,“真实”输出完全不同。
我是否遗漏了什么?
顺便说一句,如果自定义类依赖于(),standalone
而不是,那么随后用替换会导致检查失败。article
\LoadClass[a4paper]{article}
a4paper
a5paper
答案1
文件lvt
必须像“普通”文档一样工作。在这里,当您测试排版文本时,您需要\begin{document}
日志或多或少只是记录
! LaTeX Error: Missing \begin{document}
因此当您进行更改时,您仍然会遇到相同的错误,并且测试“通过”。
一般来说,手动检查保存的标准化日志是一个重要原则。如果您只是保存tlg
测试版本的内容,l3build 将尝试确保保留所有早期错误。
通常情况下,只需添加就足够了,但在这里,您以(或多或少)原始( )\begin{document}
结束,使用可避免通常由完成的一些工作,其中一些工作可能会在日志中显示为不需要的行。但是一个非常特殊的包,将所有内容都放在一个框中,以便它可以测量并裁剪到宽度,因此会出现错误,您需要\END
\end
\@@end
\end{document}
standalone
\END
\end{document}
对于任何其他类别
\input{regression-test.tex}
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\START
\lipsum
\vfil\break
\showoutput
\end{document}
然后就可以工作了,但是由于standalone
调整document
环境的方式使得内部框在输出之前被保存和测量,所以\showoutput
没有效果,因为该组在输出之前已经完成。
你可以使用
\input{regression-test.tex}
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\START
\lipsum
\vfil\break
{\globaldefs=1 \showoutput}
\end{document}
但是 globaldefs 使用起来很棘手,它可能会破坏代码,所以您需要确保正在测试“好的”代码路径。
更安全的做法是从盒子寄存器设置中记录一些内容,例如\showlists
\input{regression-test.tex}
\documentclass{myclass}
\usepackage{lipsum}
\begin{document}
\START
\lipsum
\vfil\break
\showlists
\end{document}