图书馆的 Windows 测试仪?

图书馆的 Windows 测试仪?

我不知道这里是不是该问这个问题的地方,但我不知道还有什么地方……

所以我刚刚完成了我的第一个版本稳健外化库(在进行重要的重写之后,非常感谢这里所有人的帮助),但在将其推送到 CTAN 之前,我想检查它是否与 Windows 兼容(我需要-shell-escape并且我真的不知道我使用的命令是否真的是跨平台的,它们应该是但谁知道 Windows 如何反应)。

有人能帮我测试一下吗,因为我身边没有窗户?测试步骤很简单:

$ git clone https://github.com/leo-colisson/robust-externalize
$ cd robust-externalize/doc

然后,要禁用代码构建bash(在 Windows 上不可用),只需doc/robust-externalize.tex在文件后添加以下内容进行修改\begin{document}

\robExtConfigure{
  % bash code will not be compiled (bash does not exist on windows)
  bash/.append style={
    disable externalization
  },
}

并使用以下命令编译文件:

$ pdflatex -shell-escape robust-externalize.tex
$ pdflatex -shell-escape robust-externalize.tex

(如果您害怕-shell-escape,您也可以添加一行 |启用手动模式,| 并\robExtConfigure手动运行 |JOBNAME-robExt-compile-missing-figures.sh| 中的命令,但部分目标是检查是否-shell-escape按预期工作)

如果没有错误,并且代码生成了robust-externalize.pdf类似这样的文件https://raw.githubusercontent.com/leo-colisson/robust-externalize/master/doc/robust-externalize.pdf那么一切都很好!您可以在此处报告,也可以在github 问题为此而创建!谢谢!

答案1

虽然拥有一种强大的方法来外部化图像和其他内容会很棒,但请重新考虑将其推向当前状态的 CTAN。expl3代码的清晰度要求人们遵守命名约定并使用包含(而不是排除)冲突检查的函数。

\cs_set:Nn \str_set_hash_robust:Nn % No!

您真的、真的、真的不应该这样做。这不仅是str现有模块的名称,而且是内核模块的名称。您不是将其添加为负责该模块的团队成员,因此您应该选择自己的模块名称,并且您创建的所有函数和变量都应以该模块名称为前缀。

set除非你之前已经做过,否则你也不应该这么做new。而且你绝对不应该用一个理应属于现有模块的名称来做这件事str

\str_set:Nn {#1} {#2} % No!

是错误的,类似结构也是一样。只要有N,就不应该有括号。所以

\str_set:Nn #1 {#2}

您的变量系统地被错误命名,因为它们都省略了应该表明其变量类型的后缀。

\str_new:N \l_robExt_template % No!

例如,格式不正确,应该

\str_new:N \l_robExt_template_str

expl3对于您创建的每个变量都是如此。

请注意,您还将此变量声明为适合公共使用。这意味着用户可以合理地期望更新考虑到他们可能正在使用的事实\l_robExt_currentCompilationCommand。如果您准备支持这一点,那么这很好,但对于一个包来说,不使用任何内部函数或变量是有点不寻常的。

您正在打开至少 3 个新的写入。对于一个作用相对有限的包来说,这是一大笔资源。TeX 最多允许 16 次写入。您的包几乎需要其中的 20%。(LuaTeX 允许 128 次,所以不用担心。)这可以通过 来解决morewrites,但我不记得使用过任何包会将自己扩展到 3 次(一个仅用于临时写入的包?)。

如果命令、函数或变量不应由最终用户调用,请适当命名它们。对于expl3,指导很明确。对于 2e 命令,情况定义得不太明确,但\robExt@...会标记出该命令不适用于外部使用的可能性。不要依赖注释或文档来传达这一点。

尽管您声明了局部变量,但您似乎并没有充分利用分组。也许这是必要的,并且是设计使然,但如果不是,那么值得看看您是否可以在本地做更多的事情。

答案2

实际上,我设法运行了一个旧的 Windows VM,并且它可以运行!

相关内容