\ProvidesExplFile 问题

\ProvidesExplFile 问题

LaTeX 3 接口文件(interface3.pdf)的第 9 页讨论了命令\ProvidesExplPackage\ProvidesExplClass\ProvidesExplFile

这些函数的作用方式与相应的 LATEX2ε 内核函数 \ProvidesPackage、\ProvidesClass 和 \ProvidesFile 大致相同。但是,它们还隐式地为文件其余部分的代码切换 \ExplSyntaxOn。在文件末尾,将调用 \ExplSyntaxOff 来反转此操作。(这与 LATEX2ε 在包和类代码中打开 \makeatletter 的概念相同。)

所以我刚刚测试了后一个命令\ProvidesFile,它似乎没有这样做。我测试了 MWE:

\documentclass{article}
\input{ExplFile}
\newcommand{\pangram}{The Five Boxing Wizards Jump Quickly!}
\begin{document}
\pangram
\end{document}

ExplFile位于同一文件夹中的输入有代码

%
\ProvidesExplFile{ExplFile}{2023/05/27}{1.0.0}{Test file}
%
%FILE CONTENTS
%

编译后的 PDF 仅显示\pangram但所有空格字符均被删除。空格字符无法正常显示的唯一原因是 ExplSyntax 不会在文件末尾自动关闭\ProvidesExplFile

编辑:2023-07-03 我刚刚了解到这个问题已经发布在 GitHub 上。https://github.com/latex3/latex3/issues/817

答案1

\ProvidesExplFile基于\ProvidesFile,然后与\ProvidesPackage和 一起出现\ProvidesClass。这些都使用 LaTeX catcode 堆栈来保存/恢复@(经典)和ExplSyntaxOn/Off状态。但是,要做到这一点,您必须以正确的方式加载文件:\RequirePackage\LoadClass等。目前,对于任意文件,只有\@onefilewithoptions,这实际上是内部的:这是我们需要解决的问题。但是,如果您使用此机制,您会发现代码状态得到正确处理。

相关内容