![Psfrag 或与 XeTeX 类似的标记方法](https://linux22.com/image/252461/Psfrag%20%E6%88%96%E4%B8%8E%20XeTeX%20%E7%B1%BB%E4%BC%BC%E7%9A%84%E6%A0%87%E8%AE%B0%E6%96%B9%E6%B3%95.png)
我理解这个问题使用 psfrag 替换 eps 文件中的标签与 pdfLaTeX 配合得很好。我也认为我理解这个问题没有可行的机制来使用 Xe(La)TeX 完成同样的事情?
尽管如此,我还是尝试使用 psfrag 和 pstool 解决方法重新标记图像,并对错误消息感到有些惊讶,Undefined control sequence
该消息可重现地使第一个(并简化为唯一)\psfrag
命令未定义。在没有 pstool 的情况下工作,结果Undefined control sequence
是\includegraphics
命令。是否有任何已知的解决方法可以在 XeTeX 中或周围替换 eps-image 标签?如果可能的话,我希望在编译之前插入适当的字体,这样我就可以将文档编译为具有两种不同字体的两个不同的 pdf。
我可以将以下内容作为最小的非工作示例吗?它们包含唯一变化导致上述错误的工作文档代码:
版本 1:无 pstool:
\usepackage{psfrag}
[... some document text]
\begin{figure}\psfrag{pfeildreiunten}{Dioxan/HCl konz}
\includegraphics{imagefilename.eps}
\caption{arbitrary caption}
\label{recognise}
\end{figure}
版本 2:使用 pstool:
\usepackage{psfrag}
\usepackage{pstool}
[... some document text]
\begin{figure}\psfragfig{imagefilename}{ %
\psfrag{pfeildreiunten}{Dioxan/HCl konz}}
\caption{arbitrary caption}
\label{recognise}
\end{figure}
还有一些可能有用的信息:eps 是用 ChemDraw 生成的。我输入的标签位于 ChemDraw 绘图中的一个文本框中。我希望这通常是 的正确用法\psfrag
。
编辑(2012 年 7 月 16 日)
在做了更多搜索引擎研究之后,我非常肯定我不会得到 psfrag 或直接在 XeLaTeX 中工作的直接解决方法。现在我问自己以下哪些想法是可行的或可能已经实现(我还没有找到它们,因为我没有仔细寻找):
想法 1:
我不知道文本部分在 (E)PS 或 PDF 文件中是如何处理的。我只知道人们可以在 PDF 中标记和搜索文本,因此它必须以某种纯文本方式进行编码。是否可以将我的 EPS 文件转换为 PDF,包括它们,并仍然告诉 Xe(La)TeX 在文件中查找标签 xyz 并将其替换为标签 abc?如果可以,哪些软件包可以做到这一点?
我发现这个问题这使得我的想法 1 的答案是“否”。
想法 2:
我发现的许多解决方法都是针对 pdfLaTeX 而设计的。甚至有人建议使用 LaTeX 创建正确替换的文本,从 EPS 创建 PDF 文件,然后稍后插入。问题:我正在使用 XeTeX 的一个优点,即非 TeX 标准字体(Liberation 系列)。让它与 LaTeX 配合使用、创建正确的标签、转换 PDF、插入是否“简单”?
在提出这个建议之前,以下是不是一个直接的选择:
我无法(目前)直接使用正确的字体创建图像。我用来生成图像的 ChemDraw 运行在我的基于 Windows 的桌面上,而 XeLaTeX 则运行在我的基于 Lubuntu 的笔记本电脑上(安装了 Liberation)。如果其他方法都失败了,我可能会在图形中使用 Arial 文本,并使其与文本中使用的字体不相称。
答案1
我发现了一种同样有效的方法来解决我的问题:如果我将原始 eps 文件留空,我可以使用包将文本放置在其中的任何位置overpic
。它们的极简文档(可通过 CTAN 或其他来源找到)告诉您所有需要了解的信息。定位可能很棘手,需要反复试验,但另一方面,来自 gnuplot 的图形数据在通过set term postscript eps
(和其他一些选项)导出时始终遵循相同的比例,因此我可以重复使用优化的坐标。
最大的优点是能够使用标签,所以现在我的化合物可以通过该chemcompounds
包在整个方案中自动正确地标记。
答案2
正如您在回答中详细说明的那样,该overpic
软件包是一个解决方案,但我认为它不是强制性的。您可以做的是将环境picture
与(据我记得)软件包\put
提供的命令一起使用。下面给出了一个示例。pic pdf 图像没有文本。后者是使用命令添加的。注释部分(即网格)最初被取消注释,以帮助在命令中找到坐标。我认为它在某种程度上类似于软件包,也类似于在将图形导出为时在 Inkscape 中可能实现的功能。这很乏味,但我想您会习惯的。graphicx
\put
\put
overpic
pdf+tex
\begin{figure}[!ht]\centering\small
\setlength{\unitlength}{2mm}
\begin{picture}(35.5,20)%
\put(0,0){\includegraphics[scale=1]{pic}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \linethickness{0.05mm}
% \multiput(0,0)(1,0){61}{\line(0,1){45}}
% \multiput(0,0)(0,1){41}{\line(1,0){55}}
% \linethickness{0.15mm}
% \multiput(0,0)(5,0){12}{\line(0,1){45}}
% \multiput(0,0)(0,5){9}{\line(1,0){55}}
% \linethickness{0.5mm}
% \multiput(0,0)(10,0){7}{\line(0,1){45}}
% \multiput(0,0)(0,10){5}{\line(1,0){55}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\put(35,4){\makebox(0,0)[c]{$x$}}%
\put(18.75,19.5){\makebox(0,0)[c]{$y$}}%
\put(6,14){\makebox(0,0)[c]{$\Gamma_r$}}%
\end{picture}
\caption{title}
\label{fig:label}
\end{figure}
您首先必须确保您对图像的尺寸感到满意,因为放大或缩小整个图像(图像+标签)可能有点棘手(\unitlengh
不过您可以通过长度来实现这一点)。
另一个选择是在可能的情况下使用Tikz
或pstricks
包。