几天前,我在聊天中读到一篇讨论,关于在使用l3build
(测试排版材料时,为不同的引擎获取相同的输出https://chat.stackexchange.com/transcript/message/62890308#62890308),事实证明,当使用的字体相同时,这样做是可能的。好处是,我们可以只保存默认引擎的测试结果,然后针对同一个 .tlg 文件检查所有引擎。
我今天在玩这个,尽管遵循了那个提示,我仍然发现不同性质的引擎之间存在一些差异,但在检查变量时。如果要求显示变量的行有点长,截断似乎在pdftex
和luatex
引擎之间有所不同。
考虑以下设置。Abuild.lua
具有:
bundle = ""
module = "mypackage"
checkengines = {"pdftex","luatex","xetex"}
以及一个包含以下内容的测试文件testfiles/test1.lvt
:
\documentclass{article}
\input{regression-test}
\begin{document}
\section{Section 1}
\ExplSyntaxOn
\tl_new:N \l_my_var_tl
\tl_set:Nn \l_my_var_tl {foo}
\ExplSyntaxOff
\START
\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable}
Some long line which happens to also show a variable.\tl_show:N \l_my_var_tl
\ENDTEST
\ExplSyntaxOff
\OMIT
\end{document}
如果我保存测试结果,pdftex
然后l3build save -e pdftex test1
运行检查,则l3build check
检查luatex
失败。结果test1.luatex.diff
是:
*** ./build/test/test1.luatex.tlg 2023-02-10 21:45:48.607269954 -0300
--- ./build/test/test1.luatex.log 2023-02-10 21:45:48.607269954 -0300
***************
*** 5,9 ****
============================================================
> \l_my_var_tl=foo.
<recently read> }
! l. ......so show a variable.\tl_show:N \l_my_var_tl
============================================================
--- 5,9 ----
============================================================
> \l_my_var_tl=foo.
<recently read> }
! l. ......also show a variable.\tl_show:N \l_my_var_tl
============================================================
因此,调用检查变量的行的方式最终出现在日志中,但该行的截断在几个字符上有所不同。
有没有办法避免这种情况?这样就可以为这次测试保存一个 .tlg 文件?
答案1
l3build 尝试使事物标准化,但 luatex 习惯于相差一列,这会使事情变得困难。您可以最大化日志行中的字符数,这样 tex 就不会换行输出。还可以在行首使用 \show,这样您就不会有 ... 上下文
例如,此版本通过
\documentclass{article}
\input{regression-test}
\begin{document}
\section{Section 1}
\ExplSyntaxOn
\tl_new:N \l_my_var_tl
\tl_set:Nn \l_my_var_tl {foo}
\ExplSyntaxOff
\START
\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable}
Some long line which happens to also show a variable.
\tl_show:N \l_my_var_tl
\ENDTEST
\ExplSyntaxOff
\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable2}
Some long line which happens to also show a variable.\typeout{\meaning\l_my_var_tl}
\ENDTEST
\ExplSyntaxOff
\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable3}
\tl_new:N \l_my_varref_tl
\tl_set:Nn \l_my_varref_tl {foo}
Some long line which happens to also show a variable. \ifx\l_my_var_tl\l_my_varref_tl\TRUE\else\FALSE\fi
\ENDTEST
\ExplSyntaxOff
\ExplSyntaxOn
\BEGINTEST{Inspecting~a~variable4}
\newcommand{\testtmp}{Some long line which happens to also show a variable.\tl_show:N \l_my_var_tl}
\testtmp
\ENDTEST
\ExplSyntaxOff
\OMIT
\end{document}