Экспорт в Orgmode: как запретить новую строку для строк комментариев

16

В настоящее время мой orgmode (v8.3.4) при экспорте в LaTeX (и, возможно, в другие форматы, но я не проверял) генерирует новую строку для строки комментария или блока последовательных строк комментария. Это нежелательно, потому что в LaTeX это создаст новый абзац. Когда я пишу, мне часто нужно комментировать одну или две строки в середине абзаца, но я не хочу разбивать этот абзац на две части. В настоящее время из-за такого поведения orgmode я вынужден переместить эти строки комментариев после абзаца, что может привести к путанице при пересмотре текста.

Ниже приведен минимальный пример. Источник orgmode:

First sentence.
# Commented sentence.
Last sentence.

который экспортируется в LaTeX с помощью orgmode как (без преамбулы):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

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

Есть ли способ остановить это поведение orgmode? Строка комментария или блок строк комментария должны быть экспортированы в 0 байт / символ, даже не в новую строку. Это поведение LaTeX при обработке комментариев.

Чыонг
источник
3
Я думаю, это ошибка в режиме орг. Возможно, стоит обсудить это в списке рассылки org-mode .
ph0t0nix
1
Николас Гоазиу (Nicolas Goaziou) подтвердил, что в качестве одного из главных разработчиков режима орг это поведение не является ошибкой .
Каушал Моди
оба вышеупомянутых решения работают # comments, но, к сожалению, ни одно не работает для # + BEGIN_COMMENT comments # + END_COMMENT новая строка вставляется в экспорт LaTeX в место, где присутствовал комментарий блока ... есть ли какой-нибудь простой способ исправить это? РЕДАКТИРОВАТЬ (черт возьми, да, есть): На основании ответа, предоставленного @John, # commentsдля #+BEGIN_COMMENTблоков и для блоков работает следующее: (defun delete-org-comments (backend) (цикл для комментариев в (обратный (org- element-map (org-element-parse-buffer) идентичность 'comment')) do (setf (buffer-substring (org-element-property: begin comment))
user2016854

Ответы:

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 не особенно очевиден, но мощный - вы просто должны изучить его немного по своему усмотрению. :) Конечно, John's, вероятно, быстрее для больших документов, поскольку он просто изменяет буфер, а не интерпретирует дерево в строку.

blujay
источник