Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 将组织特殊文本块导出到Latex_Emacs_Latex_Org Mode - Fatal编程技术网

Emacs 将组织特殊文本块导出到Latex

Emacs 将组织特殊文本块导出到Latex,emacs,latex,org-mode,Emacs,Latex,Org Mode,我的问题是导出此组织块 #+BEGIN_NOTE some text here #+END_NOTE 到这个乳胶代码 \begin{bclogo}[logo=\bcattention, noborder=true, barre=none]{some text here} \end{bclogo} 有没有一种方法可以自定义如何导出此文本块?您可以在组织模式下使用自定义块这样做: +开始使用BCU徽标 这里有一些文字 +尾端标志 然后,使用过滤器修改导出,如下所示: (defun ox-mrku

我的问题是导出此组织块

#+BEGIN_NOTE
some text here
#+END_NOTE
到这个乳胶代码

\begin{bclogo}[logo=\bcattention, noborder=true, barre=none]{some text here}
\end{bclogo}

有没有一种方法可以自定义如何导出此文本块?

您可以在组织模式下使用自定义块这样做:

+开始使用BCU徽标 这里有一些文字

+尾端标志 然后,使用过滤器修改导出,如下所示:

(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}

这似乎接近你想要的。我不知道你怎么能在环境中找到一具尸体。我认为您需要使用一个属性来设置{}中的文本,然后使用文本作为主体。这可能不容易在筛选器中实现,最好在自定义导出中实现。

您可以在组织模式下使用自定义块这样做:

+开始使用BCU徽标 这里有一些文字

+尾端标志 然后,使用过滤器修改导出,如下所示:

(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}

这似乎接近你想要的。我不知道你怎么能在环境中找到一具尸体。我认为您需要使用一个属性来设置{}中的文本,然后使用文本作为主体。这可能不容易在过滤器中实现,最好在自定义导出中实现。

您可以保留
注释
环境,并通过特定于乳胶的过滤器将其替换为
bclogo
(我修改了John的代码):

如果要对所有latex派生的后端执行此操作,可以将
(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))

您可以保留
NOTE
环境,并通过特定于乳胶的过滤器(我修改了John的代码)将其替换为
bclogo

如果要对所有latex派生的后端执行此操作,可以将
(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))

我是否可以建议改为使用以下内容:

#+LaTeX_HEADER: \usepackage[tikz]{bclogo}
...
#+ATTR_LATEX: :options [logo=\bcattention, noborder=true, barre=none]{some title here}
#+BEGIN_bclogo
some text here
#+END_bclogo

除非您真的想使用notes,否则在这里使用LaTeX特殊块非常合适。

我可以建议您使用类似以下的东西吗

#+LaTeX_HEADER: \usepackage[tikz]{bclogo}
...
#+ATTR_LATEX: :options [logo=\bcattention, noborder=true, barre=none]{some title here}
#+BEGIN_bclogo
some text here
#+END_bclogo

除非您真的想使用notes,否则在这里使用LaTeX特殊块非常合适。

John感谢您的回答。这个脚本可以工作,但我需要维护
注释
环境,因为文档必须以html和Latex格式导出。因此,我的问题可以更好地发布:是否有一种方法可以修改
#+开始注释#+结束注释
环境,以类似于
的方式插入Latex属性?您可以使用过滤器中的后端变量在cond块中执行Latex或html特定的操作。导出的html代码应该是什么样子?您可能需要考虑制作一个定制的出口商,尽管它将构建您想要的特殊块,带有后端特定代码。约翰感谢您的回答。这个脚本可以工作,但我需要维护
注释
环境,因为文档必须以html和Latex格式导出。因此,我的问题可以更好地发布:是否有一种方法可以修改
#+开始注释#+结束注释
环境,以类似于
的方式插入Latex属性?您可以使用过滤器中的后端变量在cond块中执行Latex或html特定的操作。导出的html代码应该是什么样子?您可能需要考虑制作一个自定义的出口商,尽管它将构建您想要的特殊块,带有后端特定代码。