Exportation en mode org: comment empêcher une nouvelle ligne pour les lignes de commentaire

16

Actuellement, mon orgmode (v8.3.4), lors de l'exportation vers LaTeX (et peut-être d'autres formats mais je n'ai pas vérifié), génère une nouvelle ligne pour une ligne de commentaire ou un bloc de lignes de commentaire consécutives. Ceci n'est pas souhaitable car dans LaTeX, cela créera un nouveau paragraphe. Lorsque j'écris, j'ai souvent besoin de commenter une ligne ou deux au milieu d'un paragraphe, mais je ne veux pas diviser ce paragraphe en deux. Actuellement, en raison de ce comportement d'orgmode, je dois déplacer ces lignes commentées après le paragraphe, ce qui peut être déroutant lorsque je révise le texte.

Voici un exemple minimal. La source orgmode est:

First sentence.
# Commented sentence.
Last sentence.

qui est exporté vers LaTeX par orgmode comme (en omettant le préambule):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Il y a une ligne vide entre la première et la dernière phrase, ce qui donne deux paragraphes au lieu d'un.

Existe-t-il un moyen d'arrêter ce comportement d'orgmode? Une ligne de commentaire, ou un bloc de lignes de commentaire, doit être exporté vers 0 octet / caractère, pas même une nouvelle ligne. C'est le comportement de LaTeX lors du traitement des commentaires.

Truong
la source
3
Je suppose que c'est un bug en mode org. Il peut être utile d'en discuter sur la liste de diffusion en mode org .
ph0t0nix
1
En tant que l'un des principaux développeurs du mode org, a confirmé Nicolas Goaziou, ce comportement est attendu, pas un bug .
Kaushal Modi
les deux solutions ci-dessus fonctionnent # comments, mais malheureusement aucune ne fonctionne pour # + BEGIN_COMMENT commentaires # + END_COMMENT une nouvelle ligne est insérée dans l'export LaTeX à l'endroit où le commentaire de bloc était présent ... existe-t-il un moyen simple de résoudre ce problème? EDIT (enfer-ouais, il y a): Sur la base de la réponse fournie par @John, les travaux suivants fonctionnent à la fois # commentspour et pour les #+BEGIN_COMMENTblocs: (defun delete-org-comments (backend) (boucle pour commentaire dans (reverse (org- element-map (org-element-parse-buffer) identité 'comment')) do (setf (buffer-substring (org-element-property: begin comment)
user2016854

Réponses:

4

Essayez quelque chose comme ça. Placez ce bloc de code dans votre document et exécutez-le. Le LaTeX sera dans un tampon Org LATEX Export .

* 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
la source
0

En s'appuyant sur la réponse de John, voici une fonction alternative qui utilise org-element-extract-elementet 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))))

L' org-elementAPI n'est pas particulièrement évidente, mais elle est puissante - il vous suffit de l'explorer un peu par vous-même. :) Bien sûr, John's est probablement plus rapide pour les documents volumineux car il modifie simplement le tampon au lieu de réinterpréter l'arbre en une chaîne.

blujay
la source