在org-mode中定义自己的标签

时间:2012-10-09 19:18:37

标签: emacs org-mode

org-mode中的#+AUTHOR#+LATEX中有标记 - 它们是否称为标记?我想定义自己的标签,它调用一个函数来预处理数据,然后输出它 - 如果导出目标是LaTeX。

2 个答案:

答案 0 :(得分:5)

我的解决方案是为qtree块定义一种自己的语言SRC

#+BEGIN_SRC qtree
[.CP [.TP [.NP [] [.N' [.N Syntax] []]] [.VP [] [.V' [.V sucks] []]]]]
#+END_SRC

并相应地处理它。我甚至在paredit添加了qtree模式。 如果树长大,则landscape参数。 https://github.com/Tass/emacs-starter-kit/blob/master/vendor/assorted/org-babel-qtree.el

(require 'org)

(defun org-babel-execute:qtree (body params)
  "Reformat a block of lisp-edited tree to one tikz-qtree likes."
  (let (( tree
          (concat "\\begin{tikzpicture}
\\tikzset{every tree node/.style={align=center, anchor=north}}
\\Tree "
                  (replace-regexp-in-string
                   " \\_<\\w+\\_>" (lambda (x) (concat "\\\\\\\\" (substring x 1))) 
                   (replace-regexp-in-string
                    (regexp-quote "]") " ]" ; qtree needs a space
                                        ; before every closing
                                        ; bracket.
                    (replace-regexp-in-string
                     (regexp-quote "[]") "[.{}]" body)) ; empty leaf
                                        ; nodes, see
                                        ; http://tex.stackexchange.com/questions/75915
                   )                    ; For
                                        ; http://tex.stackexchange.com/questions/75217
                  "\n\\end{tikzpicture}"
                  )))
    (if (assoc :landscape params)
        (concat "\\begin{landscape}\n" tree "\n\\end{landscape}")
      tree)))

(setq org-babel-default-header-args:qtree '((:results . "latex") (:exports . "results")))
(add-to-list 'org-src-lang-modes '("qtree" . qtree))
(define-generic-mode 
    'qtree-mode                  ;; name of the mode to create
  '("%")                         ;; comments start with '%'
  '()                            ;; no keywords
  '(("[." . 'font-lock-operator) ;; some operators
    ("]" . 'font-lock-operator))
  '()                      ;; files for which to activate this mode 
  '(paredit-mode)          ;; other functions to call
  "A mode for qtree edits" ;; doc string for this mode
  )

答案 1 :(得分:4)

它们似乎不再被in-buffer settings称为关键字。无论它们被称为什么,它们似乎都不是用户可定义的。

您想要做的事情与常见的处理方式非常相关,而与 xelatex pdflatex as described on Worg一起导出。

相关部分将是:

;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
(defun my-auto-tex-cmd ()
  (if (string-match "YOUR_TAG: value1" (buffer-string))
      (do something))
  (if (string-match "YOUR_TAG: value2" (buffer-string))
      (do something else))

(add-hook 'org-export-latex-after-initial-vars-hook 'my-auto-tex-cmd)