Orgmode-Export: So verhindern Sie eine neue Zeile für Kommentarzeilen

16

Derzeit generiert mein Orgmode (v8.3.4) beim Exportieren nach LaTeX (und möglicherweise in anderen Formaten, die ich jedoch nicht überprüft habe) eine neue Zeile für eine Kommentarzeile oder einen Block aufeinanderfolgender Kommentarzeilen. Dies ist unerwünscht, da in LaTeX ein neuer Absatz erstellt wird. Wenn ich schreibe, muss ich oft ein oder zwei Zeilen in der Mitte eines Absatzes kommentieren, möchte diesen Absatz aber nicht in zwei Teile teilen. Derzeit muss ich aufgrund dieses Verhaltens von orgmode diese kommentierten Zeilen nach dem Absatz verschieben, was bei der Überarbeitung des Textes verwirrend sein kann.

Unten ist ein minimales Beispiel. Die Orgmode-Quelle ist:

First sentence.
# Commented sentence.
Last sentence.

das von orgmode as nach LaTeX exportiert wird (ohne Präambel):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Zwischen dem ersten und dem letzten Satz befindet sich eine leere Zeile, die zwei Absätze anstelle von einem ergibt.

Gibt es eine Möglichkeit, dieses Verhalten von orgmode zu stoppen? Eine Kommentarzeile oder ein Block von Kommentarzeilen sollte nach 0 Byte / Zeichen exportiert werden, nicht einmal nach einer neuen Zeile. Dies ist das Verhalten von LaTeX beim Verarbeiten von Kommentaren.

Truong
quelle
3
Ich denke, das ist ein Fehler im Org-Modus. Es kann sich lohnen, dies auf der Mailingliste im Organisationsmodus zu besprechen .
ph0t0nix
1
Nicolas Goaziou, einer der wichtigsten Entwickler des Org-Modus, bestätigte, dass dieses Verhalten erwartet wird, kein Fehler .
Kaushal Modi
Beide der oben genannten Lösungen funktionieren # comments, aber leider funktioniert keine für # + BEGIN_COMMENT Kommentare # + END_COMMENT Eine neue Zeile wird in den LaTeX-Export an der Stelle eingefügt, an der der Blockkommentar vorhanden war. EDIT (hell-yeah, gibt es): Basierend auf der Antwort von @John funktioniert Folgendes sowohl für die # commentsals auch für die #+BEGIN_COMMENTBlöcke: (defun delete-org-comments (backend) (Schleife für Kommentar in (reverse (org- Element-Map (org-Element-Analyse-Puffer) 'Kommentar'-Identität)) do (setf (Puffer-Teilzeichenfolge (org-Element-Eigenschaft: Kommentar beginnen)
user2016854

Antworten:

4

Versuchen Sie so etwas. Fügen Sie diesen Codeblock in Ihr Dokument ein und führen Sie ihn aus. Das LaTeX befindet sich in einem Puffer 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
quelle
0

Aufbauend auf Johns Antwort, hier ist eine alternative Funktion , dass Anwendungen org-element-extract-elementund 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))))

Die org-elementAPI ist nicht besonders offensichtlich, aber leistungsstark - Sie müssen sie nur ein wenig selbst erkunden. :) Natürlich ist Johns wahrscheinlich schneller für große Dokumente, da nur der Puffer geändert wird, anstatt den Baum in eine Zeichenfolge umzuinterpretieren.

blujay
quelle