mathematica 8.0 and psfrag

11

我最近从Mathematica 7.0升级到了8.0,现在遇到了使用psfrag包将我的绘图标签替换为LaTeX代码的问题。早期版本和完全相同的绘图都可以完美地工作,但现在psfrag会保持所有标签不变。我在Ubuntu 11.04上使用Kile进行LaTeX编辑。

例如,在Mathematica中:

plot = Plot[x, {x, -0.1, 0.1}, 
            AxesLabel -> {eps, SUM}, BaseStyle -> {FontSize -> 10}]  
Export["plot.eps", plot]

然后在LaTeX中:

\begin{figure}   
\psfrag{eps}{$\epsilon$}  
\psfrag{SUM}{$\Sigma$}  
\includegraphics{plot.eps}  
\end{figure}  

这应该用LaTeX排版替换标签,但没有任何效果。有什么建议如何解决吗?是否有人知道Mathematica 8将文本编码为eps文件时与早期版本有何区别?

3个回答

8

EPS的编码方式没有区别。问题在于PS代码,该代码可使v7输出中的文本(请注意,Mma使用bind def为大量PS代码创建快捷方式,请参阅生成的EPS文件顶部的详细信息):

%%IncludeResource: font Times-Roman-MISO
%%IncludeFont: Times-Roman-MISO
10 /Times-Roman-MISO Msf
0 8 m
(SUM) N

v8中已经用替代了

%%IncludeResource: font Times-Roman-MISO
%%IncludeFont: Times-Roman-MISO
10 /Times-Roman-MISO Msf
p
0.75 9 m
(S) N
P
p
6 9 m
(U) N
P
p
14.25 9 m
(M) N

这意味着psfrag无法抓取标记。 我找不到在Mma导出选项中如何修复它的方法。
目前,我能想到的唯一解决方法(并且我已经测试过可行)是使用单个字母标记来代替坐标轴标签,例如:
plot = Plot[x, {x, -0.1, 0.1}, AxesLabel -> {"e", "s"}, 
  BaseStyle -> {FontSize -> 10}]
Export["plot8.eps", plot]

\begin{figure}[h]
\psfrag{e}{$\epsilon$}
\psfrag{s}{$\Sigma$}
\includegraphics{plot8.eps}
\end{figure}

注意:

使用psfrag的原因在http://www.reimeika.ca/marco/prettyplots/中已经很好地说明了。

现在,这些标签看起来不太好, (并且毫无意义)。 然而,最终的目的是将图形 包含在由LaTeX制作的论文或报告中, 因此标签的真正意义是将它们用作 psfrag包的标记,该包允许替换EPS图形中的文本。 这种标记方式有三个重要的优点, 相对于在图形中硬编码标签。首先是一致性, 因为字体将与文章中的字体相同。 第二个是LaTeX的数学引擎可以在图形内得到充分利用。 最后但并非最不重要的是,它允许轻松更改符号表示法, 而无需从头开始重新创建图形。


补充:

psfrag仅适用于EPS图形,因此只能使用latex。 如果您想使用psfragpdflatex,请参见tex.SE问题 Using psfrag with pdflatex


您对这个关于 Mathematica 输出的 PostScript 中非 ASCII 字符编码不正确的问题的看法如何?有没有可能通过更正输出文件(EPS 格式)来正确显示 Cyrillic 字符? - Alexey Popkov
看起来是一个非常好的技巧。但是在Mathematica 10中似乎不起作用——标签没有被替换。你能重现这种行为吗? - Alexey Bobrick
@AlexeyBobrick,抱歉我没有安装Mma10,所以无法检查它是否有效。你有没有查看PS文件以了解发生了什么? - Simon
是的,我没有找到任何包含“({Q})”的片段,其中{Q}代表一个标签字母。 - Alexey Bobrick
@AlexeyBobrick 我查看了使用 Wolfram Cloud 生成的 eps 文件,你可以看到字体现在默认为轮廓而不是文本表示。这可能是一个错误,希望能够得到修复。请参见 Szabolcs 的此评论 - Simon
显示剩余2条评论

4

我尝试了7.0.1和8.0.1,对我来说都很好用。因此,我无法重现您的错误。(可能只是拼写错误、大小写敏感等)。无论如何,我同意对于出版物,修改LateX几乎是必须的。起初我也使用PSFrag,但很多时候我也不喜欢标签的位置,特别是当你放置更复杂的表达式时。因此,我建议通过PSTricks进行中间步骤。这看起来像这样:

\documentclass[floatfig,isolatin,amsthm,amsmath,amsfont,amstext,12pt,fullpage,pslatex,amsref]{scrartcl}
\usepackage{amstext}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{graphicx}
\usepackage{float}
\usepackage{epic}
\usepackage{eepic}
\usepackage{color}
\pagestyle{empty}
\usepackage{pstricks}

\begin{document}

\begin{pspicture}(0,0)(13.0,7.8)

    %\psgrid(0,0)(0,0)(13,7.8)
% need the grid only in the beginning for positioning

    \rput[c](10.7,3.8){\includegraphics{plot.eps}}

% put labels. 

    \rput[c]{90}(9.5,4){\Large{$\frac{E^2_\text{tot}}{V M_\mathrm{S}}$}}
    \rput[c]{0}(6,6.0){$x/h$}

% also to put extra lines, arrows, comments, etc. in LaTeX style, e.g.:

%   \psline[linecolor=green,linewidth=2pt,linestyle=dashed]{->}(3.5,3.05)(9.1,3.05)
\end{pspicture}
\end{document}

因此,有些工作需要您手动完成,但通常耗费的时间是值得的,因为结果看起来确实更好,特别是用于出版。但是请记住,在标准设置中,LaTeX使用计算机现代字体来显示公式。这与例如 Times New Roman(文本的典型选择)并不相同。您可以使用mathptmx包更改此设置。


1

您可以直接在Mathematica中编写“typeset”表单,然后它将已经在.eps文件中,您可以直接包含.eps文件。

plot = Plot[x,{x,-0.1,0.1},AxesLabel -> {"[\eps],[\Sigma]"},BaseStyle -> {FontSize -> 10}]

只需执行[esc]+"eps"+[esc],就会得到一个epsilon,或者从工具箱中插入。sigma也是同理。


2
感谢您的回答,rubenvb。Mathematica排版存在的问题是它不具备出版质量,这就是为什么我更喜欢使用外观更好的LaTeX排版。 - pmt
@pmt:嗯,你所说的“不适合出版”是什么意思?它是矢量格式,并且所有符号都在正确的位置上(我甚至敢说他们只是使用LaTeX来内部排版)。 - rubenvb
1
出版的主要问题是LaTeX和Mathematica中的字体样式不匹配。这里有一些关于psfrag和Octave的讨论,但思路是相同的。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接