gnuplot中的希腊字母pi无法呈现

时间:2019-04-28 05:23:19

标签: utf-8 gnuplot org-mode

我在Emacs orgmode文件中获得了以下代码:

#+begin_src gnuplot :exports results :file images/sinecosine.png
reset
set terminal png  size 360, 360 enhanced
# Line styles
set border linewidth 1
set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 1  # blue
set style line 2 linecolor rgb '#dd181f' linetype 1 linewidth 1  # red
# Legend
set key at 6.1,1.3
# Axes label 
set xlabel 'x'
set ylabel 'y'

set xzeroaxis linetype 2 linewidth 1
  set yzeroaxis linetype 2 linewidth 1
# Axis ranges
set xrange[-2*pi:2*pi]
set yrange[-1.5:1.5]
# Axis labels
set xtics ("-2{/Symbol P}" -2*pi, "-{/Symbol P}" -pi, 0, "{/Symbol P}" pi, "2{/Symbol P}" 2*pi)
set ytics 1
set tics scale 0.75


# Functions to plot
a = 0.9
f(x) = a * sin(x)
g(x) = a * cos(x)
# Plot
plot f(x) title 'sin(x)' with lines ls 1, \
     g(x) notitle with lines ls 2


#+end_src

,它会给出一个没有正确pi符号的gnuplot(3.7),就像在thisthis中一样。是的,我可以使用它的eps版本,但不能使用HTML导出所需的png(或svg)版本。有什么新主意吗?

更新

这是我尝试过的独立代码-成功:

reset
set encoding utf8
set terminal svg enhanced fname 'Times New Roman' rounded dashed standalone
set output "gp-test4-output.svg"

# Line styles
set border linewidth 1
set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 1  # blue
set style line 2 linecolor rgb '#dd181f' linetype 1 linewidth 1  # red
# Legend
set key at 6.1,1.3
# Axes label 
set xlabel 'x'
set ylabel 'y'

set xzeroaxis linetype 2 linewidth 1
  set yzeroaxis linetype 2 linewidth 1
# Axis ranges
set xrange[-2*pi:2*pi]
set yrange[-1.5:1.5]
# Axis labels
set xtics ("-2Π" -2*pi, "-Π" -pi, 0, "Π" pi, "2Π" 2*pi)
set ytics 1
set tics scale 0.75


# Functions to plot
a = 0.9
f(x) = a * sin(x)
g(x) = a * cos(x)
# Plot
plot f(x) title 'sin(x)' with lines ls 1, \
     g(x) notitle with lines ls 2

我已将{/Symbol P}换为Π。从终端命令行中,我可以使它正常工作并产生良好的效果。 Ubuntu仓库确实安装了最新的gnuplot(gnuplot 5.2补丁程序级别6)。因此,再次进行实验,当我在组织模式代码块中C-c C-c时得到

gnuplot-mode 0.7-beta (gnuplot 3.7) -- report bugs with "C-c C-u"

,并且出现相同的错误:用垃圾代替Π。 (不确定gnuplot 3.7是什么。)运行上面的代码块BTW,启动gnuplot REPL,并说它是最新的gnuplot。但是,当上面的Emacs中的独立代码(使用gnuplot模式)被称为la“发送缓冲区到gnuplot”(Emacs gnuplot REPL)时,它将给出错误,但是当我“发送文件到gnuplot”,它会产生无误差的Π。完全奇怪,恕我直言。

这是我的订阅:

(setq package-archives '(("ELPA"  . "http://tromey.com/elpa/")
             ("gnu"   . "http://elpa.gnu.org/packages/")
             ("melpa" . "https://melpa.org/packages/")
             ("org"   . "https://orgmode.org/elpa/")))

为gnuplot模式提供了两种产品:

gnuplot            20141231.2137 available  melpa      drive gnuplot from within emacs

然后是这个

gnuplot-mode       20171013.1616 installed             Major mode for editing gnuplot scripts

因此,我然后卸载了Emacs gnuplot(20141231.2137),然后安装了gnuplot-mode(20171013.1616)。这解决了gnuplot-run-buffer问题,但是组织模式代码块现在出现此错误:

executing Gnuplot code block...
org-babel-execute:gnuplot: Cannot open load file: No such file or directory, gnuplot

搜索customize时,我只发现四个与gnuplot相关联的变量,其中一个是Gnuplot程序,我拥有的变量为/usr/bin/gnuplot。我在Ubuntu 19.04中使用最新的Emacs和org-mode。我如何更好地告诉org-babel在哪里可以找到Gnuplot?我怀疑这种较新的模式不是Emacs org-mode的预期合作伙伴;但是,较旧的模式在组织模式下无法正常执行希腊字母。

1 个答案:

答案 0 :(得分:0)

从Adobe Symbol字体中检索字符“ pi”是PostScript世界中的一种东西,其中使用具有特殊编码的单独字体来解决PostScript字体编码中固有的256个字符的限制。

另一方面,

SVG是XML变体。它使用unicode入口点和(通常)UTF-8编码来访问它们。 SVG文件中的“ pi”是字节序列0xCF 0x80(UTF-8编码)或XML预定义实体π。 gnuplot的“增强文本”模式在这里不相关。我不记得gnuplot 3.7可能存在哪些限制,这些限制会影响将其中任何一个作为普通文本传递到svg终端。当前gnuplot中没有此类限制。