Emacs:在org-mode中统一html和latex之间的引用

时间:2011-09-01 10:03:37

标签: html emacs latex org-mode

如何设置组织模式以便在HTML导出中包含\cite LaTeX命令的结果

示例:

Gulliver's Travels

My father had a small estate in Nottinghamshire: I was
the third of five sons.\cite{swift1726}

\printbibliography

#+LaTeX_HEADER: \usepackage{biblatex}
#+LaTeX_HEADER: \bibliography{classics}

LaTeX出口绝对棒极了。但HTML期望产生所有引用,因为它们在源头。但是如何实现这样的输出:

...
<title>Gulliver's Travels</title>
...
<p>My father had a small estate in Nottinghamshire: I was
the third of five sons.[<a href="#swift1726">1</a>]</p>
...
<p id="swift1726">[1] J. Swift. <i>Gulliver's Travels</i>. 1726.</p>
...

5 个答案:

答案 0 :(得分:11)

org-mode contributed package org-exp-bibtex.el使用bibtex2html生成HTML参考书目,然后在导出为HTML时将引用命令转换为参考书目项的链接。 org-exp-bibtex.el中有一些文档。

我将添加一些其他信息,帮助我将此功能用于我的系统。文件org-exp-bibtex.el似乎附带了最新版本的org模式。因此,如果您评估(require 'org-exp-bibtex),例如将其放在~/.emacs中,然后将#+BIBLIOGRAPHY: classics plain之类的内容放在源文件中代替您的LaTeX {{1} }和\bibliographystyle命令。我发现我的系统需要\bibliography的以下补丁。

org-exp-bibtex.el

如果您收到错误“Symbol的函数定义为void:flet”,则第一个更改会有所帮助,我学会了here。第二个更改只是调用bibtex2html并将TMPDIR设置为当前目录。 bibtex2html homepage建议针对bibtex2html与某些TeX安装存在的问题进行解决。

答案 1 :(得分:3)

e3bo的答案非常好,涵盖了原始问题所要求的所有内容。但是,我无法从发布的补丁中获得所需的结果。我在收到e3bo回答的评论中收到了Anton提到的Args out of range错误。以下是源自a separate, unrelated, question on SO的答案之一的e3bo补丁的不同实现。我不能说我知道为什么这个补丁适合我,e3bo不适用;他们彼此并没有特别的不同。无论如何,我发布了补丁,希望它可以解决用户无法通过其他方式正确获得bibtex2html所遇到的问题。

--- org-exp-bibtex.el.orig      2013-01-05 15:00:53.000000000 -0600
+++ org-exp-bibtex.el   2013-01-05 16:34:54.000000000 -0600
@@ -89,12 +89,13 @@
                (with-temp-file tmp (dolist (i cite-list) (insert (concat i "\n"))))
                (setq tmp-files   (cons tmp tmp-files))
                (setq extra-args (append extra-args `("-citefile" ,tmp)))))
-
-           (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
+           
+           (let ((process-environment (cons "TMPDIR=." process-environment)))
+             (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
                                                           `("-a" "--nodoc"  "--style" ,style "--no-header")
                                                           extra-args
                                                           (list (concat file ".bib"))))))
-             (error "Executing bibtex2html failed"))
+             (error "Executing bibtex2html failed")))

            (dolist (f tmp-files) (delete-file f)))

答案 2 :(得分:3)

e3bo的回答中提到的贡献包已将其名称更改为ox-bibtex.el(另请参阅list of Org mode's contributed packages中的条目)。用法保持不变。但是,现在~/.emacs中插入的行必须为(require 'ox-bibtex)

答案 3 :(得分:1)

现在最近支持org-mode中的ebib,在编写此回复时至少可以使用其开发版本。

步骤:

  1. 确保在您的文档中正确设置了ebib-preload-bib-files,以便在ebib启动时由ebib加载.bib文件

  2. 将以下内容添加到您的.emacs:(org-add-link-type "ebib" 'ebib)

  3. 在您的文档中插入ebib链接,如下所示:[ebib:Jones1998][some paper title]

答案 4 :(得分:0)

如果你有bibtex2html的问题。查看ox.bibtex.el的文档。特别是

#+BIBLIOGRAPHY: bibfilename stylename optional-options

在e3bo答案中我希望classic不在大多数人的bibfilename

#+BIBLIOGRAPHY: classics plain