如何使用乳胶包含名称和路径中带有空格的 EPS 图像?

如何使用乳胶包含名称和路径中带有空格的 EPS 图像?

我在目录中有 EPS 图像文件(名称中带有空格)../../Images space bla bla bla/。以下 MWE 以简化的方式模拟了真实场景。

\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}

因为我想导入所有图像格式并用 PSTricks 处理它们,所以我必须使用 latex-dvips-ps2pdf 序列。xelatex这不是我的选择,因为它运行速度慢得多。简而言之,编译失败。如何解决?

请注意,此网站中提供的问题和相应的答案没有帮助。我已全部阅读,但无一有用。

答案1

dvips 对 EPS 文件的支持\special已经使用了引号,例如:

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

然而,这个graphics软件包的作用远不止于此:

  • 文件已存在?
  • 没有扩展?尝试扩展列表中提供的扩展。
  • 通过 \graphicspath 搜索。
  • 驱动程序特定:\Gread@eps读取 PostScript 文件来查找边界框。

如果给出选项,则软件包grffile将处理前三项space。最后一项需要修补(至少在我可能更新之前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}

相关内容