figure directory is sort of searched
I still can't figure this problem one out, from a few months ago, and it happens with a recent ConTeXt (2006.08.08 21:51). 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, and all the files are attached as a small (15KB) .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 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. 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 off :-) -Sanjoy `A society of sheep must in time beget a government of wolves.' - Bertrand de Jouvenal
Hi, Sanjoy Mahajan wrote:
I still can't figure this problem one out, from a few months ago, and it happens with a recent ConTeXt (2006.08.08 21:51). 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:
I remember I ran into that as well (more than a year ago) and I ended up renaming my figures to figure1-1.pdf etc. It actually turned out to be easier for me, because that way I could use the figure filename as the reference. Cheers, taco
Taco sez:
Sanjoy sez:
The figure searching code gets confused if a file of the same basename (but in a different directory) has already been loaded.
I remember I ran into that as well (more than a year ago) and I ended up renaming my figures to figure1-1.pdf etc. It actually turned out to be easier for me, because that way I could use the figure filename as the reference.
Good idea, thanks. I might also integrate the figures (they're all MetaPost) into the .tex source, what I couldn't do in (e)plain TeX. I expect I'll have a few questions after I try that :-) The MetaFun manual already told me the answer to one of them: how to have common settings and macros across all the MetaPost figures (\startMPinclusions). -Sanjoy `Never underestimate the evil of which men of power are capable.' --Bertrand Russell, _War Crimes in Vietnam_, chapter 1.
On 8/15/06, Taco Hoekwater wrote:
Hi,
Sanjoy Mahajan wrote:
I still can't figure this problem one out, from a few months ago, and it happens with a recent ConTeXt (2006.08.08 21:51). 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:
I remember I ran into that as well (more than a year ago) and I ended up renaming my figures to figure1-1.pdf etc. It actually turned out to be easier for me, because that way I could use the figure filename as the reference.
While reading Taco's response something else came to my mind: here's what I did in one of the presentations: \startsetups award:gold \useexternalfigure[medal][medal_gold][height=7.5cm] \stopsetups \startsetups award:silver \useexternalfigure[medal][medal_silver][height=7.5cm] \stopsetups \startsetups award:bronze \useexternalfigure[medal][medal_bronze][height=7.5cm] \stopsetups After that I just issued \setups{award:gold} at the top of "product file" for gold medallists while using the same page layout for all the medallists (with a simple \externalfigure[medal] which was good for any medallist). I guess that you could also do something like \startsetups chapter:1 \useexternalfigure[fig-1][1/fig-1.pdf] \useexternalfigure[fig-2][1/fig-2.pdf] \stopsetups \startsetups chapter:2 \useexternalfigure[fig-1][2/fig-1.pdf] ... \stopsetups \starttext \setups{chapter:1} \externalfigure[fig-1] \externalfigure[fig-2] \setups{chapter:2} \externalfigure[fig-1] \stoptext Just out of curiosity I tried the following: \startsetups chapter:1 \dorecurse{10}{\useexternalfigure[fig-\recurselevel][1/fig-\recurselevel.pdf]} \stopsetups \startsetups chapter:2 \dorecurse{10}{\useexternalfigure[fig-\recurselevel][2/fig-\recurselevel.pdf]} \stopsetups But you should ask someone else where to "expand" stuff to make it work. Mojca
participants (3)
-
Mojca Miklavec
-
Sanjoy Mahajan
-
Taco Hoekwater