我似乎对 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.zip从tex.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 页这个文件是定义一个带有强制参数的命令,该参数接受您希望包含在文档中的\includeeps
EPS 文件的名称(不带扩展名),以及一个可以将选项传递给命令的可选参数:.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}