将图形导出为PDF时,可以在绘图标签中导出特殊符号/西里尔字母吗?

Igo*_*gor 7 pdf fonts wolfram-mathematica embedded-fonts

我试图将图形列表导出为PDF格式的单独帧,以便借助外部实用程序(例如pdf2swf)编译矢量SWF动画.遗憾的是,导出的PDF文件中的某些特殊字符(例如,度符号或三点)已损坏.这也是所有俄罗斯信件的命运.请注意,当Mathematica从Mma直接导出到SWF时,会在列表中对图形进行栅格化处理,这在我的情况下会产生令人不满意的结果.

有没有办法在导出的图形中保留这些字母?

单个图形可以在图形编辑器中手动编辑,但几百帧的视频几乎不可能.以下自定义函数可以保留一些符号:

ExportPDF[filename_, elem_, 
  opts : OptionsPattern[{Export, Outlines -> True}]] := Module[{$elem},
  $elem = Style[elem, Background -> None];
 If[OptionValue[Outlines] == True
   , $elem = 
    First@ImportString[ExportString[$elem, "PDF"], "PDF", 
      "TextMode" -> "Outlines"]
   ];
  Export[filename, $elem, FilterRules[{opts}, Options[Export]]]
 ]
Run Code Online (Sandbox Code Playgroud)

不幸的是,它并不总是有帮助.

Ale*_*kov 6

一种解决方法是导出到EMF而不是PDF格式:

Export["C:\\1.emf", 
 Plot[Sin[x], {x, 0, Pi}, PlotLabel -> 
   "\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b"]]
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以进一步将EMF转换为PDF或SWF.请参阅此处有关Mathematica高质量EMF输出的一般提示.

这看似可靠地工作的另一种方法是转换西里尔文字轮廓,然后把它放在你的显卡,Inset或者用Labeled:

plotLabel = 
  First@ImportString[ExportString[
    "\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b",
       "PDF"], "PDF"];
Labeled[Plot[Sin[x], {x, 0, Pi}], plotLabel, Top]
Run Code Online (Sandbox Code Playgroud)

或者您可以直接使用概述文本PlotLabel:

Export["C:\\1.pdf", Plot[Sin[x], {x, 0, Pi}, PlotLabel -> plotLabel]]
Run Code Online (Sandbox Code Playgroud)

您可以通过编写一个简单的例程来概括此方法:

cyrFix = First@ImportString[ExportString[#, "PDF"], "PDF"] &
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式使用它:

Export["C:\\1.pdf", 
 Plot[Sin[x], {x, 0, Pi}, PlotLabel -> 
  cyrFix@"\:0420\:0443\:0441\:0441\:043a\:0438\:0435 \:0431\:0443\:043a\:0432\:044b"]]
Run Code Online (Sandbox Code Playgroud)