我知道 LuaTeX 中有很多疯狂的回调,但它们可以用来解决以下问题吗?
我想要一个按以下方式工作的 LuaLaTeX 脚本。假设我的 LaTeX 文档名为myfile.tex
。那么脚本应该执行以下操作:
- 该脚本创建一个新文件
myfile_new.tex
(当然,这很容易,可以使用经典 TeX 来完成。) myfile.tex
在编译文档时,此文件的每一行都被复制到文件中myfile_new.tex
,因此它成为的副本myfile.tex
- 但有一个转折:- 我想要一个 TeX 命令
\writetonewfile
,它接受一个参数,将该参数写入到文件中myfile_new.tex
找到该命令的精确位置。
让我们看一个例子:假设这是我的文件myfile.tex
:
\documentclass{article}
\directlua{ ... } % insert some Lua code
\newcommand\writetonewfile[1]{ ... } % insert appropriate Lua code
\newcommand\foo{This is foo.\writetonewfile{This was foo.}}
\newcommand\foobar[1]{This is foobar.\writetonewfile{This was #1.}}
\begin{document}
Hello World. \writetonewfile{And A Happy New Year.}
\foo
\foobar{Hello World}
\end{document}
使用 LuaLaTeX 编译后,我希望myfile_new.tex
包含以下内容:
\documentclass{article}
\directlua{ ... } % insert some Lua code
\newcommand\writetonewfile[1]{ ... } % insert appropriate Lua code
\newcommand\foo{This is foo.\writetonewfile{This was foo.}}
\newcommand\foobar[1]{This is foobar.\writetonewfile{This was #1.}}
\begin{document}
Hello world. \writetonewfile{And A Happy New Year.}And A Happy New Year.
\fooThis was foo.
\foobar{Hello World}This was Hello World.
\end{document}
(当然,如果我实际编译了这个文档,它会抱怨从来\fooThis
没有被\def
'ed',但是你明白我的意思。)
仅在文件中搜索和替换的 Lua 脚本是不够的:我想要的是实际的 LaTeX 命令\writetonewfile
。具体来说,如果我使用expl3
并将命令重新定义为\mydoc_write_to_new_file:n
,我应该能够定义诸如\mydoc_write_to_new_file:x
等命令,并在将代码写入新文件之前扩展代码。
这可能吗?