LuaTeX 脚本会复制文件,但如果被要求,则会插入额外的代码

LuaTeX 脚本会复制文件,但如果被要求,则会插入额外的代码

我知道 LuaTeX 中有很多疯狂的回调,但它们可以用来解决以下问题吗?

我想要一个按以下方式工作的 LuaLaTeX 脚本。假设我的 LaTeX 文档名为myfile.tex。那么脚本应该执行以下操作:

  1. 该脚本创建一个新文件myfile_new.tex(当然,这很容易,可以使用经典 TeX 来完成。)
  2. myfile.tex在编译文档时,此文件的每一行都被复制到文件中myfile_new.tex,因此它成为的副本myfile.tex- 但有一个转折:
  3. 我想要一个 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等命令,并在将代码写入新文件之前扩展代码。

这可能吗?

相关内容