通过中间的“.ps”文件可以帮助

通过中间的“.ps”文件可以帮助

我使用 Inkscape 创建图形,然后将其导出为 PDF,以便将它们包含在 LaTeX 文档中(使用 \includegraphics 和 pdflatex)。直到有人告诉我我的图形在 Mac OS X 上无法正确显示时,我才注意到有问题。基本图形部分(例如不透明度设置小于 100% 的框或圆圈)根本不显示。

问题似乎出在 pdflatex 上,因为从 inkscape 导出的 PDF 在 Mac 上显示正常。由于我使用的是 Linux,有时也使用 Windows,所以我从未意识到存在问题!

在试图找出问题的原因后,我偶然发现了

\includegraphics PDF,颜色问题Inkscape → PDF → includegraphics → XeLaTeX → 更改颜色

但这并没有解决我的问题。

类似的问题被问到嵌入的 PDF 图形中不透明到透明的渐变丢失但现在答案已经真的给出了。

我发现将导出的 PDF 转换为 PS 然后再转换回 PDF 可以解决问题,但之后图形质量会很差。

我错过了什么?感谢您的任何建议。

以下是一个最小的工作示例:

\documentclass[a4paper]{article}
\usepackage[pdftex]{color,graphicx}

\begin{document}

\begin{figure}[htb]
 \begin{center}
  \includegraphics[width=\columnwidth]{test_diagram}
  \caption{Block diagram created with Inkscape 0.48}
 \end{center}
\end{figure}

\end{document}

所含图形可在此处下载:https://www.dropbox.com/s/mrtj0c3u0ng6a39/test_diagram.pdf

Inkscape:0.48.3.1 r9886
pdfTeX,版本 3.1415926-2.4-1.40.13(TeX Live 2012/Debian)

答案1

如果通过基于 PDFKit 的查看器嵌入 Inkscape 图像pdflatex并显示在该查看器上,我也看到了这个问题。(PDFKit 是 OS X 的内置 PDF 渲染引擎,并被 Skim、Preview 和许多其他程序使用)。

显然,Inkscape 有一种“不寻常”的方式来指定透明度,这些透明度无法在嵌入后保留下来pdflatex

对我来说唯一可靠的解决方法是通过压平透明胶片来“净化”PDF。我使用 ghostscript(通过脚本ps2pdfwr)和dHaveTransparencies=false开关来实现此目的:

ps2pdfwr -dCompatibilityLevel=1.4 -dHaveTransparency=false test_diagram.pdf sanitized.pdf

缺点是这最终会将图像栅格化。默认分辨率为 720 dpi,对于大多数用例来说应该没问题。但是,如果您需要更好(或更低)的质量,您也可以指定分辨率:

ps2pdfwr -dCompatibilityLevel=1.4 -r1200 -dHaveTransparency=false test_diagram.pdf sanitized.pdf

在 1200 dpi 下,您的约 5 KiB 图像在其光栅化版本中会增加到约 78 KiB。但是,PDF 透明胶片是许多如果涉及到输出设备,就会出现奇怪的问题——不仅仅是由 Inkscape 生成的。例如: 在 TikZ 中使用不透明度会使整个页面在打印时变得“更粗糙”。因此,我认为这是必须付出的代价。

答案2

它似乎在这里起作用,调整 alpha 不透明度而不是一般不透明度。

http://www.inkscapeforum.com/viewtopic.php?f=28&t=15739&p=65180#p65180

我正在使用 pdftex 和 Inkscape 0.91

答案3

我在使用 Inkscape/Mac OS/LaTeX 时也遇到了同样的问题。我可以通过只对图像中有问题的部分进行栅格化,而将其余部分矢量化来解决这个问题。为此,我打开了 SVG 文件,在 Inkscape 中选择了有问题的对象,然后执行了“编辑”-->“制作位图副本”,然后保存为 PDF。我在 Inkscape 0.91 中无法解决这个问题,但在 Inkscape 0.48 中却可以。

答案4

通过中间的“.ps”文件可以帮助

和 RalfB 一样,我发现先转换为 PS,然后再转换为 PDF,这样 Latex 的效果会更好。使用此脚本有帮助:

inkscape foo.svg --export-ps=foo.ps
pstopdf foo.ps -o foo.pdf

然后只需正常编译你的 latex 文件即可。

正如 Daniel 提到的,与转换为“.ps”相比,inkscape 转换为“.pdf”肯定会造成一些混乱。

结果

以下是前后图片,显示经过 ps 后达到了所需的透明度:

之前 (svg -> pdf)

中间 ps 之前

之后(svg -> ps -> pdf)

经过中间 ps

相关内容