Re: [NTG-context] Disable reuse of figures
On Sat, 19 Feb 2022, Hans Hagen via ntg-context wrote: > On 2/19/2022 7:30 AM, Aditya Mahajan via ntg-context wrote: > > Hi, > > > > This is related to a bug report for the filter module: > > https://github.com/adityam/filter/issues/60 > > > > Normally, when the same figure is included twice, context only includes the > figure once and refers to the included figure the second time. The option > `object=no` to externalfigure is supposed to prevent that, but it doesn't > work. For example, consider the following example the bug-report uses graphviz > as the external program, but I have changed that to context to keep things > self contained) > > > > \usemodule[filter] > > > > \defineexternalfilter > >[graphviz] > >[ > > filter=context --purge, > > output=\externalfilterbasefile.pdf, > > readcommand=\ReadPDF, > >] > > > > \def\ReadPDF#1% > > {\externalfigure[#1][object=no]} > > > > \starttext > > > >Circle: > >\startgraphviz > > \startMPpage > >draw fullcircle scaled 1cm; > > \stopMPpage > >\stopgraphviz > > > >Square: > >\startgraphviz > > \startMPpage > >draw fullsquare scaled 1cm; > > \stopMPpage > >\stopgraphviz > > > > \stoptext > > > > Behind the scenes, the first \startgraphviz ... \stopgraphviz environment > writes the content to an external file (\jobname-temp-graphviz.tmp), runs > `context --purge \jobname-temp-graphviz.tmp`, which creates > `\jobname-temp-graphviz.pdf`. The `\ReadPDF` macro then includees the file > (with object=no). > > > > At the next \startgraphviz .. \stopgraphviz, the same process is repeated. > The `\jobname-temp-graphviz.pdf` file is overwritten and the new file should > have been included. But it is not. The output contains the first image twice. > > > > I thought that object=no should have prevented the reuse. In fact, if I > compile the file with luatex, I get an error message: > > > > ! error: (pdf inclusion): file has changed > '12-two-outputs-temp-graphviz.pdf' > > mtx-context | fatal error: return code: 256 > > > > Any idea why object=no is not working? > the pdf file is kept open, for various reasons: > > - performance > - the might be different pages to fetch > - analysis happens when the image is placed, inclusion happens later > > so you try to reopen an already open file (which has not been completely > processed) I see. So, for the filter module this means that one always has to use `cache=yes` (so that each PDF file has a different name). I'll add that to the documentation. Thanks, Aditya ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___
Re: [NTG-context] Disable reuse of figures
On 2/19/2022 7:30 AM, Aditya Mahajan via ntg-context wrote: Hi, This is related to a bug report for the filter module: https://github.com/adityam/filter/issues/60 Normally, when the same figure is included twice, context only includes the figure once and refers to the included figure the second time. The option `object=no` to externalfigure is supposed to prevent that, but it doesn't work. For example, consider the following example the bug-report uses graphviz as the external program, but I have changed that to context to keep things self contained) \usemodule[filter] \defineexternalfilter [graphviz] [ filter=context --purge, output=\externalfilterbasefile.pdf, readcommand=\ReadPDF, ] \def\ReadPDF#1% {\externalfigure[#1][object=no]} \starttext Circle: \startgraphviz \startMPpage draw fullcircle scaled 1cm; \stopMPpage \stopgraphviz Square: \startgraphviz \startMPpage draw fullsquare scaled 1cm; \stopMPpage \stopgraphviz \stoptext Behind the scenes, the first \startgraphviz ... \stopgraphviz environment writes the content to an external file (\jobname-temp-graphviz.tmp), runs `context --purge \jobname-temp-graphviz.tmp`, which creates `\jobname-temp-graphviz.pdf`. The `\ReadPDF` macro then includees the file (with object=no). At the next \startgraphviz .. \stopgraphviz, the same process is repeated. The `\jobname-temp-graphviz.pdf` file is overwritten and the new file should have been included. But it is not. The output contains the first image twice. I thought that object=no should have prevented the reuse. In fact, if I compile the file with luatex, I get an error message: ! error: (pdf inclusion): file has changed '12-two-outputs-temp-graphviz.pdf' mtx-context | fatal error: return code: 256 Any idea why object=no is not working? the pdf file is kept open, for various reasons: - performance - the might be different pages to fetch - analysis happens when the image is placed, inclusion happens later so you try to reopen an already open file (which has not been completely processed) Hans - Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl - ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___
[NTG-context] Disable reuse of figures
Hi, This is related to a bug report for the filter module: https://github.com/adityam/filter/issues/60 Normally, when the same figure is included twice, context only includes the figure once and refers to the included figure the second time. The option `object=no` to externalfigure is supposed to prevent that, but it doesn't work. For example, consider the following example the bug-report uses graphviz as the external program, but I have changed that to context to keep things self contained) \usemodule[filter] \defineexternalfilter [graphviz] [ filter=context --purge, output=\externalfilterbasefile.pdf, readcommand=\ReadPDF, ] \def\ReadPDF#1% {\externalfigure[#1][object=no]} \starttext Circle: \startgraphviz \startMPpage draw fullcircle scaled 1cm; \stopMPpage \stopgraphviz Square: \startgraphviz \startMPpage draw fullsquare scaled 1cm; \stopMPpage \stopgraphviz \stoptext Behind the scenes, the first \startgraphviz ... \stopgraphviz environment writes the content to an external file (\jobname-temp-graphviz.tmp), runs `context --purge \jobname-temp-graphviz.tmp`, which creates `\jobname-temp-graphviz.pdf`. The `\ReadPDF` macro then includees the file (with object=no). At the next \startgraphviz .. \stopgraphviz, the same process is repeated. The `\jobname-temp-graphviz.pdf` file is overwritten and the new file should have been included. But it is not. The output contains the first image twice. I thought that object=no should have prevented the reuse. In fact, if I compile the file with luatex, I get an error message: ! error: (pdf inclusion): file has changed '12-two-outputs-temp-graphviz.pdf' mtx-context | fatal error: return code: 256 Any idea why object=no is not working? Thanks, Aditya ___ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___