[NTG-context] figure directory is sort of searched

Sanjoy Mahajan sanjoy at mrao.cam.ac.uk
Tue Aug 15 05:50:21 CEST 2006


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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/octet-stream
Size: 15220 bytes
Desc: example files
Url : http://www.ntg.nl/pipermail/ntg-context/attachments/20060815/b7c319a4/attachment.obj 


More information about the ntg-context mailing list