Emacs: объединение ссылок между html и latex в режиме org - PullRequest
20 голосов
/ 01 сентября 2011

Как настроить режим org, чтобы он мог включать в себя результат из \cite LaTeX в экспорте HTML?

Пример:

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 ]

11 голосов
/ 07 сентября 2011

Пакет для режима org org-exp-bibtex.el создает библиографию HTML с использованием bibtex2html , а затем преобразует команды цитирования в ссылки на элементы библиографии при экспорте вHTML.Есть некоторая документация в org-exp-bibtex.el.

Я включу некоторую дополнительную информацию, которая помогла мне заставить эту функцию работать в моей системе.Файл org-exp-bibtex.el, похоже, поставляется с последними версиями режима org.Так что экспорт может сработать, если вы оцените (require 'org-exp-bibtex), например, поместив его в ~/.emacs, а затем поместите что-то вроде #+BIBLIOGRAPHY: classics plain в исходный файл вместо ваших команд LaTeX \bibliographystyle и \bibliography.Я обнаружил, что для моей системы был необходим следующий патч org-exp-bibtex.el.

--- /usr/share/emacs/site-lisp/org_contrib/lisp/org-exp-bibtex.el   2011-08-09  7:39:35.000000000 -0500
+++ /home/who/.emacs.d/site-lisp/org-exp-bibtex.el  2011-09-06 20:34:55.000000000 -0500
@@ -56,6 +56,7 @@
 ;; 2) creates a foo.html and foo_bib.html
 ;; 3) includes the contents of foo.html in the exported html file

+(require 'cl)
 (require 'org)
 (require 'org-exp)

@@ -90,11 +91,13 @@
        (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 (copy-alist process-environment)))
+              (setenv "TMPDIR" ".")
+             (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)))

Первое изменение поможет, если вы получите сообщение об ошибке «Определение функции Symbol void: flet», я узнал здесь .Второе изменение просто вызывает bibtex2html с TMPDIR, установленным в текущий каталог.Домашняя страница bibtex2html предлагает такой обходной путь для проблемы, с которой bibtex2html сталкивается в некоторых установках TeX.

3 голосов
/ 04 ноября 2014

Внесенный пакет, упомянутый в ответе e3bo, изменил свое имя на ox-bibtex.el (см. Также его запись в списке отправленных пакетов режима Org ). Использование остается прежним. Однако теперь строка, вставленная в ~/.emacs, должна быть (require 'ox-bibtex).

3 голосов
/ 06 января 2013

Ответ e3bo превосходен и охватывает все, что требует оригинальный вопрос.Я, однако, не смог получить желаемые результаты из размещенного патча.Я получаю ошибку Args out of range, отмеченную Антоном в комментариях к ответу e3bo.Ниже приведена другая реализация патча e3bo, основанная на одном из ответов на отдельный, не связанный с этим вопрос о SO .Я не могу сказать, что знаю, почему этот патч работает на меня, а 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)))
1 голос
/ 20 февраля 2013

В последнее время появилась поддержка ebib в режиме org, которая работает по крайней мере с его версией для разработчиков на момент написания этого ответа.

Шаги:

  1. убедитесь, что ebib-preload-bib-файлы правильно установлены в вашем документе, чтобы ваш .bib-файл загружался ebib при запуске ebib

  2. добавить следующее к вашему .emacs: (org-add-link-type "ebib" 'ebib)

  3. вставьте ссылки ebib в свои документы следующим образом: [ebib:Jones1998][some paper title]

0 голосов
/ 19 июня 2017

Если у вас есть проблемы с bibtex2html. Проверьте документ ox.bibtex.el . В частности

#+BIBLIOGRAPHY: bibfilename stylename optional-options

Как и в ответе e3bo, я ожидаю, что classic не входит в число bibfilename большинства людей

#+BIBLIOGRAPHY: classics plain
...