当使用 docstrip 生成文件时,我可以在前言和后记之外的任何位置插入输出文件名吗?

当使用 docstrip 生成文件时,我可以在前言和后记之外的任何位置插入输出文件名吗?

我正在.dtx使用 docstrip 从文件生成源文件。我希望将文字文件名放在命令的参数中\ProvidesFile

现在我正在做这样的事情:

%<*driver>
\input docstrip.tex
\askforoverwritefalse
\generate{
    \file{foo.tex}{\from{\jobname.dtx}{foo}}
    \file{bar.tex}{\from{\jobname.dtx}{bar}}
}
\endbatchfile
%</driver>
%<*!driver>
\documentclass{article}
\ProvidesFile
%<foo>{foo.tex}
%<bar>{bar.tex}
%<foo>\title{Foo}
%<bar>\title{Bar}
\begin{document}
\maketitle
Hello, world!
\end{document}
%</!driver>

这样做很好,但似乎有点重复。特别是因为生成的文件有这样的前言:

%%
%% This is file `foo.tex',
%% generated with the docstrip utility.
%%
%% ...
\documentclass{article}
\ProvidesFile
{foo.tex}

\title{Foo}
\begin{document}
\maketitle
\end{document}

\endinput
%%
%% End of file `foo.tex'.

声明自定义前言和后言的界面提供了用于此目的的命令。如果我也可以将其插入主文件中,\outFileName那就太好了。\outFileName

我知道这个%<@@=module>保护功能,但它不太适合这个目的。首先,它会添加__到替换文本的开头module。其次,我仍然必须写一行包含生成的文件名,而我实际上只想在块中写入它\generate

我的另一个想法是用来lua读取文件,从前几行中提取文件名,然后重写文件,将其插入到类似 的名称的位置@OUTFILENAME@。我正在使用脚本驱动文件生成l3build,因此我几乎知道如何通过挂接到unpack函数或添加到 来做到这一点docinit_hook

也许我根本不需要这个,我只需使用。我在文件中\ProvidesFile{\jobname.tex}插入一行的主要原因是为了可以使用包,并从这一行获取文件版本/日期。但这些已经用等完成了。所以有我想要的效果。但我确实觉得应该声明文件本身的名称,而不是作业的名称。\ProvidesFile.texreadprov\UseVersionOf{\jobname.tex}\ProvidesFile{\jobname.tex}\ProvidesFile

相关内容