Org_babel
文章目录
功能点
switches
方法:
-n: 显示行号- source block switches
- 详情:rich format
代码预览
功能解释:
- 最终
执行或者导出的代码,并不一定是看到的代码的样子 - 如果要预览后台真正使用的代码,就需要使用整个功能了
调用方法:
M-x org-babel-expand-src-block按键:
C-c C-v vC-c C-v C-v
source block
执行代码块
启用方法
1 2 3;; Here C --> for C, C++ (org-babel-do-load-languages 'org-babel-load-languages '((python . t) (C . t) ))执行快捷键
- Ctr-C Ctr-C
rich format
代码行数标记
-n: 设定起始行数1 2;; This exports with line number 20. 当前行是第 20 行 (message "This is line 21")+n: 设定为上面的代码-n 20加上设定的增加值1 2;; This is listed as line 31. (1) -n 20 (2) +n 10 (3) 所以 20 + 10 = 30, 当前行是30 + 1 = 31 行 (message "This is line 32")
代码内 anchor 引用和链接
设定 anchor
1 2(save-excursion ;; (ref:sc) (goto-char (point-min)) ;; (ref:jump)- 这里 (ref:sc) 和 (ref:jump) 就是
代码块内部的 anchor
- 这里 (ref:sc) 和 (ref:jump) 就是
链接中使用 代码快 anchor
- 例句: (sc) 是可以跳转到代码块内部链接, link_label
格式:
- 不加 label:
[[(anchor_name)]] - 加上 label:
[[(anchor_name)][label_text]]
- 不加 label:
代码块 anchor 取消显示 -r
方法: 在 +begin_src lang 后面加上 -r 选项
python 支持
:var 语法对表格支持
- 内部转换成二维 2d 列表
:var 语法对 Plain List 支持
- 单层列表能够识别
- 多层嵌套列表,报错
按键前缀
- 快捷键 前缀 C-c C-v
- 执行 C-c C-v C-e
支持的语言 support babel languages List
- ref: Babel: Languages
导出
headers
:dir
- 工作目录
:dir ~/my/path- 支持 tramp 模式,远程文件价
:cache
- 缓存执行结果
取值
- yes
- no (默认值)
:eval
:results
- 执行结果保存方式
- 参考:Results of Evaluation (The Org Manual)
noweb 代码块引用
参考:
:noweb 引用单个代码块
:noweb取值no
- (默认值)
- 不 expand
- yes
tangle
- 只有在 tangle 时才 expand, 即: evaluating 执行和 exporting 导出时,不 expand
eval
- 只有执行时,才 expand
no-export
- 只有 exporting 时,不 expand
strip-export
- evaluating 执行和 tangle 时 expand
- export 时,(不 expand),去掉 noweb 语法声明部分
使用方法:
被引用代码块 #+NAME: given-name 唯一化标识
1print("hello")引用格式
1<<given-name>>- 注意: 要设置好
:nowebheader 否则可能 expand 失败
- 注意: 要设置好
检验生效方法
- 在使用引用的代码块中
M-x org-babel-expand-src-block或者C-c C-v C-v
- 在使用引用的代码块中
:noweb-ref 引用多个代码块
使用方法:
| |
变量使用 :var
语言
参考: Babel: Languages
shell
参考:
source block 代码块支持的 声明方式 :
sh: /bin/sh1 2#+begin_src sh #+end_srcshell: 默认 shell1 2 3#+begin_src shell #+end_srcbash1 2 3#+begin_src bash #+end_src
特殊 headers
:stdin <element-name>: 通过 org #+NAME: 工具传入内容:cmdline arg1 arg2: 控制出入的命令行参数:shebang [shebang]: 修改关联的 shell- eg:
:shebang #!/usr/bin/env bash
- eg:
cmd 支持
参考: microsoft windows - Org-babel invoking cmd.exe - Emacs Stack Exchange
补丁代码:
| |
用法:
:shcmd <cmd-comand>: 指定 cmd.exe 命令例子:
1dir
注意
sh和shell不一样- sh 是 /bin/sh
- shell 是用户的默认 shell, chsh 设定的默认 shell, 例如:bash 或者 zsh 等
c-mode, cpp-mode, D-mode
参考:
举例:
| |
Hello World!
| |
hello
headers
:includes 头文件
:cmdline 可执行文件的命令行参数
:flags 编译控制
:main 是否用 main 包裹代码块
可选值
- "no": 禁用 main 包裹
:defines 宏定义
:namespaces C++ 的 using namespace <name>
:libs 链接时的 library 指定
python
参考:
headers
:results
取值:
output: 输出打印到 stdout 中的内容value:三种变体
raw: 即 org-babel 默认的 value 形式pp: 调用 pprint.pformat(%s)file: 适合输出文件的类型,例如图片类型输出
图片处理
例子:
- 通过 noweb 减少手写代码
注意:这里的 return 不可省略,否则不会输出图片
| |
jupyter
jupyter-python
FAQ
pandas 输出
| |
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 1 | 2 | 3 |
| 1 | a | b | c |
FAQ
执行确认提醒
参考:
方法:
通过配置变量
org-confirm-babel-evaluate为 nil 取消执行确认- 对于单个 org 文件: buffer-local 设置
对于特定代码块:
1 2 3(defun my-org-confirm-babel-evaluate (lang body) (not (string= lang "python"))) ;don't ask for ditaa (setq org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate)
解决文件夹不存在问题
| |
I
文章作者
上次更新 2024-07-16 (7f33ae8)