ob-sagemath

org-babel integration with SageMath

Github星跟踪图

  • ob-sagemath
    [[http://melpa.org/#/ob-sagemath][file:http://melpa.org/packages/ob-sagemath-badge.svg]]
    [[http://stable.melpa.org/#/ob-sagemath][file:http://stable.melpa.org/packages/ob-sagemath-badge.svg]]
    [[https://travis-ci.org/stakemori/ob-sagemath][https://travis-ci.org/stakemori/ob-sagemath.svg]]

    ob-sagemath provides an [[http://orgmode.org/worg/org-contrib/babel/][org-babel]] integration with [[http://www.sagemath.org/][SageMath]] by [[https://github.com/stakemori/sage-shell-mode][sage-shell-mode]].
    This package is inspired by [[https://github.com/gregsexton/ob-ipython][ob-ipython]],
    though the implementation is completely different.

** Requirements

  1. SageMath 6.6 or newer.
  2. GNU Emacs 24.3 or newer.
  3. [[https://github.com/stakemori/sage-shell-mode][sage-shell-mode]]

** Installation and sample configuration
You can install =ob-sagemath= from [[https://github.com/milkypostman/melpa.git][MELPA]].
=ob-sagemath= requires [[https://github.com/stakemori/sage-shell-mode][sage-shell-mode]].
See [[https://github.com/stakemori/sage-shell-mode#installation-and-setup][Installation and Setup]] to setup [[https://github.com/stakemori/sage-shell-mode][sage-shell-mode]].
The following is a sample configuration for =ob-sagemath=. Put these lines in your "~/.emacs.d/init.el".

#+begin_src emacs-lisp
;; Ob-sagemath supports only evaluating with a session.
(setq org-babel-default-header-args:sage '((:session . t)
(:results . "output")))

;; C-c c for asynchronous evaluating (only for SageMath code blocks).
(with-eval-after-load "org"
(define-key org-mode-map (kbd "C-c c") 'ob-sagemath-execute-async))

;; Do not confirm before evaluation
(setq org-confirm-babel-evaluate nil)

;; Do not evaluate code blocks when exporting.
(setq org-export-babel-evaluate nil)

;; Show images when opening a file.
(setq org-startup-with-inline-images t)

;; Show images after evaluating code blocks.
(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
#+end_src

** Example file
Here is an example org file.

[[file:./example.org][example.org]]

** Session
ob-sagemath currently supports only evaluating with a session by using [[https://github.com/stakemori/sage-shell-mode][sage-shell-mode]].
So like in the sample configuration, you have to provide the =:session= header argument.
Usually, code blocks are evaluated in the =Sage= process buffer.
If the =:session= argument is provided and it is a string, then the code block is evaluated in
another process buffer.
For example, by evaluating the following code block, a process buffer =Sage= is created and
the code block is evaluated in the process buffer.

#+BEGIN_EXAMPLE
,#+BEGIN_SRC sage :session foo
print 'This code will be evaluated in the process buffer Sage.'
,#+END_SRC
#+END_EXAMPLE

** Asynchronous evaluation
You can evaluate SageMath code blocks by =C-c C-c= (bound to =org-ctrl-c-ctrl-c=) like in other org-babel packages.
But usually it blocks user inputs. In the sample configuration, =C-c c= is bound to =ob-sagemath-execute-async=.
And it enables the asynchronous evaluation. So you can interact with Emacs during the evaluation.
With a prefix argument, it evaluates all code blocks in a buffer.
If the =org-mode= buffer is killed during the evaluation, the output will be lost.
Please do not kill the =org-mode= buffer until the evaluation completes.

Because =org-mode= doesn't provide a standard way for asynchronous evaluation,
this feature is unstable.

** Images
Image files of graphs can be embedded by providing the =:file= header argument.
By evaluating the code block, the image file is stored in the file.
Here is an example.

#+BEGIN_EXAMPLE
,#+BEGIN_SRC sage :file sin.png
# You can change the size of the image by providing the figsize argument.
plot(sin, [0, 2*pi], figsize=4)
,#+END_SRC

,#+RESULTS:

#+END_EXAMPLE

If the =:file= header argument is not provided and the =:results= header argument contains =file=,
then the code block returns a temporally file name.
SageMath deletes these temporally files when the process exits.

#+BEGIN_EXAMPLE
,#+BEGIN_SRC sage :results file
plot(sin, [0, 2*pi])
,#+END_SRC
#+END_EXAMPLE

** Tables
If the =:results= header argument contains =table= and the output looks like a table
(a list/tuple of lists/tuples), then the result is converted to a table.

#+BEGIN_EXAMPLE
,#+BEGIN_SRC sage :results table :colnames '(Fruit Price)
[("Apple", 300), ("Banana", 200), ("Orange", 300)]
,#+END_SRC

,#+RESULTS:, Fruit, Price, --------+-------, Apple, 300, Banana, 200, Orange, 300, #+END_EXAMPLE

** Kill evaluation
To kill the evaluation, switch to the process buffer (usually its buffer name is =Sage=),
and hit =C-c C-c= (bound to =sage-shell:interrupt-subjob=).

** Issues or pull requests
I am new to org-babel. There may be missing features. Feel free to post issues or send pull requests.

主要指标

概览
名称与所有者sagemath/ob-sagemath
主编程语言Emacs Lisp
编程语言Emacs Lisp (语言数: 3)
平台
许可证GNU General Public License v3.0
所有者活动
创建于2015-12-17 17:54:41
推送于2020-07-19 18:51:24
最后一次提交2019-11-06 16:28:43
发布数8
最新版本名称0.4 (发布于 )
第一版名称0.1 (发布于 )
用户参与
星数35
关注者数4
派生数10
提交数158
已启用问题?
问题数9
打开的问题数7
拉请求数1
打开的拉请求数1
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?