TransWikia.com

LuaTeX script that copies file, but inserts extra code if asked to

TeX - LaTeX Asked on February 26, 2021

I am aware of the many crazy callbacks in LuaTeX, but can they be used to solve the following problem?

I would like a LuaLaTeX script that works the following way. Suppose my LaTeX document is called myfile.tex. Then the script should do the following:

  1. The script creates a new file myfile_new.tex (this is easy, of course, and can be done using classical TeX.)
  2. While the document myfile.tex is being compiled, each line of this file is being copied to the file myfile_new.tex, so it becomes a copy of myfile.tex – but there is a twist:
  3. I want a TeX command writetonewfile, taking one argument, which writes that argument to the file myfile_new.tex in the exact position where the command was found.

Let us see an example: Suppose this is my file myfile.tex:

documentclass{article}

directlua{ ... } % insert some Lua code

newcommandwritetonewfile[1]{ ... } % insert appropriate Lua code

newcommandfoo{This is foo.writetonewfile{This was foo.}}

newcommandfoobar[1]{This is foobar.writetonewfile{This was #1.}}

begin{document}

Hello World. writetonewfile{And A Happy New Year.}

foo

foobar{Hello World}

end{document}

After compiling this with LuaLaTeX, I would like myfile_new.tex to contain the following:

documentclass{article}

directlua{ ... } % insert some Lua code

newcommandwritetonewfile[1]{ ... } % insert appropriate Lua code

newcommandfoo{This is foo.writetonewfile{This was foo.}}

newcommandfoobar[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}

(Of course, if I actually compile this document, it will complain that fooThis was never def’ed, but you see the idea.)

A Lua script that just searches and replaces in the file will not suffice: What I want is an actual LaTeX command writetonewfile. In particular, if I use expl3 and redefine the command as mydoc_write_to_new_file:n, I should be able to define commands like mydoc_write_to_new_file:x etc. and expand the code before it gets written to the new file.

Is this possible?

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP