pdfLaTeX 与 PSTricks:是否可以为每个图形获取一个 .pdf?

pdfLaTeX 与 PSTricks:是否可以为每个图形获取一个 .pdf?

我知道可以通过添加以下代码在包含 PSTricks 图形的文档中使用 pdfLaTeX

\usepackage[pdf]{pstricks}

在序言中,然后运行

pdflatex --shell-escape <file>

然后,动态创建必要的 PDF 图形并将其存储在通用的<file>-pics.pdf.

现在,我的问题是是否可以做同样的事情,但将每个图形存储在单独的 .pdf 中,而不是将它们全部存储在公共的 .pdf 中<file>-pics.pdf

答案1

使用命令行PDF 工具包你可以burst将 PDF 转换为单页输出:

burst

将单个输入 PDF 文档拆分为单独的页面。还会创建一个名为的报告doc_data.txt,该报告与 的输出相同dump_data。如果省略输出部分,则 PDF 页面命名为:pg_%04d.pdf,例如:pg_0001.pdfpg_0002.pdf等。要自己命名这些页面,请在输出部分中提供printf-styled 格式字符串。例如,如果您想要名为page_01.pdfpage_02.pdf等的页面,请传递output page_%02d.pdfpdftk

dump_data

读取单个输入 PDF 文件并将其元数据、书签(又称轮廓)、页面指标(媒体、旋转和标签)和其他数据报告给指定的输出文件名或(如果未指定输出)标准输出。非 ASCII 字符被编码为 XML 数字实体。不创建新的 PDF。

所以你会用

pdftk <file>-pics.pdf burst

(具有适当名称)以获取每幅图像的<file>输出。pg_<num>.pdf<num>

答案2

使用以下代码提取每一页并将其保存在单独的 PDF 文件中。

步骤如下:

  • 改变\def\filename{<filename>-pics}
  • 用 编译pdflatex -shell-escape extractor
% extractor.tex
\documentclass{article}
\usepackage{filecontents}

\begin{filecontents*}{template.tex}
\documentclass[preview]{standalone}
\usepackage{graphicx}
\begin{document}
\includegraphics[page=\Page]{\Filename}
\end{document}
\end{filecontents*}

\usepackage{multido}
\def\dojob#1#2{\immediate\write18{pdflatex -jobname=#1-#2 "\def\noexpand\Page{#2}\def\noexpand\Filename{#1} \noexpand\input{template}"}}

\def\filename{<filename>-pics}% you just need to change this !
\pdfximage{\filename.pdf}

\begin{document}
\multido{\i=1+1}{\the\pdflastximagepages}{\dojob{\filename}{\i}}

There are \the\pdflastximagepages\ file(s) generated.
\end{document}

模拟

使用 进行编译pdflatex -shell-escape main。您将把每一页main-pics.pdf保存在单独的 PDF 中。

% Main.tex
\documentclass{article}
\usepackage{filecontents}

\begin{filecontents*}{template.tex}
\documentclass[preview]{standalone}
\usepackage{graphicx}
\begin{document}
\includegraphics[page=\Page]{\Filename}
\end{document}
\end{filecontents*}

\usepackage{multido}
\def\dojob#1#2{\immediate\write18{pdflatex -jobname=#1-#2 "\def\noexpand\Page{#2}\def\noexpand\Filename{#1} \noexpand\input{template}"}}
\def\Separate#1{\pdfximage{#1.pdf}\multido{\i=1+1}{\the\pdflastximagepages}{\dojob{#1}{\i}}}

\usepackage[pdf]{pstricks}

\begin{document}
\section{Circle}
\begin{pspicture}[showgrid](3,4)
    \pscircle{2}
\end{pspicture}



\section{Rectangle}
\begin{pspicture}[showgrid](3,4)
    \psframe(3,4)
\end{pspicture}


\section{Separating PDF\ldots}
\Separate{main-pics}
There are \the\pdflastximagepages\ file(s) generated.
\end{document}

答案3

使用以下方式运行文档

pst2pdf <file>

它将生成一个完整的文档,并为子目录中的每个 pspicture 环境生成一个单独的 pdf。对于 Windows,它只需要安装 Perl,例如 Strawbery Perl 或来自http://www.activestate.com/perl. 对于 Linux,Perl 是默认存在的 :-)

相关内容