比如,我有两个导出HTML的样式(CSS+JS),一个适合带TOC的,一个适合不带TOC的,是否可能在导出时自动判断org文件中是否包含 toc:nil
,来动态选择采用哪个样式?
应该是可以的。不太熟悉 Org mode,刚刚想到一个比较局限的方法(把下面的 Org 代码块插入 Org 文档,Org 导出时会执行它,搜索是否有 toc:nil
,根据结果插入不同的 CSS 文件),不知道有帮助没有。
#+BEGIN_SRC emacs-lisp :results raw :exports results
(if (save-excursion
(goto-char (point-min))
(re-search-forward
(rx line-start "#+OPTIONS:" (1+ not-newline) "toc:nil")
nil :no-error))
"#+HTML_HEAD: <link rel=\"stylesheet\" type=\"text/css\" href=\"without-toc.css\" />"
"#+HTML_HEAD: <link rel=\"stylesheet\" type=\"text/css\" href=\"with-toc.css\" />")
#+END_SRC
多谢啦。但是我想要的是个通用的,即不是在文档里的
不是在 Org 文档的话里就更不“通用”(这里指的是可以指定任意的 CSS 和 JS 文件)吧?
假如有这个功能的话,你所期望的使用方式是什么?
我看可以写一个函数,先检查有没有制定 CSS,再根据 toc 插入 CSS,然后把这个函数 hook 到导出命令上
不放到 Org 文件中的话,这是另外一种方法(注:判断是否有 toc
的方法依旧可能不可靠,估计有更为准确的判断方法)
(defun chunyang-org-html-setup-css (back-end)
"根据 toc 设置不同的 CSS 文件."
(when (eq back-end 'html)
(if (save-excursion
(goto-char (point-min))
(re-search-forward
(rx line-start "#+OPTIONS:" (1+ not-newline) "toc:nil")
nil :no-error))
(insert "#+HTML_HEAD: <link rel=\"stylesheet\" href=\"/没有TOC的.css\">" "\n")
(insert "#+HTML_HEAD: <link rel=\"stylesheet\" href=\"/有TOC的.css\">" "\n"))))
(add-hook 'org-export-before-processing-hook #'chunyang-org-html-setup-css)
1 个赞
我记得是用 org-export-with-toc
这个 boolean 来控制的。
org-export-with-toc
是全局变量,org文档里的 toc:nil
是局部变量,不一样。
多谢了多谢了!!