创建独立的 eps 文件并使用批处理文件来自动化该过程

创建独立的 eps 文件并使用批处理文件来自动化该过程

我一直在看这些帖子

如何修复具有不正确边界框的 EPS?

无法确定 * 中的图形大小(无 BoundingBox)

如何将 PDF 转换为 EPS?

如何使用 latex.exe 和 dvips 来生成 EPS 而不是 PS?

为了理解如何pdfeps图形创建独立文件以及如何eps从尚未替换标签的文件获取文件。上述帖子非常有用epspsfrag

我的eps图形通常使用 Adob​​e Illustrator (AI) 制作,然后使用psfraglatex 字体将 AI 图形中的原始标签替换为我需要的标签。效果很好。

这种工作流程的问题在于,epsAI 的原始文件还没有正确的标签。这意味着我无法将epsAI 中的这个文件发送给其他人。基于上述帖子,我创建了一个我认为不错的工作流程,以便生成一个独立eps文件,其中所有psfrag标签均已正确插入。我的目标是在最终eps文件中仍嵌入所有字体。以下是我参考jeffcott.eps此处存储的文件的工作流程:

http://petitlien.fr/epspicture

(A)检查 jeffcott.eps 的边界框

gswin32c -dNOPAUSE -dBATCH -q -sDEVICE=bbox jeffcott.eps
%%BoundingBox: 0 0 373 190
%%HiResBoundingBox: 0.000000 0.000211 372.617989 189.934025

(B). 转换为独立 pdf

\documentclass[convert]{standalone}
\usepackage[hiresbb,dvips]{graphicx}
\usepackage[dvips]{color}
\usepackage{psfrag}
\begin{document}
\psfrag{A}{$m$}
\psfrag{B}{$k,c$}
\psfrag{Y}{inner stator bore}
\includegraphics{E:/jeffcott.eps}
\end{document}

(C)eps从上述结果pdf文件中创建一个文件

pdfcrop --hires "standpdf.pdf" "standpdf-temp.pdf"

接下来发出pdftops命令:

pdftops -level3 -eps standpdf-temp.pdf standpdf.eps

现在,standpdf.eps已创建,但 Ghostscript 警告它无法找到其 bbox。问题是行%%BoundingBox%%HiResBoundingBox似乎离顶部标题行很远。我有两个解决方案:

I:将与 bbox 对应的这两行移动到第一个 header 行之后

二:使用ps2eps

ps2eps -f --fixps standpdf.eps

该文件standpdf.eps.eps由 Ghostscript 创建ps2eps,并且能够加载该文件而不会出现任何异常。

检查 bbox 得出:

 gswin32c -dNOPAUSE -dBATCH -q -sDEVICE=bbox standpdf.eps.eps
 %%BoundingBox: 0 0 373 190
 %%HiResBoundingBox: 0.000000 0.000352 372.617989 189.935994

但是当我在文本编辑器中打开该文件时standpdf.eps.eps,我可以看到 bbox

 %%BoundingBox: 0 1 372 190
 %%HiResBoundingBox: 0.000000 1.000000 372.000000 190.000000

我的问题:

  1. 从上面可以看出part (c),Ghostscript 并不总是读取文件的正确 bbox eps。为什么会这样?

  2. ps2eps在文件上使用该命令是否正确eps。我尝试过使用,epstool但似乎该工具只能将 bbox 从一个文件复制到另一个文件,而不能修复它。

  3. 我想在一台Windows机器上创建一个批处理文件,以自动执行部分 (B) 和 (C) 中的任务并standpdf-temp.pdf在此过程中删除临时文件。我查看了本文开头提到的一些帖子中列出的批处理文件,但它们不起作用。

  4. 更进一步Question 3,我想创建一个批处理文件,它将处理pdf文件夹中的所有文件并创建相应的eps文件。如何做到这一点?

  5. 还有一个相关的问题:在哪里可以学到如何创建批处理文件Windows?我还没有找到任何全面的信息来源。


更新:

xport 提供的批处理文件运行良好。但是有一个小错误。查看BatchF.bat,在使用处理后ps2eps,后面的行根本没有得到处理。Ps2eps将控制权交还给命令提示符,但批处理文件在那里停止。如何修复?

由于这篇文章太长了,我创建了一个新文章:

如何自动更改一堆 EPS 图像中的标签并将其转换为 PDF

谢谢。

答案1

我将为您提供 6 个批处理文件。每个文件都采用 (La)TeX 输入文件名没有扩展名。它将编译单个 (La)TeX 输入文件以生成 PDF 和 EPS 格式的输出。在开发阶段,您可以使用 6 个批处理文件中的每一个编译相同的 (La)TeX 输入文件,并研究哪一个最适合您。6 个批处理文件中的每一个都在内部使用不同的步骤处理单个 (La)TeX 输入文件。在下一个解释中,描述将更清楚。

在生产阶段,您应该已经决定将其中哪一个应用于您拥有的一堆 (La)TeX 输入文件。由于将批处理文件应用于一堆 (La)TeX 输入文件是一项非常繁琐的工作,因此我为您提供了一个额外的批处理文件来自动化该过程。因此总共有 7 个批处理文件。

批处理文件A

rem batchA.bat
rem echo off
latex -interaction=nonstopmode %1
dvips -R -t unknown %1
ps2pdf -dAutoRotatePages#/None -dCompatibilityLevel#1.5 -dPDFSETTINGS#/prepress %1.ps %1-temp.pdf
pdfcrop --restricted --hires %1-temp %1.pdf
pdftops -level3 -eps %1.pdf
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1.ps
del %1-temp.pdf
  1. 它可以用于任何纸张尺寸的输入文件。
  2. 脚步:TEX -> DVI -> PDF -> cropping -> EPS
  3. pdfcrop裁剪需要花费大量时间。如果您不需要裁剪,请不要使用此批处理文件。

