问题 mathematica 8.0和psfrag


我最近从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文件中的文本与早期版本相比有何不同?


9387
2018-06-17 11:10


起源



答案:


EPS的编码方式没有区别。问题是在v7输出中生成文本的PS代码(注意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的数学引擎可以   最充分地使用   剧情。最后但同样重要的是,它   允许在内容中轻松更改符号   .tex文件,而不是必须   从头开始重新创建情节。


附录:

包裹 psfrag 只适用于 EPS 图形,因此只有 latex。 如果你想使用 psfrag 和 pdflatex,然后看tex.SE问题 将psfrag与pdflatex一起使用


8
2018-06-17 13:31



确实有效。非常感谢! - pmt
你怎么看? 这个 关于PostScript输出中非ASCII字符编码错误的问题 数学?是否可以更正此类输出文件(EPS格式),以便正确显示西里尔字符? - Alexey Popkov
@Alexey:我不知道。关于(E)PS的好处是它是一个纯文本文件,所以你可以看到发生了什么。也就是说,EPS和PDF输出在我的机器上工作正常,尽管使用你的机器获得的字体 cyrFix 看起来更好。 - Simon
它看起来像一个非常好的技巧。但它似乎不适用于Mathematica 10 - 标签不会被替换。你能重现这种行为吗? - Alexey Bobrick
@AlexeyBobrick我没有安装Mma10所以我无法检查它是否有效,对不起。你看过PS文件看看发生了什么吗? - Simon


答案:


EPS的编码方式没有区别。问题是在v7输出中生成文本的PS代码(注意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的数学引擎可以   最充分地使用   剧情。最后但同样重要的是,它   允许在内容中轻松更改符号   .tex文件,而不是必须   从头开始重新创建情节。


附录:

包裹 psfrag 只适用于 EPS 图形,因此只有 latex。 如果你想使用 psfrag 和 pdflatex,然后看tex.SE问题 将psfrag与pdflatex一起使用


8
2018-06-17 13:31



确实有效。非常感谢! - pmt
你怎么看? 这个 关于PostScript输出中非ASCII字符编码错误的问题 数学?是否可以更正此类输出文件(EPS格式),以便正确显示西里尔字符? - Alexey Popkov
@Alexey:我不知道。关于(E)PS的好处是它是一个纯文本文件,所以你可以看到发生了什么。也就是说,EPS和PDF输出在我的机器上工作正常,尽管使用你的机器获得的字体 cyrFix 看起来更好。 - Simon
它看起来像一个非常好的技巧。但它似乎不适用于Mathematica 10 - 标签不会被替换。你能重现这种行为吗? - Alexey Bobrick
@AlexeyBobrick我没有安装Mma10所以我无法检查它是否有效,对不起。你看过PS文件看看发生了什么吗? - Simon


试过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包更改此设置。


4
2018-06-17 14:05



很高兴知道PSTricks,谢谢! - pmt


您可以直接在Mathematica中编写“排版”表单,然后它将已经存在于.eps文件中,您可以按原样包含.eps。

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

只需做[esc] +“eps”+ [esc],你就会得到一个epsilon,或者从工具箱中插入它。同样的西格玛。


1
2018-06-17 12:13



谢谢你的回答,rubenvb。 Mathematica排版的问题在于它不是出版质量,这就是为什么我更喜欢使用更好看的LaTeX排版。 - pmt
@pmt:嗯,你的意思是“不是出版质量”?它是矢量格式,所有符号都在正确的位置(我甚至敢说他们只是使用LaTeX在内部排版)。 - rubenvb
出版的主要问题是LaTeX和Mathematica中的字体样式不匹配。这是一些讨论 psfrag和Octave,但想法是一样的。 - Simon
@Simon:好的,谢谢你的快速阅读。 - rubenvb