组织模式html导出

时间:2011-09-19 07:53:52

标签: emacs org-mode org-babel

我有一个包含源代码,文档和乳胶代码的组织文件。 Latex的东西绘制了一堆图解,解释了函数如何相互作用。根据,

http://orgmode.org/manual/LaTeX-fragments.html

使用html导出时,

org-mode应将乳胶代码导出为图像。

#+TITLE: Test
#+AUTHOR: Blah
#+LATEX_HEADER: \usepackage{tikz}
#+OPTIONS: LaTeX:dvipng

#+begin_latex

  \begin{tikzpicture}
    \draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle;
  \end{tikzpicture}

#+end_latex

如果我使用pdf导出以上工作,那么我的乳胶设置工作也在我的系统上存在dvipng但是当导出到html latex块时完全被忽略。

4 个答案:

答案 0 :(得分:7)

我能够将org中的tikz图片导出为html(实际上是 从组织8.2.5h使用[org-reveal] [1])揭示.js与以下

#+OPTIONS: tex:imagemagick
#+LaTeX_HEADER: \usepackage{tikz}

* Slide Title

\begin{tikzpicture}
    \draw [blue,fill] (0,0) rectangle (5,3);
    \draw [red,fill] (0,0) rectangle (3,2);
\end{tikzpicture}

我希望这有帮助。没有#+LaTeX_Header行,LaTeX 进程不知道包含tikz,并且构建失败。如果我试试 tex:dvipng代替tex:imagemagick,然后我得到了一张图片,但却是 错误地渲染一个。

答案 1 :(得分:5)

使用Org-mode的最新版本(但是,比版本9更早 - 请参阅下面的编辑),您可以使用以下内容,可以导出到LaTeX以及HTML。在后一种情况下,convert(来自ImageMagick工具包)用于将从tikz代码片段生成的PDF转换为大小为100px×100px的PNG图像。

#+TITLE: Test
#+AUTHOR: Blah
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [american]
#
# Setup tikz package for both LaTeX and HTML export:
#+LATEX_HEADER: \usepackage{tikz}
#+PROPERTY: header-args:latex+ :packages '(("" "tikz"))
#
#+PROPERTY: header-args:latex+ :imagemagick (by-backend (latex nil) (t "yes"))
#+PROPERTY: header-args:latex+ :exports results :fit yes

* One Diamond

#+name: diamond
#+header: :iminoptions -density 600 -resample 100x100
#+header: :file (by-backend (latex "diamond.tikz") (t "diamond.png"))
#+begin_src latex :results raw file
  \begin{tikzpicture}
    \draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle;
  \end{tikzpicture}
#+end_src

#+attr_latex: :float nil :width ""
#+results: diamond

* COMMENT setup

#+name: setup
#+begin_src emacs-lisp :results silent :exports none
  (defmacro by-backend (&rest body)
    `(case (if (boundp 'backend) (org-export-backend-name backend) nil) ,@body))
#+end_src

# Local variables:
# eval: (org-sbe "setup")
# End:

此外,可以使用以下命令添加标题,并将图片插入LaTeX中的浮动figure环境中:

#+caption: A diamond.
#+attr_latex: :float t :width ""
#+results: diamond

请注意,:width属性设置为空字符串,以清除Org-mode的默认行为,该模式在导出到LaTeX时将图片的宽度设置为0.9\textwidth


根据this page,也可以用SVG而不是PNG导出图片,只需将diamond.png替换为diamond.svg并删除与ImageMagick相关的标题,如:

#+TITLE: Test
#+AUTHOR: Blah
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [american]
#
# Setup tikz package for both LaTeX and HTML export:
#+LATEX_HEADER: \usepackage{tikz}
#+PROPERTY: header-args:latex+ :packages '(("" "tikz"))
#
#+PROPERTY: header-args:latex+ :exports results

* One Diamond

#+name: diamond
#+header: :file (by-backend (latex "diamond.tikz") (t "diamond.svg"))
#+begin_src latex :results raw file
  \begin{tikzpicture}
    \draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle;
    % \node at (0,0) {\(x_i\)};
  \end{tikzpicture}
#+end_src

#+caption: A diamond.
#+attr_latex: :float t :width ""
#+results: diamond

* COMMENT setup

#+name: setup
#+begin_src emacs-lisp :results silent :exports none
  ;; (setq org-babel-latex-htlatex "htlatex")
  (defmacro by-backend (&rest body)
    `(case (if (boundp 'backend) (org-export-backend-name backend) nil) ,@body))
#+end_src

# Local variables:
# eval: (org-sbe "setup")
# End:

但请注意,此解决方案不支持tikz代码中的数学宏。 htlatex应该支持基本的数学结构(通过取消评论上面的2 tikz和lisp行来尝试),但是这个功能显然需要一些返工,因为生成的SVG无效。


修改

从版本9开始,上面的代码变为(为了说明目的,参考该图):

#+TITLE: Test
#+AUTHOR: Blah
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [american]
#
# Setup tikz package for both LaTeX and HTML export:
#
#+LATEX_HEADER: \usepackage{tikz}
#+PROPERTY: header-args:latex+ :packages '(("" "tikz"))
#+PROPERTY: header-args:latex+ :imagemagick yes :fit yes

* One Diamond

#+name: diamond
#+header: :iminoptions -density 600 -resample 100x100
#+header: :file (by-backend (latex "diamond.tikz") (t "diamond.png"))
#+begin_src latex :results raw graphics
  \begin{tikzpicture}
    \draw (1,0) -- (0,1) -- (-1,0) -- (0,-1) -- cycle;
  \end{tikzpicture}
#+end_src

#+name: fig:diamond
#+caption: A diamond.
#+attr_latex: :float t :width ""
#+results: diamond

Figure [[fig:diamond]] is a diamond.

* Setup                                                            :noexport:
#+name: setup
#+begin_src emacs-lisp :exports none :results silent
  (defmacro by-backend (&rest body)
    `(case org-export-current-backend ,@body))
#+end_src

# Local variables:
# eval: (org-sbe "setup")
# End:

主要区别在于“COMMENT”变为设置部分的“:noexport”标记(请参阅this answer),by-backend宏的代码以及“{1}}宏的”图形“属性乳胶代码块的结果。

答案 2 :(得分:3)

dvipng不处理tikz。我通过使用以下shell脚本替换dvipng来解决这个问题:

 #! /bin/bash
 shift
 shift
 dvips $9
 gm convert -trim $9 ${9/dvi/png}

现在,我可以使用C-x C-c C-l预览tikz片段,或将其导出为HTML。不是一个理想的解决方案,但它对我有用。

答案 3 :(得分:2)

我无法使tikzpicture阻止工作但#+begin_latex#+end_latex不应该使用,如您在Org-Mode文档的链接中所述,仅\begin{...} LATEX_CODE end{...} #+OPTIONS: LaTeX:dvipng * Test Blah \begin{equation} % arbitrary environments, x=\sqrt{b} % even tables, figures \end{equation} % etc If $a^2=b$ and \( b=2 \), then the solution must be either $$ a=+\sqrt{2} $$ or \[ a=-\sqrt{2} \]. Done ! 1}}是必需的。

此代码段应该有效。

{{1}}