批处理文件

rem batchB.bat
echo off
latex -interaction=nonstopmode %1
dvips -R -t unknown %1
ps2pdf -dAutoRotatePages#/None -dCompatibilityLevel#1.5 -dPDFSETTINGS#/prepress %1.ps
pdftops -level3 -eps %1.pdf
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1.ps
  1. 它只能用于具有紧的纸张尺寸。
  2. 脚步:TEX -> DVI -> PDF -> EPS
  3. 它比 运行得更快,batchA.bat因为无需裁剪pdfcrop。缺点是您必须严格指定纸张尺寸。

批处理文件

rem batchC.bat
echo off
latex %1
dvips -t unknown %1
gswin32c -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.ps
pdftops -eps %1.pdf
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1.ps
  1. 它几乎与相同,batchB.bat但是开关更少,以加快编译速度。
  2. 它只能用于具有紧的纸张尺寸。
  3. 脚步:TEX -> DVI -> PDF -> EPS
  4. 它比 运行得更快,batchA.bat因为无需裁剪pdfcrop。缺点是您必须严格指定纸张尺寸。

批处理文件

rem batchD.bat
echo off
tex %1
dvips -t unknown %1
gswin32c -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.ps
pdftops -eps %1.pdf
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1.ps
  1. 它与 几乎相同,batchC.bat但使用tex.exe代替latex.exe。输入文件必须是纯 TeX 格式。我希望它比 更快methodC.bat,但尚未测试,因为我在将输入文件从 LaTeX 转换为纯 TeX 时遇到了很多麻烦。基准测试将很快完成。
  2. 它只能用于具有紧的纸张尺寸。
  3. 脚步:TEX -> DVI -> PDF -> EPS
  4. 它比 运行得更快,batchA.bat因为无需裁剪pdfcrop。缺点是您必须严格指定纸张尺寸。

批处理文件

rem batchE.bat
rem echo off
latex -interaction=nonstopmode %1
dvips -R -t unknown -E %1 -o %1-temp.eps
epstool --copy --bbox %1-temp.eps %1.eps
epstopdf --hires %1.eps
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1-temp.eps
  1. 它可以用于任何纸张尺寸的输入文件。
  2. 脚步:TEX -> DVI -> EPS -> bounding box correction -> PDF
  3. 生成的 EPS 文件大小比前 4 个批处理文件(a、b、c、d)生成的 EPS 文件大小更大。

批处理文件

rem batchF.bat
echo off
latex -interaction=nonstopmode %1
dvips -R -t unknown %1 -o %1-temp.ps
ps2eps %1-temp.ps
epstool --copy --bbox %1-temp.eps %1.eps
epstopdf --hires %1.eps
rem acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1-temp.ps
del %1-temp.eps
  1. 它可以用于任何纸张尺寸的输入文件。
  2. 脚步:TEX -> DVI -> PS -> EPS -> bounding box correction -> PDF
  3. 生成的 EPS 文件大小比前四个批处理文件(a、b、c、d)生成的 EPS 文件大小更大。
  4. batchE.bat我忘记了与进行比较的基准结果batchF.bat

自动化脚本

rem automate.bat
rem it takes a single character from {a,b,c,d,e,f}.
rem the options are case-insensitive.
rem for example: automate a
rem another example: automate F
echo off
for %%x in (*.tex) do batch%1.bat %%~nx
pause

如果您有任何问题,请发表评论。


针对您的误用进行更新。

batchA.bat{ , batchB.bat, batchC.bat, batchD.bat, batchE.bat, }中的每个batchF.bat都接受一个不带扩展名的输入文件名。例如,如果您想使用batchE.batfor helloworld.tex,则必须输入batchE helloworld并按回车键。

如果您想要使用batchE.bat存在于所有批处理文件所在的同一目录中的一组输入文件,则请键入automate E并按回车键。

答案2

部分回答了...其余的将稍后添加...


如何创建批处理文件

请先浏览下面的示例并尝试理解,而无需阅读后面的解释。

rem this is a batch file named xport.bat
rem it need a single argument which is a name of TeX input file.
rem don't include the trailing .tex please! 
echo off
latex %1
dvips -t unknown %1
gswin32c -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%1.pdf %1.ps
pdftops -eps %1.pdf
acrord32 %1.pdf
del %1.log
del %1.aux
del %1.dvi
del %1.ps
rename %1.pdf xport.pdf

解释:

  1. 批处理文件可以采用可选参数。如果使用xport.bat以下参数执行,

    xport mytexinputfilewithoutextension
    

    %1被设置为mytexinputfilewithoutextension

  2. rem是批量注释的关键字。它与%TeX 中的类似。

  3. echo off用于不显示正在执行的命令的语法。

  4. latex %1代表执行的文件为latex.和不需要文件扩展名,但是、和、需要文件扩展名。%1myinputfilewithoutextensionlatexdvipsgswin32cpdftopsacrord32delrename

  5. del %1.log用于删除文件%1.log

  6. rename %1.pdf xport.pdf用于重命名%1.pdfxport.pdf

答案3

有一个很好的工具可以解决这些问题墨景它是一款矢量图形编辑器,但也可以在命令行上运行。它适用于 Linux、Max 和 Windows。但是,它本身需要使用 Ghostscript 等附加软件。

如果您使用该-D选项,则文件将被拖至绘图。它可以导出 EPS 和 PDF 以及 SVG,这对网站来说很有用。

步骤如下:

latex file
dvips file
inkscape -D --export-eps file.eps file.ps

这给了我一个 A4 文档中带有单个绘图的漂亮 EPS 文件。如果您替换--export-eps--export-pdf,您将获得 PDF 输出。

相关内容