Open main menu

Basically, to embed text in your document (tex input file) which is written to an external document when you process it, you can use buffers:

\startbuffer[x]
x
\stopbuffer

\savebuffer[x][temp.log]

The second argument is optional and when omitted the buffer will be saved as jobname-<buffername>.tmp.



Written in 2010

LaTeX provides a filecontent environment to embed text in your document which is written to an external document when you process it. The filename is given with the argument for the environment.

You could define an environment for the same effect with the buffer mechanism, the code for such an environment is:

\unprotect

\definemessageconstant {filecontents}

\startinterface all
  \setinterfacemessage{filecontents}{title}{filecontents}
  \setinterfacemessage{filecontents}{1}    {Overwriting file --}
  \setinterfacemessage{filecontents}{2}    {Writing file --}
\stopinterface

\def\startfilecontents
  {\begingroup
   \protectbuffersfalse
   \dostartfilecontents}

\def\dostartfilecontents[#1]%
  {\doiffileexistselse{#1}
     {\showmessage\m!filecontents{1}{#1}}
     {\showmessage\m!filecontents{2}{#1}}%
   \beforesplitstring#1\at.\to\filename
   \aftersplitstring #1\at.\to\extension
   \let\f!temporaryextension\extension
   \dostartbuffer[\filename][startfilecontents][stopfilecontents]}

\def\stopfilecontents
  {\doifmode{mkiv}{\savebuffer[\filename]\ctxlua{file.copy("\jobname-\filename.tmp","\filename.\f!temporaryextension")}}%
   \endgroup}

\protect

You could use this environment in your document in the following way.

\startfilecontents[song.txt]
If I could choose my paradise,
    And please myself with choice of bliss,
Then I would have your soft blue eyes
    And rosy little mouth to kiss!
Your lips, as smooth and tender, child,
As rose-leaves in a coppice wild.

If fate bade choose some sweet unrest,
    To weave my troubled life a snare,
Then I would say "her maiden breast
    And golden ripple of her hair;"
And weep amid those tresses, child,
Contented to be thus beguiled.

            (Thomas Asche - No and Yes)
\stopfilecontents