On Thu, 28 Jan 2021, Henning Hraban Ramm wrote: > Still working on that. > I hope you can help me here, Aditya! > I’ll add these issues to the tracker of t-filter, if it makes sense. > > > Testing with: ConTeXt ver: 2021.01.24 16:07 LMTX fmt: 2021.1.25 > > The setup below works, but only with \starttikz ... \stoptikz so far, I don’t like the output file names, and using the working directory is tricky. > > > (1) \processFILTERfile > > \processtikzfile{img/example.pgf} > can’t find the file: > > t-filter > cached output file 'tikztemp/example1.pgf.pdf' missing. Rerunning filter > t-filter > file 'tikztemp/example1.pgf.pdf' cannot be found > t-filter > current filter : tikzThick > t-filter > base file : example1.pgf > t-filter > input file : img/example1.pgf > t-filter > output file : tikztemp/example1.pgf.pdf > ... > system > 13: filename=img/example1.pgf foundname=img/example1.pgf fullname=.../img/example1.pgf usedmethod=direct > > Looks like ConTeXt can find the file, but the filter module cannot. > > --trackers=resolvers.schemes (or \enabletrackers) doesn’t change anything WRT log/output. For \processFILTER, t-filter does not even read the file... so it has to do with how the filtercommand is defined. > Since this fails already, I don’t know if \processFILTERfile also uses bufferbefore/-after (it should). It does not. As I said, for processing external files, t-filter does not even read the file and just takes care of caching the result. It is assumed that the filter command can process the external file. I can see if it is possible to active before and after filters while processing external files. Another option is to write the external files as valid tex file (i.e., with a \startTEXpage .. \stopTEXpage wrapper), and when defining the filtercommand, use something like `context --environment=env filename`, where env is the environment file with all the settings for fonts etc. > (2) working directory > > Since ConTeXt can’t put generated (temporary) files into a directory and --result also only renames afterwards, the directory key doesn’t help, I had to add "mv" and "cd" to my filtercommand. > I didn’t check yet if caching works. Caching should work if \definefilter is configured correctly. From the point of view of t-filter module, this is a bug in the external program and you should contact upstream for a fix :-) Most (all?) other programs are happy to write a file in any directory (modulo write permissions, etc.). I do not want to increase the complexity of the module to handle such corner cases. > (3) file names > > Using \processFILTERfile the original file name base is preserved, according to the log entry above. > > If I use \starttikz[name=example], I get "JOBNAME-temp-tikzThick-example.tmp". > I’d like to get something like "COMPONENTNAME-##-example.tmp" or a path like "COMPONENTNAME/example_##.tmp". > Is there a configuration hook in the module to change name generation? No. I don't quite understand the concern. How do you plan to use a `name=value` option? > (4) subprocess parameters > > I’d like to forward some parameters from \starttikz to the temp buffer, e.g. > \starttikz[name=example][mystyle=thick] > (using the same syntax as \startsection with a second pair of brackets for custom parameters). > And then have > \starttikzpicture[\filterusersetupvariable{mystyle}] > in the buffer. > > My workaround so far is a copy of the filter setup (tikz/tikzThick), since we have only a few different configurations. The code that I had posted already handles this, provided that the options start on the line after \startfilter: \usemodule[filter] \startbuffer[tikz-before] \usemodule[tikz] \startTEXpage \starttikzpicture \stopbuffer \startbuffer[tikz-after] \stoptikzpicture \stopTEXpage \stopbuffer \defineexternalfilter [externaltikz] [ bufferbefore=tikz-before, bufferafter=tikz-after, cache=yes, filtercommand={context --batchmode \externalfilterinputfile\space --purgeall --result=\externalfilteroutputfile}, output={\externalfilterbasefile.pdf}, readcommand=\readPDFfile, ] \define[1]\readPDFfile{\externalfigure[#1]} % width and height could be added \starttext \startexternaltikz [very thick, ->] \draw (0,0) -- (1,1); \stopexternaltikz \stoptext Aditya