0

我正在使用ob-julia.el在 Emacs 下创建我的 Julia 笔记本。然而,随着新的 Julia v1.0版本,它不再工作了。

例如,一个基本的 org-mode 文档,如下所示:

#+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
4

2 回答 2

2

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

在这个 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 问题。但是,如果您现在还想继续使用,可能会有一个快速而肮脏的修复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 

这将重新定义readcsvandwritecsv函数并使 ob-julia.el 再次工作。

有了这个修复,我现在得到:

#+BEGIN_SRC julia
1+2
#+END_SRC

#+RESULTS:
: 3

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

#+RESULTS:
: 3

正如预期的那样。

于 2018-08-27T16:47:07.837 回答
1

这打破了为我构建几个 Julia 包的过程。作为一种解决方法,我将 Picaud 的代码移至~/.julia/config/startup-babel.jl.

更新:

这种定制似乎不再起作用。这个对我有用。执行 Mx customize-apropos 并搜索 julia。查找Org Babel Julia Command并将其设置为(当然,您可能希望在其中使用自己的 Julia 路径):

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

不再适合我的旧定制:

然后我将Ess Julia's 的Inferior Julia Args变量自定义为

-e include("$(ENV["HOME"])/.julia/config/startup-babel.jl") -i
于 2018-09-29T16:37:06.287 回答