[NTG-context] how to set the name of outputfile using a value defined in the source

Taco Hoekwater taco at elvenkind.com
Fri Sep 21 10:44:03 CEST 2018



> On 21 Sep 2018, at 10:30, Henri Menke <henrimenke at gmail.com> wrote:
> 
> On 21/09/18 20:09, J Huisman wrote:
>> Hi all,
>> 
>> I'm getting back to using ConTeXt after a couple of years, so I might
>> be missing something obvious...
>> 
>> I would like to add an I.D. code to the name of my outputfile, but
>> since this will be used in an automated environment I would like to
>> load the ID-code from the source file.
>> 
>> MWE: test.tex
>> 
>> \starttext
>> 
>> \def\idcode{something}
>> 
>> Some text, whatever.
>> 
>> \stoptext
>> 
>> If I typeset with: context text --result=test-idcode the result is
>> obviously "test-idcode.pdf", but I want to get a file name:
>> "test-something.pdf"
>> Is this possible?
> 
> Once you enter TeX, the output file has been opened.  The very concept
> of a filesystem forbids you to change the filehandle while writing.  So
> no, it is not possible easily.

But it can be done sneakily …


% start demo
\enabledirectives[system.callbacks.permitoverloads]
% previous line allows redefinition of ‘wrapup_run’

% to keep the code short, I use a direct definition of
% \idcode and \ctxlua. Nicer would be to store the desired
% output name in a lua variable and replace the
% \ctxlua with \startluacode … \stopluacode with 
% a string.format inside it.

\def\idcode{something}

\ctxlua{callbacks.register('wrapup_run',  function() 
  os.execute("cp \jobname.pdf doc-\idcode.pdf") 
end)} 

\starttext
Hello from \idcode
\stoptext
% stop demo

Taco



More information about the ntg-context mailing list