Exportación de orgmode: cómo evitar una nueva línea para líneas de comentarios

16

Actualmente mi orgmode (v8.3.4), al exportar a LaTeX (y tal vez a otros formatos pero no lo he verificado), genera una nueva línea para una línea de comentario o un bloque de líneas de comentario consecutivas. Esto no es deseable porque en LaTeX, eso creará un nuevo párrafo. Cuando escribo, a menudo necesito comentar una o dos líneas en el medio de un párrafo, pero no quiero dividir ese párrafo en dos. Actualmente, debido a este comportamiento de orgmode, tengo que mover esas líneas comentadas después del párrafo, lo que puede ser confuso cuando reviso el texto.

A continuación se muestra un ejemplo mínimo. La fuente de orgmode es:

First sentence.
# Commented sentence.
Last sentence.

que se exporta a LaTeX por orgmode como (omitiendo el preámbulo):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Hay una línea vacía entre la primera y la última oración, que da como resultado dos párrafos en lugar de uno.

¿Hay alguna forma de detener este comportamiento de orgmode? Una línea de comentario, o un bloque de líneas de comentario, debe exportarse a 0 bytes / carácter, ni siquiera a una nueva línea. Este es el comportamiento de LaTeX cuando procesa comentarios.

Truong
fuente
3
Supongo que esto es un error en el modo org. Puede valer la pena discutir esto en la lista de correo del modo org .
ph0t0nix
1
Como uno de los principales desarrolladores de modo de organización, Nicolas Goaziou confirmó, se espera este comportamiento, no un error .
Kaushal Modi
ambas soluciones anteriores funcionan # comments, pero desafortunadamente ninguna funciona para # + BEGIN_COMMENT comentarios # + END_COMMENT se inserta una nueva línea en la exportación de LaTeX en el lugar donde estaba el comentario del bloque ... ¿hay alguna manera fácil de solucionarlo? EDIT (infierno sí, existe): Basado en la respuesta proporcionada por @ John, las siguientes obras, tanto para el # commentsy para los #+BEGIN_COMMENTbloques: (defun delete-org-comentarios (back-end) (bucle para comentarios en (inversa (Org- element-map (identidad de 'comentario' org-element-parse-buffer)) do (setf (substring-buffer (propiedad-elemento-org: comenzar comentario)
usuario2016854

Respuestas:

4

Intenta algo como esto. Coloque este bloque de código en su documento y ejecútelo. LaTeX estará en un búfer Exportación de LATEX Org .

* build :noexport:
#+BEGIN_SRC emacs-lisp
(defun delete-org-comments (backend)
  (loop for comment in (reverse (org-element-map (org-element-parse-buffer)
                    'comment 'identity))
    do
    (setf (buffer-substring (org-element-property :begin comment)
                (org-element-property :end comment))
          "")))

(let ((org-export-before-processing-hook '(delete-org-comments)))
  (switch-to-buffer (org-latex-export-as-latex)))
#+END_SRC
John Kitchin
fuente
0

Sobre la base de la respuesta de John, aquí hay una función alternativa que usa org-element-extract-elementy org-element-interpret-data:

(defun delete-org-comments (backend)
  (let ((tree (org-element-parse-buffer)))
    (org-element-map tree 'comment #'org-element-extract-element)
    (erase-buffer)
    (insert (org-element-interpret-data tree))))

La org-elementAPI no es particularmente obvia, pero es poderosa: solo tiene que explorarla un poco por su cuenta. :) Por supuesto, John's es probablemente más rápido para documentos grandes, ya que solo modifica el búfer en lugar de volver a interpretar el árbol en una cadena.

Blujay
fuente