Експорт Orgmode: як запобігти новому рядку для рядків коментарів


16

Наразі мій органмод (v8.3.4) при експорті до LaTeX (і, можливо, інших форматів, але я не перевірив), створює новий рядок для рядка коментарів або блоку послідовних рядків коментарів. Це небажано, оскільки в LaTeX це створить новий абзац. Коли я пишу, мені часто потрібно коментувати рядок або два в середині абзацу, але не хочу розділяти цей абзац на два. Наразі через таку поведінку оргаму я повинен перемістити ті коментовані рядки до абзацу, який може бути заплутаним під час перегляду тексту.

Нижче наведено мінімальний приклад. Джерелом органоди є:

First sentence.
# Commented sentence.
Last sentence.

який експортується в LaTeX органом як (пропускаючи преамбулу):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Між першим і останнім реченням є порожній рядок, в результаті чого замість одного є два абзаци.

Чи є спосіб зупинити таку поведінку оргамоди? Рядок коментарів або блок рядків коментарів слід експортувати в 0 байт / символ, навіть не новий рядок. Така поведінка LaTeX при обробці коментарів.


3
Я думаю, що це помилка в org-режимі. Можливо, варто обговорити це у списку розсилки в режимі org .
ph0t0nix

1
Як підтвердив Ніколас Гоаціоу, один із головних розробників режиму організації, така поведінка очікується, а не помилка .
Каушал Моді

обидва вищезазначені рішення працюють # comments, але, на жаль, жодне не працює для # + коментарів BEGIN_COMMENT # + END_COMMENT, новий експорт вставляється в експорт LaTeX в тому місці, де був присутній коментар до блоку ... чи є простий спосіб це виправити? EDIT (пекло, так, є): Виходячи з відповіді, наданої @John, такі блоки # commentsі для #+BEGIN_COMMENTблоків, і для них : (defun delete-org-comments (бекенд)) (цикл для коментарів у (зворотний (org- element-map (org-element-parse-buffer) 'comment' ідентичність)) do (setf (buffer-substring (org-element-property: begin comment))
користувач2016854

Відповіді:


4

Спробуйте щось подібне. Помістіть цей код коду у свій документ та запустіть його. LaTeX буде в буфері 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

0

Спираючись на відповідь Джона, ось альтернативна функція, яка використовує org-element-extract-elementта 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 не дуже очевидний, але потужний - ви просто повинні вивчити його трохи на свій розсуд. :) Звичайно, Джон, ймовірно, швидший для великих документів, оскільки він просто модифікує буфер, а не повторно інтерпретувати дерево в рядок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.