有什么办法可以把 org 导出的 header 默认导出成 latex 中的 enumerate 样式吗

也就是说将 org 中的

默认导出为

查了下 manual,似乎有两种方法可行

一种是新建一个 org-latex-default-class, 将里面的

               ("\\section{%s}" . "\\section*{%s}")
               ("\\subsection{%s}" . "\\subsection*{%s}")
               ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
               ("\\paragraph{%s}" . "\\paragraph*{%s}")
               ("\\subparagraph{%s}" . "\\subparagraph*{%s}")

修改为自定义的样式,这些样式里全部使用 enumerate 。

还有一种是先将 org-export-headline-levels 设置为 1 或 0, 这样比这个数字大的 header 就全部按照 back-end 进行修改了,文档在这:

Documentation:

The last level which is still exported as a headline.

Inferior levels will usually produce itemize or enumerate lists when exported, but back-end behavior may differ.

但并没有查到这个 back-end 在哪里,如何修改,请各位高人指点 :pray:

1 个赞

应该是指将要导出格式对应的 backend,可以查看变量 org-export-backends。你想导出 latex 文件,就只考虑 ox-latex.el 文件定义的 latex backend 会不会将等级大于 org-export-headline-levels 的 org 标题导成 latex 文件中的列表

感谢,参考了 这个 搞定了。顺便提一下,不要随便网上找个 ox-latex.el 就开始改,我一开始就在 github 上随便搜了个 这个 ,年代久远,试了半天都不行,后来才发现原来参考的 ox-latex 就是有问题的 :joy:

新写的 backend 大概结构是这样的:

(require 'ox)
(require 'ox-publish)
(require 'ox-latex)

(org-export-define-derived-backend 'enumerate-latex 'latex
  :translate-alist '((headline . org-latex-headline-enumerate))
  :menu-entry
  '(?e "Export to ENUMERATE-LATEX"
       (
	    (?l "As LaTeX " org-latex-export-to-latex-enumerate)
	    (?p "As PDF " org-latex-export-to-pdf-enumerate)
	    ))
  )


(defun org-latex-headline-enumerate (headline contents info)
  ;; 你要修改的函数
  )

;;; End-user functions
;;;###autoload
(defun org-latex-export-to-latex-enumerate
  (&optional async subtreep visible-only body-only ext-plist)
  "Enumerate"
  (interactive)
  (let ((outfile (org-export-output-file-name ".tex" subtreep)))
    (org-export-to-file 'enumerate-latex outfile
      async subtreep visible-only body-only ext-plist)))

;;;###autoload
(defun org-latex-export-to-pdf-enumerate
  (&optional async subtreep visible-only body-only ext-plist)
  "Enumerate"
  (interactive)
  (let ((outfile (org-export-output-file-name ".tex" subtreep)))
    (org-export-to-file 'enumerate-latex outfile
      async subtreep visible-only body-only ext-plist
      (lambda (file) (org-latex-compile file)))))



(provide 'ox-enumerate-latex)

;;; ox-enumerate-latex.el ends here

1 个赞