Carga del archivo bibtex en el archivo de modo org


15

Estoy tratando de usar org-modepara hacer casi todo. En mi actividad de escritura científica, me gustaría dibujar un artículo completo en un .orgarchivo y luego exportarlo en LaTeX. No quiero cargar el .bibarchivo bibtex en el, init.elya que podría tener varios. Por ahora, he agregado esto al principio de mi .orgarchivo:

#+BEGIN_SRC elisp
(setq reftex-default-bibliography '("./references.bib"))
#+END_SRC

Pero tengo que ejecutarlo manualmente cada vez. ¿Hay alguna manera de hacerlo automático? Lo óptimo sería tener una directiva al comienzo de cada .orgarchivo que diga emacs: "ok, ahora debes cargar este .bib archivo". Alguna pista? Gracias.


¿Una variable local de archivo no funcionaría? Por ejemploM-x add-file-local-variable
olaf b

Gracias por responder. Desafortunadamente, no es lo que estoy buscando. De esta manera, cada vez que cargo el archivo necesito escribir el comando. Algo lile #+STARTUP: do this.
Petrux

Cual comando? Solo tiene que establecer la variable local del archivo una vez.
olaf b

¡Usted tenía razón! Usando add-file-local-variable-prop-lineI podría generar la # -*- reftex-default-bibliography: ("./references.bib"); -*-línea al comienzo del archivo.
Petrux

Respuestas:


19

Agregar una línea como la siguiente es suficiente para indicar org-modequé .bibarchivo consultar:

#+BIBLIOGRAPHY: refs plain

refses el nombre del archivo BibTeX (se .bibomite la extensión) y plaines el bibliographystyle.

Luego puede llamar org-reftex-citation(vinculado C-c C-x [de forma predeterminada) para insertar referencias.

De la documentación:

(org-reftex-citation)

Use reftex-citationpara insertar una cita en el búfer. Esto busca una línea como

#+BIBLIOGRAPHY: foo plain option:-d

y deriva de ello que foo.bibes el archivo de bibliografía relevante para este documento. Luego instala el entorno necesario para que RefTeX funcione en este búfer y llama reftex-citationpara insertar una cita en el búfer.

ox-bibtexTaru Karttunen maneja la exportación de tales citas a LaTeX y HTML .

Como sugiere la última oración, deberá agregar

(require 'org)
(require 'ox-bibtex)

a su archivo init para asegurarse de que las referencias se exporten a LaTeX correctamente. Cuando configuré esto por mí mismo, descubrí que también necesitaba personalizarlo org-latex-pdf-processpara que las exportaciones de PDF funcionaran:

(setq org-latex-pdf-process '("texi2dvi -p -b -V %f"))

Apéndice

Si no desea utilizar el enlace predeterminado para org-reftex-citation, puede configurar un enlace de clave personalizado para él. Por ejemplo, lo siguiente se une org-reftex-citational enlace predeterminado para reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)

Gracias por la respuesta. No lo estoy marcando como correcto solo porque veo el uso de # -*- reftex-default-bibliography: ("./references.bib"); -*-equivalentes, con la ventaja de que puedo usar el enlace de teclas RefTeX habitual para agregar una nueva referencia. ¿Me estoy perdiendo de algo? ¿Vamos a editar la respuesta para que sea más completa para cualquier futuro lector? Gracias.
Petrux

@petrux Puede unirse org-reftex-citationa la misma secuencia de teclas que reftex-citationnormalmente usa ... Vea las actualizaciones de mi respuesta.
itsjeyd

Supongo que no hay forma de usar múltiples archivos de bibliografía con org-reftex-citation? Si agrego un segundo #+BIBLIOGRAPHY, entonces el primero parece ser ignorado.
Brian Z

@BrianZ No creo que el caso de uso que describas sea compatible de inmediato. ¿Pero tal vez alguien aquí tiene una solución enrollada a mano? Si fuera usted, haría una nueva pregunta (señalando este hilo como referencia); definitivamente suena como algo en lo que otros podrían estar interesados ​​también.
itsjeyd

1
Evaluar (setq reftex-default-bibliography '("./a.bib" "./b.bib"))parece hacer el truco. También lo hace # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, aunque arroja una advertencia de que esta variable no debe definirse localmente.
Brian Z

4

Parece que ox-bibtex no está incluido en el último paquete de organización (8.2.10-34-gc41bbc-elpa). Así que lo busqué en línea y lo puse en el directorio / org / lisp / una vez descargado. Pero me encontré con el siguiente error al intentar hacer una exportación que involucra algún bibtex.

La definición de la función del símbolo es nula: org-element-insert-before

Luego verifico el archivo 'org-element.el', por supuesto, no existe tal función predefinida. ¿Pero por qué no está ahí? El documento API en línea de org-element lo mencionó en una vez .

Así que supongo que actualmente es imposible usar RefTeX como se describe en el documento, a menos que esté dispuesto a cambiar a la versión beta o alguna anterior. Ver

Aquí comparto mi manera de usar la versión beta

  1. git clone git://orgmode.org/org-mode.git

  2. Mueve la carpeta ~/.emacs.d/y nómbrala comoorg-beta

  3. Modifique load-path, deje que la versión beta sombree otra versión e incluya el directorio de contribución del usuario

    (add-to-list 'load-path (expand-file-name "org-beta\\lisp" user-emacs-directory))

    (add-to-list 'load-path (expand-file-name "org-beta\\org-contrib\\lisp" user-emacs-directory))

(opcional) puede usar el comando make para compilar el archivo fuente y compilar el documento

  1. Ahora puedes (require 'ox-bibtex). Prefiero escribir así:(eval-after-load 'org (require 'ox-bibtex))

  2. Para generar una lista de referencia en el lugar correcto, coloque algo parecido #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dal final del archivo de organización. Más opciones, consulte el documento de ayuda enox-bibtex.el

  3. Para que la parte de exportación HTML funcione correctamente, es posible que necesite la última bibtex2html, es decir, 1.98. Para compilarlo desde el código fuente, descárguelo de github y siga las instrucciones del documento de ayuda 'README'.

Si está utilizando ventanas como yo, use Cygwin64 con todos los paquetes de desarrollo. Usando Cygwin64, cd al directorio de bibtex2html, y escriba ./configure, wait finish, luego escriba make, wait finish. Ahora en este directorio, obtendrá bib2bib.exe, bibtex2html.exey aux2bib. Cópielos en algún directorio en su entorno var PATH. Pruébelo escribiendo bibtex2htmlel cmd.

Tengo que hacer el trabajo anterior porque uso texlive2014. Si usted es un usuario de miktek, bibtex2html 1.95 puede funcionar bien, lo que se puede instalar fácilmente con un instalador de Windows.

  1. Para que la parte de exportación de PDF funcione correctamente, use el siguiente código para inicializar su modo de organización:

    (setq org-latex-pdf-process
          '("xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "bibtex %b"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
    

Es la parte 'bibtex' que hace el trabajo. Uso el comando de escape de shell para el paquete de látex acuñado.


Me parece que su respuesta solo está relacionada con la pregunta en el sentido de que también se trata de org-mode y ox-bibtex. Dado que su problema es diferente, es mejor si abre una pregunta separada donde otros pueden proporcionar respuestas específicas.
pimentón

1
Solo quiero hacer un complemento a la respuesta de itsjeyd. itsjeyd sugiere seguir el documento de org-reftex-citation. Lo hice, y obtuve el problema anterior. En caso de que otras personas se encuentren en la misma situación, compartí mi investigación aquí.
empenguin

IIRC, el paquete ELPA de org-mode no incluye los archivos bajo contrib/lisp, que incluyen ox-bibtex. Por lo que tendría que instalar org-mode de la fuente incluyendo contrib/lisp o simplemente copiar ox-bibtex.ela su load-path.
pimentón

1
Si. Clono la versión beta de org. Ahora funciona bien.
empenguin

55
@paprika No es necesario instalar org-modedesde la fuente para obtener el contribdirectorio. Como se explica aquí , Org tiene su propio archivo ELPA. Todo lo que necesita hacer es agregar ese archivo a package-archives; luego puede instalar (y actualizar) org-plus-contribusando el administrador de paquetes. Por supuesto, esto no quiere decir que el enfoque que sugiera no funcione; Solo quería mencionar (para cualquier otra persona que se encuentre con esta discusión) que hay otro enfoque que no implica la sobrecarga de tener que actualizar org-modepor separado git.
itsjeyd
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.