我的问题是导出这个组织块
#+BEGIN_NOTE
some text here
#+END_NOTE
到这个Latex代码
\begin{bclogo}[logo=\bcattention, noborder=true, barre=none]{some text here}
\end{bclogo}
有没有办法自定义如何在Latex中导出这个文本块?
答案 0 :(得分:2)
我建议使用类似的东西:
#+LaTeX_HEADER: \usepackage[tikz]{bclogo}
...
#+ATTR_LATEX: :options [logo=\bcattention, noborder=true, barre=none]{some title here}
#+BEGIN_bclogo
some text here
#+END_bclogo
除非你真的想使用笔记,否则使用LaTeX特殊块非常适合。
答案 1 :(得分:1)
您可以使用org-mode中的自定义块执行此操作:
这里的一些文字
然后,使用过滤器修改导出,如下所示:
(defun ox-mrkup-filter-special-block (text back-end info)
(let ((text (replace-regexp-in-string "\\\\begin{bclogo}" "\\\\begin{bclogo}[logo=\\\\bcattention, noborder=true, barre=none]{" text)))
(replace-regexp-in-string "\\\\end{bclogo}" "}\\\\end{bclogo}" text)))
(let ((org-export-filter-special-block-functions '(ox-mrkup-filter-special-block)))
(find-file (org-export-to-file 'latex "custom.tex")))
出口到:
\begin{bclogo}[logo=\bcattention, noborder=true, barre=none]{
some text here
}\end{bclogo}
这似乎接近你想要的。我不确定你怎么能在环境中找到一个身体。我认为你需要使用一个属性来设置{}中的文本,然后使用文本作为正文。这可能不容易在过滤器中实现,并且可以在自定义导出中更好地实现。
答案 2 :(得分:1)
您可以保留NOTE
环境,并通过特定于乳胶的过滤器(我修改John的代码)将其替换为bclogo
:
(defun my/latex-process-NOTE-blocks (text backend info)
"Filter special blocks from latex export."
(when (eq backend 'latex)
(let ((text (replace-regexp-in-string "\\\\begin{NOTE}" "\\\\begin{bclogo}[logo=\\\\bcattention, noborder=true, barre=none]{" text)))
(replace-regexp-in-string "\\\\end{NOTE}" "}\\\\end{bclogo}" text))))
(eval-after-load 'ox '(add-to-list
'org-export-filter-special-block-functions
'my/latex-process-NOTE-blocks))
如果您想对所有使用胶乳的后端执行此操作,可以将(eq backend 'latex)
替换为(org-export-derived-backend-p backend 'latex)
。
如果您想确保该块以\begin{NOTE}
开头:
(defun string/starts-with (string prefix)
"Return t if STRING starts with prefix."
(and (string-match (rx-to-string `(: bos ,prefix) t) string) t))
(defun my/latex-process-NOTE-blocks (text backend info)
"Filter special blocks from latex export."
(when (eq backend 'latex)
(if (string/starts-with text "\\begin{NOTE}")
(let ((text (replace-regexp-in-string "\\\\begin{NOTE}" "\\\\begin{bclogo}[logo=\\\\bcattention, noborder=true, barre=none]{" text)))
(replace-regexp-in-string "\\\\end{NOTE}" "}\\\\end{bclogo}" text)))))
(eval-after-load 'ox '(add-to-list
'org-export-filter-special-block-functions
'my/latex-process-NOTE-blocks))