编译以下代码
% Circle.tex
\documentclass[cmyk]{minimal}
\usepackage{pstricks}
\pagestyle{empty}
\topmargin=-72.27pt
\oddsidemargin=-72.27pt
\topskip=0pt
\parindent=0pt
\def\Constant{1}
\paperwidth=2\dimexpr\Constant cm\relax
\paperheight=2\dimexpr\Constant cm\relax
\special{papersize=\the\paperwidth,\the\paperheight}
\begin{document}
\pspicture(-\Constant,-\Constant)(\Constant,\Constant)
\rput(0,0){$E\not=mc^2$}
\pscircle*[linecolor=blue,opacity=0.5](0,0){1}
\endpspicture
\end{document}
和
rem batch.bat takes a file name without extension.
latex %1
dvips -D10000 -t unknown %1
gswin32c -dCompatibilityLevel=1.5 -r10000 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.ps
pdftops -eps %1.pdf
将产生如下图表。
当我从以下主 TeX 输入文件中导入图表时,
% Main.tex
\documentclass[cmyk]{minimal}
\usepackage{graphicx}
\begin{document}
\includegraphics{Circle.eps}
\end{document}
并使用相同的批处理文件对其进行编译,得到如下结果。
问题
使用以下批次之一进行编译Circle.tex
rem MethodA.bat takes a file name without extension.
latex %1
dvips -D10000 -E %1 -o %1-temp.eps
epstool --copy --bbox %1-temp.eps %1.eps
gswin32c -dCompatibilityLevel=1.5 -dEPSCrop -r10000 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.eps
rem MethodB.bat takes a file name without extension.
latex %1
dvips -D10000 %1 -o %1-temp.ps
ps2eps %1-temp.ps
epstool --copy --bbox %1-temp.eps %1.eps
gswin32c -dCompatibilityLevel=1.5 -r10000 -dEPSCrop -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.eps
并Main.tex
使用进行编译batch.bat
可以修复此问题。因为转换是按相反顺序进行的,即先转换 EPS,然后转换为 PDF。
因此,问题的根源在于,pdftops
只要 PDF 包含透明区域,它就会栅格化 EPS。因此,问题是:
是否有一个选项或开关可以避免使用时出现锯齿状轮廓pdftops
?
笔记:
我坚持使用,batch.bat
因为它通常非常节省时间和媒体存储。 产生的锯齿状 EPSbatch.bat
显然比MethodA.bat
和产生的锯齿状 EPS 更大MethodB.bat
。真是悲伤的一天!
答案1
做不到。PostScript 语言不支持任意不透明度(仅支持完全不透明和完全透明)。请参阅此维基百科参考。
这Ghostscript但是,语言确实支持任意不透明度,作为语言的扩展(额外的命令,例如.setopacityalpha
)。请参阅这里了解详情。这就是 pstricks 制作看似透明的 eps 文件的方法。
在你提出的几十个关于数字转换的问题中,我不记得你曾经解释过为什么您希望生成 eps 版本的图形(顺便说一句,这使得回答所有这些问题变得更加困难)。如果您的原因只是在 latex->dvips->ps2pdf 工作流程中使用图形,您可以保证转换为 pdf 将使用 ghostscript,那么该.setopacityalpha
方法是合适的(尽管如果这是您的目标,为什么不首先使用带有 pdftex 的 pdf 图像?或者至少添加-Ppdf
到您的 dvips 调用中以制作 pdf 优化的 eps?)。但是,人们通常想要 eps 图形的原因是他们将图形提供给不接受 pdf 的某些出版商,在这种情况下,出版商几乎肯定也不会接受 ghostscript 特定的扩展,并且该.setopacityalpha
方法也会失败。如果您碰巧知道出版商使用 Adobe Distiller,那么还有另一种方法可以生成透明扩展的 EPS,通过pdfmark
如所述这里。您可以要求 pstricks 使用pdfmark
不透明度方法,方法是替换pstricks.con
为distiller.cfg
(与 pstricks 一起分发)。(您必须要求您的发布商/AllowTransparency true
在其 joboptions 文件中进行设置)。
如果您需要严格符合标准的 EPS 文件,并且该文件可与所有 PostScript 引擎配合使用,那么您要么完全避免透明度,要么使用批处理文件中提供的类似 ps2pdf 后跟 pdftoeps 方法的程序,这将对图像的透明部分进行光栅化。(我认为 pdftops 的下一个版本至少会允许您指定光栅化分辨率)。当然,由于光栅化,EPS 通常会更大。
答案2
谢谢你的提问。很高兴得知 EPS 光栅化是由于缺乏对透明度的支持而导致的。
就我而言,出版商的要求迫使我将我的图表从 PDF 转换为 EPS。我发现这能可以使用 Adobe Acrobat 软件实现无像素化(pdftops 有您提到的问题)。我选择了Save As...
,然后Format -> Encapsulated Postscript
。在 下,Settings...
我注意到该General -> Binary
选项略微减小了文件大小。在 OS X 上,我发现Color Management -> Color Profile -> Apple RGB
保留了屏幕显示颜色。输出的 EPS 文件比 PDF 源文件大,但在我看来,其他方面看起来是一样的。