2012-02-03 16 views
9

Cuando se utiliza Org-mode y su exportación de LaTeX, BibTeX o Biblatex se utilizan a menudo para manejar referencias. En ese caso, el comando LaTeX \printbibliography a menudo se incluye en el archivo org. \printbibliography se coloca en el archivo org donde se supone que LaTeX escribe la lista de referencias. Lo que \printbibliography hace es insertar un encabezado LaTeX junto con la lista de referencias. En la mayoría de los casos, \printbibliography se coloca al final del archivo org simplemente porque en la mayoría de los documentos la lista de referencias debe colocarse en último lugar. Esto significa que \printbibliography se incluirá en el último encabezado del archivo org, p.Evite printbibliography tragado por encabezados de modo Org

* Heading 

    \printbibliography 

También significa que cuando se pliega dicha partida del \printbibliography será tragada:

* Heading... 

Pero esto va en contra del sentido de \printbibliography porque incluye su propia cabecera de la salida. Además, será confuso cuando se trague \printbibliography y se coloque un nuevo encabezado después de él porque entonces la lista de referencia ya no aparecerá en el último lugar del documento.

¿Cómo puedo hacer para que \printbibliography no sea ingerido por secciones en el modo Org? Una pregunta adicional: ¿cómo puedo hacerlo para que Org-mode no cree encabezados después de \printbibliography a menos que se presione C-Ret cuando el cursor está detrás de él?

En la búsqueda de una solución a este problema encontré http://comments.gmane.org/gmane.emacs.orgmode/49545.

Respuesta

1

Lo siguiente está ligeramente probado, pero funciona para mí usando la pestaña y la tecla Mayús para ocultar y mostrar cosas. Esos son los únicos comandos de ocultación y presentación que uso, por lo que si usa otros comandos, es posible que deban avisarlos o corregirlos de alguna otra manera.

Por supuesto, puede cambiar org-footer-regexp a cualquier cosa que desee. Esperaba no tener que usar ningún consejo, pero sin avisar org-end-of-subtree el último encabezado nunca cicla con pestaña porque cree que no está oculto, por lo que lo oculta y luego org-cycle-hook lo muestra. Llama al org-end-of-subtree antes de ejecutar org-pre-cycle-hook, por lo que tampoco es una opción.

(defvar org-footer-regexp "^\\\\printbibliography\\[.*\\]$" 
    "Regexp to match the whole line of the first line of the footer which should always be shown.") 

(defun show-org-footer (&rest ignore) 
    (save-excursion 
    (goto-char (point-max)) 
    (when (re-search-backward org-footer-regexp nil t) 
     (outline-flag-region (1- (point)) (point-max) nil)))) 

(add-hook 'org-cycle-hook 'show-org-footer) 
(add-hook 'org-occur-hook 'show-org-footer) 

(defadvice org-end-of-subtree (after always-show-org-footer 
            () 
            activate) 
    (when (>= (point) (1- (point-max))) 
    (re-search-backward org-footer-regexp nil t) 
    (setq ad-return-value (point)))) 
+0

This parece funcionar para mí también para tab y shift-tab. Sí, como implica, no funciona con árboles dispersos. ¿Se puede hacer que funcione con árboles dispersos? –

+0

Sí, parece que agregarlo a 'org-occur-hook' hace el truco. –

+0

Como puede leer en [el manual de biblatex] (http://mirror.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf) '\ printbibliography' toma argumentos con el formato' \ printbibliography [key = valor, ...] 'y, por lo tanto, para que su respuesta sea aún mejor, es posible que desee editar' org-footer-regexp' para permitir que '\ printbibliography' sea seguido por' [', any characters,'] '. –

1

Una solución sería la siguiente:

#+macro: printbiblio  (add extra spaces here, but cannot add comment) 

* Test 2 
    This is a test 

* {{{printbiblio}}} 
    Test text 
    \printbibliography 
* 
    asdf 

como no se termina con un encabezado en blanco al final del documento. La macro se expande a un bloque de texto en blanco de lo que terminan con

\section{Test 2} 
\label{sec-1} 

This is a test 
\section{} 

Test text 
\printbibliography 
\section{} 

asdf 

Esto también asegura que no se puede agregar accidentalmente titulares después de su bibliografía, ya que es su propio título (vacío). Puede ser (parece estar realmente) incluido en la tabla de contenido, lo cual es desafortunado, pero sospecho que la solución sería, en el peor de los casos, ejecutar una post-exportación para eliminar el título vacío del archivo (o hacerlo manualmente antes de convertirlo a PDF).

+1

Con esto, como nota, '* {{{printbiblio}}}' se convierte en '\ section {}' y '*' se convierte en '\ section {}'. LaTeX trata '\ section' con un argumento vacío como una sección, y así su caso de prueba produce una sección sin nombre antes de' \ printbibliography' y una sección sin un nombre después de ella. Lo que me gustaría es que '\ printbibliography' no sea asimilada por un encabezado de organización y esa organización no exporte para que quede bajo un encabezado porque en LaTeX producirá su propio encabezado. –

+0

Esto me dio una idea para la pregunta de @NN sobre los comentarios en línea: http://stackoverflow.com/questions/9212737/how-to-make-inline-comments-in-org-mode/9307681#9307681 Espero que no importa, he votado esta respuesta. –

+0

No hay problema, no había pensado usarlo de esa manera para esa otra pregunta. –

3

Una solución para este problema es hacer \printbibliography no devuelve un encabezamiento LaTeX para que apropiadamente puede colocarse bajo un encabezamiento Org-mode.

Con biblatex esto puede hacerse suministrando \printbibliography con la opción heading=none y colocándolo bajo un título apropiado.Aquí está un ejemplo:

* Heading 

* References 

    \printbibliography[heading=none] 

De esta manera las referencias se pueden mantener en un rumbo de su propia y \printbibliography siendo tragado por un título no es un problema porque está siendo tragado por su propio encabezado.

+0

Tenga en cuenta que si la numeración de secciones está en el encabezado de Referencias también tendrá un número. Escribí una [respuesta] (http://stackoverflow.com/a/27165105/1346426) que maneja también este caso. –

0

Otra solución sería poner la bibliografía en una partida con nombre "Referencias" de este modo:

* Heading 
Some text 
* References 
\printbibliography 

y retire la \section{References} desde el archivo de látex resultante mediante la adición de esto a sus emacs archivo INIT

(defun org-export-latex-remove-references-heading (contents backend info) 
    (if (not (eq backend 'latex)) 
     contents 
     (replace-regexp-in-string "\\\\section\\*?{References}\\s-*\\\\label{.*?}" "" contents) 
    )) 

(add-hook 'org-export-filter-final-output-functions 'org-export-latex-remove-references-heading) 

Tenga en cuenta que esto supone que solo tiene un encabezado que se denomina "Referencias", ya que reemplaza todas las ocurrencias de la misma. También asume las secciones están en este formato:

\section{References} 
\label{<any_string>} 
\printbibliography 

Para otros formatos Es necesario cambiar la expresión regular en la función org-export-latex-remove-references-heading.

0
* References 
    :PROPERTIES: 
    :UNNUMBERED: t 
    :END: 

    \printbibliography[heading=none] 

Existe una manera más fácil de resolver esto. Solo agrega propiedades "sin numerar" al encabezado y se exportará sin numeración.

Cuestiones relacionadas