เป็นไปได้หรือไม่ที่จะส่งออกเนื้อหาย่อยโดยไม่มีหัวเรื่อง?


28

ฉันร่างเอกสารในโหมดองค์กรและส่งออกไปยัง LaTeX, HTML ฯลฯ ตามต้องการ ฉันมักจะใช้แท็ก:no_export:เมื่อใดก็ตามที่ฉันไม่ต้องการทรีย่อยบางอย่างที่จะแสดงในการส่งออก

สิ่งที่ฉันต้องการก็คือต้องการให้การส่งออกละเว้นส่วนหัวย่อยบางอย่างโดยสิ้นเชิงแต่ไม่ต้องสนใจเนื้อหาย่อยของทรีย่อยภายใต้ส่วนหัวนั้น กล่าวอีกนัยหนึ่งทรีย่อยบางอย่างควรส่งออกราวกับว่าเนื้อหาของพวกเขาเป็นเพียงความต่อเนื่องของพาเรนต์แทนที่จะมีทรีย่อยของตัวเอง

:no_title:ฉันนึกคิดจินตนาการแท็กเช่น ฉันต้องการให้เค้าร่างโหมดองค์กรของฉันดูมากกว่าที่ฉันคุ้นเคย แต่ฉันจะพิจารณาวิธีอื่นด้วยผลลัพธ์ที่คล้ายกัน

เพื่อแสดงให้เห็นนี่คือ MWE ของเอกสารร่างในโหมดองค์กร

* Chapter 1
** Section 1
*** Paragraph 1      :no_title:
First paragraph of text in the section.
*** Paragraph 2      :no_title:
Second paragraph of text in the section.
* Chapter 2
** Section 1
*** Subsection 1
**** Paragraph 1      :no_title:
First paragraph of text in the subsection.
**** Paragraph 2      :no_title:
Second paragraph of text in the subsection

เมื่อฉันส่งออกสิ่งนั้นในปัจจุบันฉันได้รับสิ่งนี้:

1 บทที่ 1

1.1 ส่วนที่ 1

1.1.1 ย่อหน้า 1: no_title:

ย่อหน้าแรกของข้อความในส่วน

1.1.2 ย่อหน้า 2: no_title:

ย่อหน้าที่สองของข้อความในส่วน

2 บทที่ 2

2.1 ส่วนที่ 1

2.1.1 ส่วนย่อย 1

◊ 2.1.1.1 ย่อหน้า 1: no_title:

ย่อหน้าแรกของข้อความในส่วนย่อย

แต่สิ่งที่ฉันต้องการมากขึ้นเช่นนี้:

1 บทที่ 1

1.1 ส่วนที่ 1

ย่อหน้าแรกของข้อความในส่วน

ย่อหน้าที่สองของข้อความในส่วน

2 บทที่ 2

2.1 ส่วนที่ 1

2.1.1 ส่วนย่อย 1

ย่อหน้าแรกของข้อความในส่วนย่อย

คำตอบ:


27

