【问题标题】:org-mode html export组织模式 html 导出
【发布时间】:2011-09-19 07:53:51
【问题描述】:

我有一个包含源代码、文档和乳胶代码的 org 文件。 Latex 的东西画了一堆图表来解释函数是如何相互作用的。据了解,

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

org-mode 应该在使用 html 导出时将乳胶代码导出为图像。

#+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 时,乳胶块被完全忽略。

【问题讨论】:

标签: emacs org-mode org-babel


【解决方案1】:

我能够将 tikz 图片从 org 导出到 html(实际上,到 reveal.js 使用 [org-reveal][1] )来自 org 8.2.5h 和以下

#+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,然后我得到一个图像,但是 错误地渲染了一个。

【讨论】:

  • 这正是我一整天都在寻找的东西(顺便说一句,也是为了让它在 org-reveal 中工作)!
【解决方案2】:

使用最新版本的 Org-mode(但是,早于版本 9 --- 请参阅下面的编辑),您可以使用类似以下的内容,可以导出到 LaTeX 以及 HTML。在后一种情况下,convert(来自 ImageMagick 工具包)用于将 tikz 代码 sn-p 生成的 PDF 转换为大小为 100 x 100 像素的 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 宏的代码,以及乳胶结果的“graphics”属性代码块。

【讨论】:

  • 你好,你能告诉我latex+exaclty是什么吗?
  • #+PROPERTY: header-args:latex+ <args> 将<args> 附加到名为header-args:latex 的标头参数中。这在某种程度上是“可以猜测的”in the docs(尽管我同意这可以改进)。
【解决方案3】:

dvipng 不处理 tikz。我在我的安装中解决了这个问题,将 dvipng 替换为以下 shell 脚本:

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

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

【讨论】:

  • 运气好,还是您仍在使用相同的解决方法?我无法完成这项工作。
【解决方案4】:

我无法使 tikzpicture 块工作,但不应使用 #+begin_latex 和 #+end_latex,正如您在 Org-Mode 文档的链接中所说,只需要 \begin{...} LATEX_CODE end{...}。

这个 sn-p 应该可以工作。

#+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 !

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多