TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In LaTeX2e, one can write to the standard auxiliary file via the \@auxout file handle. Are there dedicated LaTeX3 functions (planned) that facilitate writing to \jobname.aux or is there an equivalent \@auxout file handle in LaTeX3 we can use with the functions from the l3file package?

share|improve this question
up vote 12 down vote accepted

At present the answer here is 'no', as we do not have structures for the higher-level idea of 'an auxiliary file'. Clearly we will need to address this along with a number of other file-related areas (for example a native mechanism for loading files, akin to \usepackage).

share|improve this answer
If you have a clear need and a sensible proposal, send something to LaTeX-L! – Joseph Wright Jan 11 '13 at 13:46
Thanks for your answer. LaTeX package authors may always open and write to their own, package-specific auxiliary files, but they will have to explicitly read them in \AtBeginDocument. Moreover, the file extension one has to invent may already be in use by another package, giving rise to conflict. Thus, it is a good idea to use \@auxout in contributed packages and many L2e authors do this, I guess. For now, I will stick to private aux-files, since \@auxout is LaTeX2e and may be subject to change. – AlexG Jan 11 '13 at 14:02
@AlexG: LaTeX package author don't want to deal with aux files but want some kind of data storage that persists across LaTeX runs (and don't care if the data is stored in aux files or serialized Lua lists). I think that's the api LaTeX3 should offer. – Martin Schröder Jan 11 '13 at 14:25
@MartinSchröder you are quite right. The high-level interface should provide persitent storage as an abtraction. What the implementation does under the hood might well be different for different engines. – Frank Mittelbach Jan 11 '13 at 15:27
@MartinSchröder. Of course, persistent data storage is the actual purpose. But \jobname.aux is the method of choice, as Lua is not yet available in every TeX engine. (This is the reason why L3 explicitly avoids relying on Lua (cf. the l3fp package), I once read this somewhere). – AlexG Jan 11 '13 at 15:33

This probably doesn't conform to the guidelines, but \iow_shipout:Nn, \iow_shipout_x:Nn, and \iow_now:Nn understand the usual file handler:

\NewDocumentCommand{\writeaux}{ s m }
   { \iow_shipout:Nn \@auxout { #2 } }
   { \iow_shipout_x:Nn \@auxout { #2 } }



For internal commands to be used in packages, one can think to

\cs_new_protected:Npn \iowaux_now:n #1 { \iow_now:Nn \@auxout { #1 } }
\cs_new_protected:Npn \iowaux_shipout:n #1 { \iow_shipout:Nn \@auxout { #1 } }
\cs_new_protected:Npn \iowaux_shipout_x:n #1 { \iow_shipout_x:Nn \@auxout { #1 } }

and similarly for the x variant. Thus usage can become independent on the actual implementation; just modifying the four definitions will be sufficient to keep packages otherwise unchanged.

share|improve this answer
Indeed, I had these l3 functions in mind while asking. – AlexG Jan 11 '13 at 14:12
Thanks for your suggestion. I am going to formulate a similar request in layman's words and send it to LaTeX-L. – AlexG Jan 11 '13 at 14:22

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.