นี่อาจเป็นวิธีที่ต้องการ (เนื่องจากความเรียบง่าย) ในการบรรลุเป้าหมายของคุณ - ดูเหมือนว่าจะถูกฝังในความคิดเห็นของคำตอบอื่น:

  1. เพิ่มสิ่งต่อไปนี้ใน.emacsไฟล์ของคุณ:

    (require 'ox-extra)
    (ox-extras-activate '(ignore-headlines))
    
  2. ใช้ignoreแท็กบนหัวข้อที่คุณต้องการละเว้น (ในขณะที่ไม่เพิกเฉยต่อเนื้อหา)

หมายเหตุ:ถ้าคุณใช้ ELPA เพื่อติดตั้งโหมดองค์กรคุณต้องเพิ่มที่เก็บโหมดองค์กรในรายการที่เก็บข้อมูล ELPA ของคุณ ดูที่นี่สำหรับรายละเอียดเพิ่มเติม หลังจากเสร็จสิ้นให้รีเฟรชรายการแพ็กเกจ ( M-x package-refresh-contents) และติดตั้งorg-plus-contribแพ็กเกจ (เช่นพร้อมM-x package-install) อย่าลืมกำจัดการติดตั้งโหมด org เก่า ๆ


2
นี่คือคำตอบที่ถูกต้อง
rasmus

ฉันยอมรับว่านี่เป็นคำตอบแม้ว่ามันจะไม่ได้ผลสำหรับฉัน ฉันพยายามโหลด org-extra.el แต่ฟังก์ชั่นอื่นยังคงหายไป (ฉันติดอยู่กับ Org 8.2.4)
Brian Z

ฉันไม่สามารถหาแพ็คเกจวัว
เอ็กซ์

1
@Toothrot อยู่ในcontrib/lispโฟลเดอร์ - ดูorgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/ox-extra.el - ในไฟล์ config emacs ของคุณคุณอาจต้องเพิ่มบรรทัดเช่น(add-to-list 'load-path "/path/to/contrib/lisp").
ทำเครื่องหมาย

โปรดทราบว่านี่เป็นเพียงคำในองค์กร 8.3+ และคุณไม่สามารถคว้า ox-extra.el ซึ่งมีการอ้างอิง org 8.3+ ขึ้นไป คุณจะได้รับข้อผิดพลาดเกี่ยวกับการส่งออกเกี่ยวกับการไม่สามารถค้นหาไฟล์ที่จำเป็น
Dodgie

16

ใช่มันเป็นไปได้ทั้งหมด เพิ่มรหัสต่อไปนี้ไปยังไฟล์ init ของคุณ:

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

กิตติกรรมประกาศ

มีการถามคำถามนี้ใน StackOverflow มาก่อน (ด้วยการเน้นและข้อความที่แตกต่างกันซึ่งอาจเป็นสาเหตุที่คุณไม่สามารถค้นหาได้เมื่อคุณค้นหาอินเทอร์เน็ตก่อนโพสต์ที่นี่) รหัสข้างต้นเป็นรุ่นที่เรียบง่ายของรหัสในส่วนคำตอบที่ได้รับการยอมรับ ; มันทำงานให้กับผู้ส่งออกใหม่แนะนำในorg-mode8.0 และเป็นแบ็กเอนด์ไม่เชื่อเรื่องพระเจ้า

ปรับปรุง

ตามที่กล่าวไว้ในข้อคิดเห็นรหัสข้างต้นทำให้เนื้อหาของรายการที่ติดแท็กด้วย:no_title:จะหายไปหากพวกเขาถูกนำหน้าด้วยรายการที่ถูกแท็กให้แยกออกจากเอกสารที่ส่งออก ตัวอย่างเช่นการส่งออกเอกสารต่อไปนี้จะสร้างเอกสารที่มีชื่อและ TOC แต่ไม่มีเนื้อหา:

#+EXCLUDE_TAGS: no_export

* No export                          :no_export:
  This is not meant for you to see.
* No title                           :no_title:
  You should see this.

เหตุผลสำหรับสิ่งนี้คือการorg-modeลบข้อความพาดหัวที่ติดแท็กด้วย:no_title:ก่อนที่จะลบรายการที่มีการติดแท็ก:no_export:หัวข้อ ดังนั้นเมื่อมีการลบno_exportรายการจะถือว่าเนื้อหาของno_titleรายการเป็นของno_exportรายการก่อนหน้า สิ่งนี้เหมาะสมอย่างยิ่งเพราะไม่มีองค์ประกอบโครงสร้าง (หัวเรื่อง) ที่แยกเนื้อหาของรายการต้นฉบับอีกต่อไป

เพื่อแก้ปัญหานี้เราสามารถถ่ายโอนความรับผิดชอบสำหรับการลบรายการไปno_export org-remove-headlinesด้วยวิธีนี้เราทำให้แน่ใจว่าno_exportรายการทั้งหมดจะหายไปก่อนที่จะลบหัวข้อข่าวจากno_titleรายการ:

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (let ((beg (point)))
                                (outline-next-visible-heading 1)
                                (backward-char)
                                (delete-region beg (point))))
                   "no_export" tree)
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

ฉันใช้มันเยอะมากขอบคุณมาก! แต่ฉันสังเกตเห็นปัญหา ... หากหัวเรื่องที่ติดแท็กด้วยno_exportหัวเรื่องมาก่อนการติดแท็กด้วยno_titleเนื้อหาของหัวข้อที่สองก็จะไม่ถูกส่งออกเช่นกัน
Brian Z

@BrianZ ยินดีต้อนรับ! เป็นno_exportและno_titleพี่น้องหัว (กล่าวคือพวกเขามีหมายเลขเดียวกันของดาวชั้นนำ)? ถ้าไม่หัวไหนของสองหัวมีดาวมากกว่านี้?
itsjeyd

พวกเขาเป็นพี่น้อง การส่งออกตัวอย่างของเล่นนี้ไม่มีเนื้อหาเลยสำหรับฉัน (แค่ชื่อสารบัญเป็นต้น) pastebin.com/KaiK9qJm
Brian Z

1
@BrianZ โดยตัวมันเองorg-remove-headlinesเป็นเพียงฟังก์ชั่น; มันจะไม่ช่วยคุณมากถ้ามันไม่เคยโทรจากที่ใดก็ได้ ใช่คุณยังต้องประเมินบรรทัด(add-hook 'org-export-before-processing-hook #'org-remove-headlines)เพื่อเปิดใช้งานการทำงานที่ถูกต้อง ฉันควรจะชัดเจนเกี่ยวกับสิ่งนั้นในคำตอบเดิมของฉัน สำหรับคำเตือนที่คุณเห็น: ฉันไม่ได้ใช้ Vanilla Emacs 24.4 และ Org Mode เวอร์ชั่น 8.2.10 เพื่อกำจัดคำเตือนที่คุณพูดถึงคุณสามารถลอง(require 'org-agenda)ก่อนที่จะประเมินadd-hookสาย
itsjeyd

2
คุณลักษณะนี้ยังใช้งานเป็น contrib Ref: orgmode.org/cgit.cgi/org-mode.git/plain/contrib/lisp/ …
rudolfo.christ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.