Xuất Orgmode: cách ngăn dòng mới cho dòng nhận xét


16

Hiện tại orgmode của tôi (v8.3.4), khi xuất sang LaTeX (và có thể các định dạng khác nhưng tôi chưa kiểm tra), tạo một dòng mới cho một dòng nhận xét hoặc một khối các dòng nhận xét liên tiếp. Điều này là không mong muốn vì trong LaTeX, điều đó sẽ tạo ra một đoạn mới. Khi tôi viết, tôi thường cần bình luận một hoặc hai dòng ở giữa một đoạn nhưng không muốn chia đoạn đó thành hai. Hiện tại, vì hành vi này của orgmode, tôi phải chuyển các dòng nhận xét đó sang sau đoạn văn, điều này có thể gây nhầm lẫn khi tôi sửa lại văn bản.

Dưới đây là một ví dụ tối thiểu. Nguồn orgmode là:

First sentence.
# Commented sentence.
Last sentence.

được xuất sang LaTeX bằng orgmode dưới dạng (bỏ qua phần mở đầu):

\begin{document}
\tableofcontents

First sentence.

Last sentence.
\end{document}

Có một dòng trống giữa câu đầu tiên và câu cuối, kết quả là hai đoạn thay vì một đoạn.

Có cách nào để ngăn chặn hành vi này của orgmode không? Một dòng bình luận, hoặc một khối các dòng bình luận, nên được xuất thành 0 byte / ký tự, thậm chí không phải là một dòng mới. Đây là hành vi của LaTeX khi xử lý bình luận.


3
Tôi đoán đây là một lỗi trong chế độ org. Có thể đáng để thảo luận về điều này trong danh sách gửi thư ở chế độ org .
ph0t0nix

1
Là một trong những nhà phát triển chế độ org chính, Nicolas Goaziou xác nhận, hành vi này được mong đợi, không phải là một lỗi .
Kaushal Modi

cả hai giải pháp trên đều hoạt động # comments, nhưng thật không may, không có giải pháp nào cho # + BEGIN_COMMENT nhận xét # + END_COMMENT một dòng mới được chèn vào xuất LaTeX ở nơi có bình luận khối ... có cách nào dễ khắc phục không? EDIT (hell-yeah, there): Dựa trên câu trả lời được cung cấp bởi @John, các công việc sau đây cho cả khối # commentsvà cho các #+BEGIN_COMMENTkhối: (defun xóa-org-bình luận (phụ trợ) (vòng lặp để nhận xét trong (đảo ngược (org-) phần tử-map (org-Element-parse-buffer) 'comment' nhận dạng)) do (setf (bộ đệm-chuỗi con (org-Element-property: bắt đầu nhận xét)
user2016854

Câu trả lời:


4

Hãy thử một cái gì đó như thế này. Đặt khối mã này trong tài liệu của bạn và chạy nó. LaTeX sẽ nằm trong bộ đệm 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

Dựa trên câu trả lời của John, đây là một chức năng thay thế sử dụng org-element-extract-elementorg-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))))

Các org-elementAPI không phải là đặc biệt rõ ràng, nhưng nó là mạnh mẽ - bạn chỉ phải khám phá nó một chút trên của riêng bạn. :) Tất nhiên, John's có thể nhanh hơn đối với các tài liệu lớn vì nó chỉ sửa đổi bộ đệm thay vì diễn giải lại cây thành một chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.