某些 EPS 文件无法使用 epstopdf 进行转换

某些 EPS 文件无法使用 epstopdf 进行转换

我似乎对 Matlab 生成的某些 EPS 文件有问题。使用 epstopdf,它会生成一个空的 pdf 文件(然后将其插入文档,在那里留下一个空白)。

我的问题可能类似于这个,但似乎从未得到解决。它似乎也类似于这个也,但问题似乎仍未得到解决。

我在 Windows 8.1 上使用 MiKTeX 2.9,并且以下 MWE 可以正常工作:

\documentclass{article}

\usepackage{graphicx}
\usepackage{epstopdf}

\begin{document}

% test.eps can be found at: http://1drv.ms/1EOjokZ
\includegraphics{test.eps}

% prob1_pdfa.eps can be found at: http://1drv.ms/11gMHjb
\includegraphics{prob1_pdfa.eps}

\end{document}

我的意思是第一个 EPS 显示正常,但第二个 EPS 显示不正确。控制台输出中没有错误(除了我似乎总是遇到的“Overfull \hbox”错误)。

同样的 MWE 也适用于 ShareLatex,这是我暂时使用的。

不起作用的 EPS 文件是在 Matlab r2014b 中使用类似以下命令生成的:

f=figure;
hist(rand(1,1e4),25)
print(f,'-depsc','sample.eps')

答案1

图形用户界面

作为伯纳德指出,epspdf-额外包是一个可能的选择。您只需下载epspdf-extra.zip并使用提供的 Windows 安装程序安装epspdf内置的 Tcl/Tk 运行时,它可以用作 GUI 应用程序(如第 3 页所示)。用户手册epspdf包裹中)。

命令行

或者你可以下载epspdf.0.6.0.ziptex.aanhet.net/epspdf,然后按照以下说明操作:

  • 将所有文件提取到一个文件夹中<path to>\epspdf(例如C:\Program Files\epspdf)。
  • 创建<path to>\epspdf一个名为的空文本文件epspdf.bat。然后将以下行复制到批处理文件中,并根据您的设置调整脚本路径:

    @echo off
    set ScriptPath=<path to>\epspdf
    texlua %ScriptPath%\epspdf.tlu %*
    

    例如<path to>,可以是C:\Programs或(包含"C:\Program Files"引号)。" "

  • 添加<path>\epspdf到系统变量Path开始菜单> 右键单击电脑>特性>高级系统设置>环境变量在下面先进的选项卡 > 查找系统变量Path并编辑其值)。

epspdf此方法允许您从命令行结合使用\write18功能(将--enable-write18或别名添加--shell-escape到传递给 pdflatex 编译器的参数列表中)。关于有问题的 EPS 文件,这里有一个 MWE:

\documentclass{article}
\usepackage{graphicx}

\begin{document}
\immediate\write18{epspdf prob1_pdfa.eps}
\includegraphics[keepaspectratio=true,width=0.9\textwidth]{prob1_pdfa.pdf}
\end{document}

在此处输入图片描述


一个更具创造性的方法,基于 LaTeX 代码,见第 3 页这个文件是定义一个带有强制参数的命令,该参数接受您希望包含在文档中的\includeepsEPS 文件的名称(不带扩展名),以及一个可以将选项传递给命令的可选参数:.eps\includegraphics

\newcommand{\executeiffilenewer}[3]{%
\ifnum\pdfstrcmp%
{\pdffilemoddate{#1}}%
{\pdffilemoddate{#2}}%
>0%
{\immediate\write18{#3}}%
\fi%
}
\newcommand{\includeeps}[2][]{%
\IfFileExists{./#2.pdf}%
{\executeiffilenewer{#2.eps}{#2.pdf}{epspdf #2.eps}}%
{\immediate\write18{epspdf #2.eps}}%
\includegraphics[#1]{#2.pdf}
}

当通过 包含文件时\inclueeps,仅当不存在文件或 EPS 文件已更新时epspdf才会调用该程序。.pdf

使用文件abc.eps作为输入的示例:

\includeeps[width=6cm]{abc}
\includeeps{figures/abc}
\includeeps{../section/abc}
\includeeps[keepaspectratio=false,height=9cm]{../section/abc}

答案2

一个快速但不成熟的解决方法:1. 将您正在使用的编辑环境之外的顽固 .eps 转换为 PDF(您可以使用 Inkscape 进行转换)。2. 将 PDF 保存在所需位置。3. 再次编译,但这次 epstopdf 将跳过转换,因为已经有了 EPS 的 PDF 版本。4. 现在渲染应该没问题了。

答案3

我遇到了类似的问题(foo.eps 文件可以正确转换为 pdf,但 goo.eps 会转换为空白 pdf)。我也在 Google 上搜索了很多次,找到了 OP 提到的未解决的问题。请注意,我的 foo.eps 和 goo.eps 不是由同一款软件生成的。我使用了 pdflatex。以下是我在 Linux 上使用 Gwenview 解决该问题的方法:

  • 初始代码:

    \documentclass{beamer}
    \usepackage{graphicx}
    \usepackage{epstopdf}
    
    \begin{document}
    \begin{frame}{}
    
    \includegraphics{goo.eps}
    
    \end{frame}
    \end{document}
    

    这不起作用。转换为 pdf 文件的 eps 是空白的。

  • 然后我使用 gwenview 打开了 goo.eps,这是我的 linux 系统上的默认设置。我将文件保存为 goo.jpg。然后我修改了我的代码,如下所示:

    \documentclass{beamer}
    \usepackage{graphicx}
    \usepackage{epstopdf}
    
    \begin{document}
    \begin{frame}{}
    
    \includegraphics{goo.jpg}
    
    \end{frame}
    \end{document}
    

    这似乎有效。但我只想处理 eps 图形!

  • 于是我再次用 gwenview 打开 goo.jpg,并将文件另存为 goo.eps,覆盖原始文件。我将代码改回初始代码。这次 goo.eps 文件被正确转换为 pdf 文件,并出现在最终的 pdf 中!

我不知道为什么或者如何对我有用,但确实如此。正如我所说,foo.eps 和 goo.eps 文件是由不同的软件生成的。也许有些软件可能无法正确将图形导出为 eps。

答案4

简单的解决方案如果您使用 Texworks 编译 LaTeX 文件,只需将 Typeset 更改为 XeLaTeX+ MakeIndex+ BiBTeX。即使没有使用包,它也适用于我\usepackage{epstopdf}

相关内容