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 โหมดรายการทางไปรษณีย์
ph0t0nix

1
ในฐานะที่เป็นหนึ่งในหลัก devs โหมด org, นิโคลัส Goaziou ยืนยันพฤติกรรมนี้คาดว่าจะไม่ได้เป็นปัญหา
Kaushal Modi

ทั้งสองวิธีข้างต้นใช้งานได้# commentsแต่น่าเสียดายที่ไม่มีการทำงานสำหรับ # + BEGIN_COMMENT ความคิดเห็น # + END_COMMENT บรรทัดใหม่จะถูกแทรกในการส่งออก LaTeX ในตำแหน่งที่มีความคิดเห็นบล็อกอยู่ ... มีวิธีง่าย ๆ ในการแก้ไขไหม แก้ไข (นรกใช่มี): ขึ้นอยู่กับคำตอบที่ได้รับจาก @John การทำงานของต่อไปนี้สำหรับทั้งสอง# commentsและสำหรับ#+BEGIN_COMMENTบล็อก: (defun ลบ-org-ความคิดเห็น (แบ็กเอนด์) (ห่วงสำหรับความคิดเห็นใน (ย้อนกลับ (org- องค์ประกอบแผนที่ (org-element-parse-buffer) ตัวตน 'ความคิดเห็น')) ทำ (setf (บัฟเฟอร์
ซับ

คำตอบ:


4

ลองอะไรเช่นนี้ ใส่บล็อกรหัสนี้ในเอกสารของคุณและเรียกใช้ น้ำยางจะอยู่ในบัฟเฟอร์องค์กรยางส่งออก

* 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

คำตอบของ John ต่อไปนี้เป็นฟังก์ชันทางเลือกที่ใช้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 ไม่ชัดเจนโดยเฉพาะอย่างยิ่ง แต่ก็เป็นที่มีประสิทธิภาพ - คุณเพียงแค่มีการสำรวจมันบิตด้วยตัวคุณเอง :) แน่นอนจอห์นอาจจะเร็วกว่าสำหรับเอกสารขนาดใหญ่เพราะเพียงแค่ปรับเปลี่ยนบัฟเฟอร์แทนที่จะแปลต้นไม้เป็นสตริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.