The figure searching code gets confused if a file of the same basename (but in a different directory) has already been loaded. Here is a minimal min.tex to show what I mean: \starttext \setupexternalfigures[directory={1}] \placefigure[here][ch1fig]{should be 1/fig-1.pdf}{\externalfigure[fig-1.pdf]} \setupexternalfigures[directory={2}] \placefigure[here][ch2fig1]{should be 2/fig-1.pdf}{\externalfigure[fig-1.pdf]} \placefigure[here][ch2fig2]{should be 2/fig-2.pdf}{\externalfigure[fig-2.pdf]} \stoptext Probably it's a silly idea to use \setupexternalfigures within the body, but the same problem happens when using components (where each component's preamble has a similar line), where it makes more sense. Here is the directory structure (all the files are attached as a .tgz): min.tex 1/fig-1.pdf 2/fig-1.pdf 2/fig-2.pdf The final (third) figure is correctly found as 2/fig-2.pdf. But the second figure is reused from 1/fig-1.pdf because another fig-1.pdf has already been found: as 1/fig-1.pdf. Here is the relevant bit from the texexec output: <./1/fig-1.pdf> figures : dimensions of 1/fig-1.pdf loaded from figurefile itself (./min.tuo) (/home/sanjoy/texmf/tex/context/base/pdfr-ec.tex) floatblocks : 1 placed figures : figureobject fig-1.pdf is reused <===== The problem?? floatblocks : 2 placed <./2/fig-2.pdf> figures : dimensions of 2/fig-2.pdf loaded from figurefile itself floatblocks : 3 placed One part of ConTeXt does know the right figure path. A \getfiguredimensions[fig-1.pdf] after the second \placefigure will trigger a kpathsea search for 2/fig-1.pdf, which it finds. But it still loads 1/fig-1.pdf, which is why I've said 'sort of searched' in the subject line. -Sanjoy
The figure searching code gets confused if a file of the same basename (but in a different directory) has already been loaded.
Looking a bit into this, it seems that the decision about whether a figure is already loaded is made in core-fig.tex, in \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% ... \ifcase\figurestatus \let\@@efframe\v!on \let\@@efobject\v!no \showmessage\m!figures1\@@effilename \or \showmessage\m!figures2\@@effullname \or \showmessage\m!figures3{\@@effullname,\@@eflenttype}% \or \showmessage\m!figures4\@@effullname \or \showmessage\m!figures5{\@@effullname,\@@efloadname}% \or % no message \doifnot\@@efsymbol\v!yes{\showmessage\m!figures8\@@effullname}% \fi ... The "no message" comment suggests that when \figurestatus isn't set, the message shown is figures8, which is 8: figureobject -- is reused But I couldn't figure out who sets \figurestatus and where the judgement of 'already loaded' is made. The comment at the beginning of the above \def ("this whole mess needs a clean up anyway") scared me away :-) -Sanjoy `Never underestimate the evil of which men of power are capable.' --Bertrand Russell, _War Crimes in Vietnam_, chapter 1.
participants (1)
-
Sanjoy Mahajan