带有ob-julia.el的Emacs org-babel在Julia V1.0中不再起作用

时间:2018-08-27 16:47:08

标签: emacs julia org-babel

我正在使用ob-julia.el在Emacs下创建我的Julia笔记本。但是,对于新的Julia v1.0 版本,它不再起作用。

例如,像这样的基本组织模式文档:

#+BEGIN_SRC julia :exports both :session mySession
1+2
#+END_SRC

现在返回一个空的#+RESULT

如果我查看 mySession 缓冲区,则会看到此错误消息

julia> ERROR: UndefVarError: writecsv not defined
Stacktrace:
 [1] top-level scope at none:0

2 个答案:

答案 0 :(得分:2)

原因是Emacs软件包ob-julia.el尚未升级为支持最新的Julia v1.0版本。

在此v1.0版本中,readcsvwritecsv函数不再存在。它们已被DelimitedFiles.readdlmDelimitedFiles.writedlm函数替换。

但是ob-julia.el仍在使用它们:

(defvar org-babel-julia-write-object-command "writecsv(\"%s\",%s)")

 (format "%s = readcsv(\"%s\")" name file)
    (format "%s = readcsv(\"%s\")"
        name file))))

我已经提交了ob-julia.el issue。但是,如果您现在仍想使用ob-julia.el,则可以进行快速修复。只需在您的~/.julia/config/startup.jl文件中添加以下行:

import DelimitedFiles

function writecsv(filename::AbstractString,ans)
    DelimitedFiles.writedlm(filename,ans,',')
end

function readcsv(filename::AbstractString)
    DelimitedFiles.readdlm(filename,',')
end 

这将重新定义readcsvwritecsv函数,并使ob-julia.el重新工作。

有了此修复程序,我现在得到:

#+BEGIN_SRC julia
1+2
#+END_SRC

#+RESULTS:
: 3

#+BEGIN_SRC julia :session mySession
1+2
#+END_SRC

#+RESULTS:
: 3

符合预期。

答案 1 :(得分:1)

这将中断为我构建几个Julia程序包的过程。作为一种变通办法,我将Picaud的代码移至了~/.julia/config/startup-babel.jl

更新:

自定义似乎不再起作用。这对我有用。进行M-x自定义apropos并搜索julia。找到Org Babel Julia Command并将其设置为(当然,您可能想要在其中找到Julia的路径):

julia -e 'include("$(ENV["HOME"])/.julia/config/startup-babel.jl")' -i

旧的自定义功能不再适用于我:

然后我将Ess Julia的{​​{1}}变量自定义为

Inferior Julia Args