Eksport w trybie Orgmode: jak zapobiec nowej linii dla linii komentarza

16

Obecnie mój tryb org (v8.3.4), podczas eksportowania do LaTeX (i być może w innych formatach, ale jeszcze nie sprawdziłem), generuje nowy wiersz dla linii komentarza lub bloku kolejnych linii komentarza. Jest to niepożądane, ponieważ w LaTeX, który utworzy nowy akapit. Kiedy piszę, często muszę komentować wiersz lub dwa w środku akapitu, ale nie chcę dzielić tego akapitu na dwa. Obecnie, z powodu tego zachowania w trybie org, muszę przenieść te skomentowane wiersze po akapicie, co może być mylące, gdy poprawiam tekst.

Poniżej znajduje się minimalny przykład. Źródło orgmode to:

First sentence.
# Commented sentence.
Last sentence.

który jest eksportowany do LaTeX przez orgmode jako (z pominięciem preambuły):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Pomiędzy pierwszym a ostatnim zdaniem jest pusta linia, co powoduje utworzenie dwóch akapitów zamiast jednego.

Czy jest jakiś sposób, aby zatrzymać to zachowanie w trybie orgmode? Wiersz komentarza lub blok wierszy komentarza należy wyeksportować do 0 bajtów / znaków, nawet nowego wiersza. Takie jest zachowanie LaTeX podczas przetwarzania komentarzy.

Truong
źródło
3
Myślę, że to błąd w trybie org. Warto omówić to na liście mailingowej w trybie org .
ph0t0nix
1
Jak stwierdził jeden z głównych twórców trybu org, Nicolas Goaziou potwierdził, że takie zachowanie jest spodziewane, a nie błąd .
Kaushal Modi
oba powyższe rozwiązania działają # comments, ale niestety żadne nie działa dla # + BEGIN_COMMENT komentarzy # + END_COMMENT nowa linia jest wstawiana do eksportu LaTeX w miejscu, w którym pojawił się komentarz bloku ... czy jest jakiś prosty sposób, aby to naprawić? EDYCJA (piekło-tak, jest): Na podstawie odpowiedzi udzielonej przez @John, następujące działa zarówno # commentsdla #+BEGIN_COMMENTbloków, jak i dla bloków: (defunuje delete-org-comments (backend) (pętla do komentowania (reverse (org- element-map (org-element-parse-buffer) tożsamość „komentarza”) do (setf (substr-buffer (org-element-property: begin comment)
user2016854

Odpowiedzi:

4

Spróbuj czegoś takiego. Umieść ten blok kodu w dokumencie i uruchom go. LaTeX będzie w buforze 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
źródło
0

Opierając się na odpowiedzi Johna, oto alternatywna funkcja, która wykorzystuje org-element-extract-elementi 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))))

org-elementAPI nie jest szczególnie oczywista, ale jest mocny - po prostu trzeba zbadać to trochę na własną rękę. :) Oczywiście John's jest prawdopodobnie szybszy w przypadku dużych dokumentów, ponieważ po prostu modyfikuje bufor zamiast ponownej interpretacji drzewa na ciąg.

blujay
źródło