psfrag 和 Mathematica 的 eps 图像存在问题

psfrag 和 Mathematica 的 eps 图像存在问题

我的系统:Windows10,MikTeX2.9,WinEdt10.2

我正在准备/更新一套讲义。我在使用 psfrag 时遇到了以下问题。相关源代码片段:

\begin{figure}[ht]
\psfrag{X}{$x$}
\psfrag{Y}{$y$}
\psfrag{A}{$dA_1$}
\psfrag{B}{$dA_2$}
\psfrag{dr}{$dr$}
\psfrag{df}{$d\phi$}
\psfrag{r1df}{$r_1\,d\phi$}
\psfrag{r2df}{$r_2\,d\phi$}
\begin{center}
\includegraphics[width=240pt]{PolarPlaneElement.eps}
\caption{Samanmittaiset napakoordinaattien vaihteluvälit vastaavat pinta-alkion
sijainnista riippuen erikokoisia tasoalueita}
\label{PolarPlaneElement}
\end{center}
\end{figure}

我生成了图像文件极地平面元素.eps使用 Mathematica。问题在于字符串“A”和“B”的替换。我的理论是,问题与 PostScript 图像中所有其他字符串都在白色背景上,但这两个麻烦制造者却在(单色)粉红色背景上有关。最初,我使用了更具描述性的字符串“dA1”和“dA2”,而不是单个字母“A”和“B”。切换到单个字母字符串按照此处的说明 确实有帮助,但问题仍然存在:

虽然我可以让替换的 $dA_1$ 显示在最终产品中,但原始的“A”仍然会显示出来。换句话说,添加了相关的 TeX 公式,但要替换的字符串并没有被删除!

我目前的测试结果:

  1. 如果我从 eps 图像中删除粉红色,则一切都会按预期运行。无论是使用“A/B”还是“dA1/dA2”
  2. 如果我在粉红色背景上使用较长的字符串“dA1”,“dA2”,则不会替换任何内容。
  3. 过去,在单色背景上使用几乎相同的 psfrag 替换对我来说很有效。那是在 powerdot 幻灯片集上。我想不出这两幅图像有什么关键区别。成功的替换或多或少是相同的。可能区别在于幻灯片中的图像缩放比例不同?

我会继续尝试。接下来要检查 Mathematica 组合在一起生成 eps 文件的图像各个部分的排序是否会影响 psfrag 在 eps 文件中识别字符串的能力。我会在这里发布我的发现。

这是已知的错误/困难/功能吗?你能建议我可以尝试的其他方法吗?

这是有问题的 eps 文件


更多测试:

  • 当我让 Mathematica 生成 eps 文件时,组件的顺序似乎很重要。我最近的想法是将图像的文本组件放在列表的最后。结果是 psfrag 根本无法进行任何替换。评论者观察到,将文本组件放在列表前面会导致“重复”字符串,其中一个被替换。
  • 我对工作图像的早期版本(2 年前)进行了更多测试。在 Ghostview 中查看旧版 eps 让我大吃一惊 - 粉红色背景上的文字无处可寻!当我使用当前的 Mathematica 重新创建该 eps 文件时,该图像也出现了同样的问题。在此期间,我将 Mathematica 从版本 9 升级到了版本 11。我认为这是 Wolfram 方面发生了一些变化的证据。我会在 Mathematica.SE 上提问,并在这里报告,以防其他人遇到同样的问题,目前还没有提供解决方案。

同时,这集好像enter image description here在 psfrag 完成它的魔法之后。通过 TeXWorks 放大镜显示的部分中可以看到幽灵“A”。


目前我最好的尝试是让 Mathematica 使用白色字符打印这些文本!当用白色绘制时,字母的“双重”图形轮廓不会显示。我仍然不明白为什么这个问题只出现在彩色背景上的那些文本上,以及为什么不适用于所有文本。我怀疑部分原因在于——Wolfram 在从版本 9 升级时做了一些更改。

对我来说,这个问题显然是由于 Wolfram 试图“修复”一些没有损坏的东西造成的 :-(

答案1

只是为了好玩,这里是用 tikz 画的。我主要通过描摹你的 EPS 来完成。

\documentclass[tikz]{standalone}
\usetikzlibrary{calc} 
\begin{document}
\begin{tikzpicture}

 % \node[anchor=south west,inner sep=0pt] at (0,0) {\includegraphics{PolarPlaneElement}};


  \begin{scope}[thick,font=\footnotesize,line cap=rect]

    \draw (0,0.4) -- ++(8.8,0) node[right] {$X$};
    \draw (0.19,0) -- ++(0,7.9) node[above] {$Y$};
    \coordinate (O) at (0.19,0.4);

%    \fill (O) circle (1pt);

    \def\angA{20}
    \def\angB{40}

    \draw (O) -- ++ (\angA:9.2);
    \draw (O) -- ++ (\angB:11);

    \begin{scope}[blue]
      \def\Radius{1.3}
      \draw ($(O)+(\angA:\Radius)$) arc [start angle=\angA,delta
      angle=\angB-\angA,radius=\Radius]
      node[pos=0.35,above right=0mm] {$df$}
      ;

      \def\Radius{2.95}
      \def\RadiusDR{1.5}
      \draw[fill=pink] ($(O)+(\angA:\Radius)$)
      coordinate (A1)
      arc [start angle=\angA,delta angle=\angB-\angA,radius=\Radius]
      node[pos=0.45,below left=0mm] {$r_1df$}
      -- ++ (\angB:\RadiusDR)
      coordinate (A2)
      node[pos=0.4,above=0.5mm] {$dr$}
      arc [start angle=\angB,delta
      angle=\angA-\angB,radius=\Radius+\RadiusDR]
      -- cycle
      node at ($(A1)!0.5!(A2)$) {$A$}
      ;

      \def\Radius{6.6}
      \draw[fill=pink] ($(O)+(\angA:\Radius)$)
      coordinate (B1)
      arc [start angle=\angA,delta angle=\angB-\angA,radius=\Radius]
      node[pos=0.55,below left=0mm] {$r_2df$}
      -- ++ (\angB:\RadiusDR)
      coordinate (B2)
      node[pos=0.4,above=0.5mm] {$dr$}
      arc [start angle=\angB,delta
      angle=\angA-\angB,radius=\Radius+\RadiusDR]
      -- cycle
      node at ($(B1)!0.5!(B2)$) {$B$}
      ;

    \end{scope}
  \end{scope}
\end{tikzpicture}
\end{document}

enter image description here

相关内容