![使用 pdflatex 时使用 psfrag 替代](https://linux22.com/image/279083/%E4%BD%BF%E7%94%A8%20pdflatex%20%E6%97%B6%E4%BD%BF%E7%94%A8%20psfrag%20%E6%9B%BF%E4%BB%A3.png)
到目前为止,我将数学纳入图表的标准方法是使用 psfrag 和 latex+dvips+ps2pdf。
我现在正在转向 pdflatex,并倾向于以 pdf 格式准备我的图形。我想知道是否存在一种类似于 psfrag 的方法可以将数学包含在 pdf 图形中。我知道 auto-pst-pdf 包,但不想使用它,因为在大型项目中,它的运行速度比 pdflatex 慢得多,而且我不确定它是否可以像 pdflatex 一样处理 microtype。
答案1
目标和制约因素
- 提取主输入文件中导入的所有 EPS 图像,而无需对主输入文件进行大量修改。
- 将每个导入的 EPS 图像转换为 PDF 并以其原始文件名保存。
假设
为了最佳实践,我假设您将所有 EPS 图像放在名为 的子目录中
Images
。这意味着目录结构定义如下。other parents/project/Images/ other parents/project/main.tex other parents/project/myextractor.sty
您必须遵循此约定,因为其余代码使用此结构。当然,您可以更改此目录结构,但您还需要修改一些代码(不多)。稍后
main.tex
将myextractor.sty
进行讨论。您正在使用 Windows。如果您不是 Windows 用户,请禁用 中提到的清理代码
myextractor.sty
。你知道你必须
main.tex
用latex -shell-escape main dvips main ps2pdf -dAutoRotatePages#/None main.ps
注意:对于非 Windows 用户,请替换#
为=
。
步骤1
创建一个名为的包,myextractor.sty
如下所示。按照上面的目录结构保存它。
% myextractor.sty
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{myextractor}[2013/10/09 v0.01 LaTeX package for my own purpose]
\RequirePackage{filecontents}
\begin{filecontents*}{template.tex}
\documentclass[preview,border=0pt,graphics]{standalone}
\usepackage{graphicx}
\graphicspath{{Images/}}
% Active the following code (between \makeatletter and \makeatother)
% if you want to cancel the effect of
% width, height and/or scale defined in \includegraphics
%\makeatletter
%\define@key{Gin}{width}{}
%\define@key{Gin}{scale}{}
%\define@key{Gin}{height}{}
%\makeatother
\let\ea\expandafter
\begin{document}
%\edef\z{\noexpand\includegraphics[\varone]{\vartwo}}\z
\ea\includegraphics\ea[\varone]{\vartwo}
\end{document}
\end{filecontents*}
\RequirePackage{graphicx}
\RequirePackage{pgffor}
\let\temp\includegraphics
\renewcommand\includegraphics[2][]{%
\temp[#1]{#2}%
\immediate\write18{latex -jobname=#2 -output-directory=Images \unexpanded{"\def\varone{#1} \def\vartwo{#2} \input{template}"} && cd Images && dvips #2 && ps2pdf -dAutoRotatePages=/None #2.ps}%
% disable the following if you are not Windows users.
\foreach \ext in {dvi, ps, log, aux}{\immediate\write18{cd Images && cmd /c del #2.\ext}}%
}
\endinput
仔细阅读代码中的注释。它们如下。
% Active the following code (between \makeatletter and \makeatother)
% if you want to cancel the effect of
% width, height and/or scale defined in \includegraphics
%\makeatletter
%\define@key{Gin}{width}{}
%\define@key{Gin}{scale}{}
%\define@key{Gin}{height}{}
%\makeatother
和
% disable the following if you are not Windows users.
\foreach \ext in {dvi, ps, log, aux}{\immediate\write18{cd Images && cmd /c del #2.\ext}}%
第2步
修改main.tex
如下
% main.tex
\documentclass{book}
%\usepackage{graphicx}
\usepackage{myextractor}% automatically load graphicx
\graphicspath{{Images/}}
\begin{document}
\chapter{A}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=.5]{A}
\caption{A}
\label{fig:A}
\end{figure}
A \ldots
\chapter{B}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=.75]{B}
\caption{B}
\label{fig:B}
\end{figure}
B \ldots
\chapter{B}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=1]{C}
\caption{C}
\label{fig:C}
\end{figure}
C \ldots
\end{document}
重要说明如下
%\usepackage{graphicx}
\usepackage{myextractor}% automatically load graphicx
\graphicspath{{Images/}}
- 先加载
myextractor
包graphicx
以防止graphicx
覆盖myextractor
定义。由于内部myextractor
加载,您实际上可以在中graphicx
禁用。graphicx
main.tex
\graphicspath
必须按照上面给出的方式指定。
步骤3
main.tex
按照上面的说明进行编译latex-dvips-ps2pdf
。之后,检查Images
文件夹,您将找到每个 EPS 图像的 PDF 版本。完成!
答案2
我不知道您是否打算在大量图片上写 LaTex,但我使用 Inkscape 来做到这一点。基本上,在将图像保存为 .pdf 格式时,有一个复选框可以勾选,该复选框允许提取所有文本并创建一个辅助 tex 文件,该文件会自动将其放置在正确的位置。在您的 .tex 文件中,您可以\includegraphics{mypix.pdf}
用\input{mypix.pdf_tex}
(由 Inkscape 创建的文件)替换。
由于这只是一个打开并保存的操作,我想可以编写一些脚本来自动对给定文件夹的所有文件执行此操作