# [twg-tds] Question: how to include an image file in a document class?

Reinhard Kotucha reinhard.kotucha at web.de
Tue Sep 15 22:51:46 CEST 2015

On 2015-09-14 at 04:07:14 +0000, Lei Ye wrote:

> It's my first time to know \graphicspath is deprecated.
>
> In the following scenario, what is the best way to do it.

In the scenario you describe below it doesn't matter because you have
only one directory.

TeX maintains a so-called string pool which contains error messages,
control sequence names, file names, and maybe other things.  The size
if the string pool is limited.  Unfortunately whatever goes to it will
never be removed, hence it is steadily growing.

Consider the following code:

\def\mymacro{}
\let\mymacro\undefined

Though \mymacro isn't accessible anymore, its name remains in the
string pool forever.

Let's assume that you defined

\graphicspath{{dir1/}{dir2/}{dir3/}}

and there is a file "dir3/IMG1234.JPEG".

If you write

\includegraphics{IMG1234}

(without specifying an extension) and if we assume that pdftex looks for
extensions

.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPEG,.JBIG2,.JB2

in this order, it will check whether one if these files exist:

dir1/IMG1234.png
dir1/IMG1234.pdf
dir1/IMG1234.jpg
dir1/IMG1234.mps
dir1/IMG1234.jpeg
dir1/IMG1234.jbig2
dir1/IMG1234.jb2
dir1/IMG1234.PNG
dir1/IMG1234.PDF
dir1/IMG1234.JPG
dir1/IMG1234.JPEG
dir1/IMG1234.JBIG2
dir1/IMG1234.JB2
dir2/IMG1234.png
dir2/IMG1234.pdf
dir2/IMG1234.jpg
dir2/IMG1234.mps
dir2/IMG1234.jpeg
dir2/IMG1234.jbig2
dir2/IMG1234.jb2
dir2/IMG1234.PNG
dir2/IMG1234.PDF
dir2/IMG1234.JPG
dir2/IMG1234.JPEG
dir2/IMG1234.JBIG2
dir2/IMG1234.JB2
dir3/IMG1234.png
dir3/IMG1234.pdf
dir3/IMG1234.jpg
dir3/IMG1234.mps
dir3/IMG1234.jpeg
dir3/IMG1234.jbig2
dir3/IMG1234.jb2
dir3/IMG1234.PNG
dir3/IMG1234.PDF
dir3/IMG1234.JPG
dir3/IMG1234.JPEG % <==
dir3/IMG1234.JBIG2
dir3/IMG1234.JB2

TeX stops searching when dir3/IMG1234.JPEG is found but all file
names it checked before also remain in the string pool forever.

This has two consequences:

1. Though the pool size is quite large nowadays, it's still
limited.  No problem with the example above but some packages
add a lot of stuff to the string pool too wich might lead to the
famous error message "Capacity exceeded".

2. If the string pool is large, TeX needs a lot of time in order to
find control sequences.  Fortunately the string pool is actually
a hash table and thus time consumption grows logarithmically.
But a huge string pool slows down TeX significantly though.

Whether this is problematic depends on the number of strings which
actually are in the pool.  A few directory names usually don't cause
trouble but some macros generate control sequence names on the fly.

I already had to increase the string pool in order to create many
plots using the pgfplots package.  But the impact on processing time
remained, of course.

> I first have a subfolder call images/ to hold my figures and have
> 100
>
> \includegraphics{images/myimage.png}
>
> Then later I decide to change the hosting folder to
> figures/. Instead of replacing "images/" in all 100
> \includegraphics commands, what is a better way to do it?

Well, what would you do if you write a program and decide later to
change names of variables and/or functions?  I think that every
reasonable text editor is sufficient.

Furthermore, if you state the directory explicitly in the
\includegraphics argument you don't have to search the file yourself
whenever you want to replace it.

Regards,
Reinhard

--
------------------------------------------------------------------
Reinhard Kotucha                            Phone: +49-511-3373112
Marschnerstr. 25
D-30167 Hannover                    mailto:reinhard.kotucha at web.de
------------------------------------------------------------------