13.4 Include Files

导出过程中 可以插入其他文件内容。例如插入 ‘.emacs’ 文件可使用:

#+INCLUDE: "~/.emacs" src emacs-lisp

INCLUDE 关键字后有三个位置参数:

  1. 文件名,唯一必选参数。Org 不做正确性与内容校验。
  2. 用于包裹内容的块名称。若为 ‘example’ 、 ‘export’ 、 ‘src’ ,内容会通过 org-escape-code-in-string 转义。可使用任意块名,但以 ‘:’ 开头的块名需要加引号,如 ‘":name"’ 。
  3. 代码高亮使用的语言,仅对 ‘export’ 和 ‘src’ 类型有效。

如果插入的文件未指定标记语言,Org 会默认将其视为 Org 格式并照常处理,仅有少数例外情况。Org 会让插入文件中的脚注标记(见 Creating Footnotes)仅在该文件内有效。插入文件的内容归属于包含 ‘INCLUDE’ 关键字的同一结构—标题、列表项等。具体来说,文件内的标题会成为当前章节的子标题。可以通过附加关键字参数 ‘:minlevel’ 改变这一行为,它会将插入文件中的标题整体提升为最低层级。例如,下面的语法会让插入文件与当前顶层标题成为同级标题:

#+INCLUDE: "~/my-book/chapter2.org" :minlevel 1

使用 ‘:lines’ 参数可只插入文件部分行,范围为左闭右开区间,起止值可省略以使用默认值。

#+INCLUDE: "~/.emacs" :lines "5-10"插入第 5–9 行
#+INCLUDE: "~/.emacs" :lines "-10"插入第 1–9 行
#+INCLUDE: "~/.emacs" :lines "10-"从第 10 行插入到文件末尾

可使用文件链接提取 org-link-search 匹配的对象132(见 Search Options in File Links)。 ‘:lines’ 范围相对于目标元素,因此:

#+INCLUDE: "./paper.org::*conclusion" :lines "1-20"

会插入标题 ‘conclusion’ 下的前 20 行。

将 ‘:only-contents’ 设为非 nil 可只提取匹配对象的正文内容,忽略计划行与属性抽屉。例如插入自定义 ID 为 ‘theory’ 的标题正文:

#+INCLUDE: "./paper.org::#theory" :only-contents t

以下命令可跳转到插入文件:

C-c ' (org-edit-special)

访问光标处的插入文件。


Footnotes

(132)

注意 org-link-search-must-match-exact-headline 本地绑定为非 nil ,因此 org-link-search 仅匹配标题与命名元素。