[Tex/LaTex] How to use latex to include EPS images with spaces in theirs names and paths

dvipsghostscriptgraphicspathsps2pdf

I have EPS image files (with spaces in their names) in a directory ../../Images space bla bla bla/. The following MWE simulates the real scenario in a simplified way.

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{\jobname.list}
a space.eps
b space.png
\end{filecontents*}
\usepackage{grffile}

\parindent=0pt
\usepackage{graphicx}
\newread\reader

\begin{document}
\def\stripend#1 \stop{\unexpanded{#1}}
\openin\reader=\jobname.list\relax
\loop
    \read\reader to \x
    \unless\ifeof\reader
    \section{\x}
    \edef\x{%
      \unexpanded{%
        \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]%
       }%
       {../../Images space bla bla bla/\expandafter\stripend\x \stop}%
     }%
     \x
\repeat
\closein\reader
\end{document}

Because I want to import all image formats and manipulate them with PSTricks, I have to use latex-dvips-ps2pdf sequence. xelatex is not my option because it runs much slower. Shortly speaking, the compilation fails. How to solve it?

Note that the available questions and the corresponding answers in this site do not help. I have read all, none works.

Best Answer

The \special for dvips' EPS file support already uses quotes, e.g.:

PSfile="a b c/d e f.eps" llx=0 lly=0 urx=24 ury=24 rwi=240

However, the graphics package has to do much more:

  • File exists?
  • Without extension? Try out the extensions, given in the extension list.
  • Searching via \graphicspath.
  • Driver specific: \Gread@eps reads the PostScript file to find the bounding box.

Package grffile deals with the first three items, if option space is given. The last item needs patching (at least until I might update grffile):

\documentclass{article}
\usepackage{graphicx}

\usepackage[space]{grffile}
\usepackage{etoolbox}
\makeatletter
\patchcmd\Gread@eps{\@inputcheck#1 }{\@inputcheck"#1"\relax}{}{}
\makeatother

\begin{document}
\includegraphics{a b c/d e f.eps}
\includegraphics{a b c/d e f}
\graphicspath{{a b c/}}
\includegraphics{d e f.eps}
\includegraphics{d e f}
\end{document}