Esportazione Orgmode: come impedire una nuova riga per le righe di commento


16

Attualmente il mio orgmode (v8.3.4), durante l'esportazione in LaTeX (e forse altri formati ma non ho controllato), genera una nuova riga per una riga di commento o un blocco di righe di commento consecutive. Questo è indesiderabile perché in LaTeX, ciò creerà un nuovo paragrafo. Quando scrivo, spesso ho bisogno di commentare una o due righe nel mezzo di un paragrafo, ma non voglio dividere quel paragrafo in due. Attualmente, a causa di questo comportamento di orgmode, devo spostare quelle righe commentate dopo il paragrafo, il che può essere fonte di confusione quando rivedo il testo.

Di seguito è riportato un esempio minimo. La fonte orgmode è:

First sentence.
# Commented sentence.
Last sentence.

che viene esportato in LaTeX da orgmode come (omettendo il preambolo):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

C'è una linea vuota tra la prima e l'ultima frase, che risulta in due paragrafi anziché in uno.

C'è un modo per fermare questo comportamento di orgmode? Una riga di commento, o un blocco di righe di commento, deve essere esportata su 0 byte / carattere, nemmeno una nuova riga. Questo è il comportamento di LaTeX durante l'elaborazione dei commenti.


3
Immagino che questo sia un bug in modalità org. Potrebbe valere la pena discuterne sulla mailing list in modalità org .
ph0t0nix,

1
Come uno dei principali sviluppatori della modalità org, Nicolas Goaziou ha confermato, questo comportamento è previsto, non un bug .
Kaushal Modi,

entrambe le soluzioni sopra funzionano per # comments, ma sfortunatamente nessuna funziona per # + BEGIN_COMMENT commenti # + END_COMMENT viene inserita una nuova riga nell'esportazione LaTeX nel luogo in cui era presente il commento sul blocco ... esiste un modo semplice per risolverlo? EDIT (hell-yeah, c'è): in base alla risposta fornita da @John, il seguente funziona sia # commentsper i #+BEGIN_COMMENTblocchi sia per i blocchi: (defun delete-org-commenti (backend) (loop per commento in (reverse (org- element-map (org-element-parse-buffer) 'comment' identity)) do (setf (buffer-substring (org-element-property: inizia il commento)
user2016854

Risposte:


4

Prova qualcosa del genere. Inserire questo blocco di codice nel documento ed eseguirlo. LaTeX si troverà in un buffer LATEX Export dell'organizzazione .

* 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

0

Sulla base della risposta di John, ecco una funzione alternativa che utilizza org-element-extract-elemente 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 non è particolarmente ovvia, ma è potente: devi solo esplorarla un po 'da sola. :) Naturalmente, John's è probabilmente più veloce per documenti di grandi dimensioni poiché modifica semplicemente il buffer invece di reinterpretare l'albero in una stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.