我正在.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
.tex
readprov
\UseVersionOf{\jobname.tex}
\ProvidesFile{\jobname.tex}
\ProvidesFile