Org-mode: ไม่รวมหัวข้อเฉพาะจาก TOC เมื่อส่งออก


13

ถาม:ฉันorg-modeจะบอกให้แยกหัวข้อเฉพาะจากสารบัญเมื่อส่งออกได้อย่างไร

ตัวอย่างเช่นการส่งออก

* Headline 1: Put me in TOC
* Headline 2: Put me in TOC
* Headline 3: DO NOT put me in TOC

เพื่อผลิต HTML

...
<div id="text-table-of-contents">
  <ul>
    <li><a href="#sec-1">1. Headline 1: Put me in TOC</a></li>
    <li><a href="#sec-2">2. Headline 2: Put me in TOC</a></li>
    <li><a href="#sec-3">3. Headline 3: DO NOT put me in TOC</a></li>
  </ul>
</div>
...

แต่ฉันต้องการให้มันผลิต

...
<div id="text-table-of-contents">
  <ul>
    <li><a href="#sec-1">1. Headline 1: Put me in TOC</a></li>
    <li><a href="#sec-2">2. Headline 2: Put me in TOC</a></li>
  </ul>
</div>
...

สารบัญส่วนของorg-modeคู่มือไม่ได้มีข้อมูลใด ๆ เกี่ยวกับเรื่องนี้

นอกจากนี้ฉันรู้ว่าฉันสามารถเก็บorg-modeจากการส่งออกพาดหัวข่าวโดยการตั้งค่าCOMMENTคำหลักผ่านC-c ;( org-toggle-comment) :noexport:หรือโดยการติดแท็กพวกเขาด้วย แม้ว่าสิ่งนี้จะป้องกันไม่ให้พาดหัวข่าวที่ได้รับผลกระทบปรากฏขึ้นใน TOC แต่ก็ทำให้เนื้อหาของพวกเขาถูกตัดออกจากเอกสารผลลัพธ์ซึ่งไม่ใช่สิ่งที่ฉันต้องการ


1
นี่ไม่ใช่คำตอบที่คุณกำลังมองหา แต่เพื่อทราบถึงจุดจบอื่น: EXPORT_OPTIONS: toc:nil เกือบจะทำในสิ่งที่คุณต้องการ แต่เฉพาะเมื่อคุณส่งออกเฉพาะทรีย่อยเท่านั้น ในการชี้แจงคุณต้องการให้หมายเลขยังคงมีอยู่หรือคุณต้องการอะไรที่คล้ายกับของ LaTeX \section*หรือไม่
Sean Allred

@ SeanAllred ฉันต้องการให้หมายเลขยังคงมีหมายเลขอยู่ โดยทั่วไปฉันไม่ต้องการเปลี่ยนแปลงอะไรเกี่ยวกับวิธีการส่งออกแต่ละส่วน ฉันแค่ไม่ต้องการให้พวกเขาบางคนปรากฏตัวใน TOC
itsjeyd

คำตอบ:


12

องค์กรใช้org-export-collect-headlinesเพื่อรวบรวมหัวข้อที่ควรอยู่ใน TOC ฟังก์ชั่นนี้อยู่แล้วรวมถึงสองเกณฑ์สำหรับการยกเว้นหัวข้อข่าว: พาดหัวลึกและไม่ว่าจะเป็น "ส่วนเชิงอรรถ" (*) ดังนั้นจึงเป็นเรื่องง่ายที่จะเพิ่มอีกหนึ่ง

ดูรุ่นที่แก้ไขorg-export-collect-headlinesด้านล่าง รุ่นนี้ทำให้สามารถป้องกันไม่ให้พาดหัวแสดงใน TOC โดยการตั้งค่าNOTOCคุณสมบัติ

* Section 1: shows up in the TOC

* Section 2: modified Org code (not in the TOC)
  :PROPERTIES:
  :NOTOC:    t
  :END:

  This is the modified =org-export-collect-headlines=:

  #+BEGIN_SRC elisp
  (defun org-export-collect-headlines (info &optional n)
    "Collect headlines in order to build a table of contents. [...]

  Return a list of all exportable headlines as parsed elements.
  Footnote sections, if any, will be ignored."
    (let ((limit (plist-get info :headline-levels)))
      (setq n (if (wholenump n) (min n limit) limit))
      (org-element-map (plist-get info :parse-tree) 'headline
        #'(lambda (headline)
            (unless (or (org-element-property :NOTOC headline)               ; new condition
                        (org-element-property :footnote-section-p headline)) ; old condition
              (let ((level (org-export-get-relative-level headline info)))
                (and (<= level n) headline))))
        info)))
  #+END_SRC

** Sub-section
   This shows up in the TOC: property inheritance is off by default.

(*) ฉันไม่รู้ว่า "ส่วนเชิงอรรถ" คืออะไร

ใช้งานได้กับแบ็กเอนด์ส่งออกที่สร้าง TOC ด้วยตนเอง แบ็กเอนด์ LaTeX, Beamer และ Texinfo ไม่ได้

ด้วยการเพิ่มคำแนะนำนี้ให้กับorg-export-numbered-headline-pหนึ่งสามารถสร้างหัวข้อด้วยการUNNUMBEREDส่งออกทรัพย์สินเป็น\section*{...}ไม่รวมพวกเขาจาก TOC เมื่อส่งออกไปยัง LaTeX และ Beamer:

(advice-add 'org-export-numbered-headline-p :around
            (lambda (orig headline info)
              (and (funcall orig headline info)
                   (not (org-element-property :UNNUMBERED headline)))))

โปรดทราบว่าตั้งแต่วันที่ 2014-10-03 20:06:34 (GMT) การตรวจสอบของ UNNUMBERED นั้นมีอยู่แล้วภายใน


1
ขอขอบคุณมันใช้งานได้ดีสำหรับการส่งออก HTML ฉันยังต้องการสิ่งนี้เพื่อทำงานกับ LaTeX / Beamer; ฉันไม่ได้พูดถึงเรื่องนี้ในตอนแรกเพราะฉันคิดว่าจะต้องมีวิธีแก้ไขปัญหาทั่วไปที่จะใช้งานได้สำหรับการส่งออกส่วนหลัง (หรืออย่างน้อยที่สุด) ... คุณมีความคิดว่าจะจัดการกับปัญหานี้เพื่อการส่งออก การเปรียบเทียบ.htmlและ.texไฟล์ที่org-modeสร้างขึ้นเมื่อส่งออกปัญหาหลักน่าจะเป็นว่าorg-modeสร้าง TOC ด้วยตนเองสำหรับ HTML แต่เพียงแค่ทิ้งไฟล์ทั่วไป\tableofcontentsลงใน.texไฟล์
itsjeyd

@itsjeyd: ฉันไม่คิดว่าจะมีวิธีแก้ปัญหาทั่วไปที่เป็นไปได้: อย่างที่คุณพูดแบ็กเอนด์การส่งออก LaTeX (และ beamer และ Texinfo) ใช้คำสั่งดั้งเดิมเพื่อสร้าง TOC ในขณะที่แบ็กเอนด์อื่น ๆ สร้าง TOC ด้วยตนเอง มันเป็นไปได้ที่จะไม่รวมส่วนจาก TOC ในน้ำยางแต่ฉันไม่ได้พบวิธีการแก้ปัญหาที่เป็นที่ยอมรับโดยชุมชนเป็นที่หนึ่งที่เหมาะสม การใช้ความคิดผมที่เชื่อมโยงกับในรหัสการส่งออกจะต้องมีการเปลี่ยนแปลงที่สำคัญorg-mode org-latex-headlineสำหรับการนำไปใช้ใน Texinfo ที่ได้รับการสนับสนุนฉันยังไม่รู้ว่าจะเริ่มต้นอย่างไร
Constantine

ตกลงขอบคุณมากสำหรับการติดตาม สำหรับ Beamer ผมคิดว่าผมก็จะหันไปทำส่วนที่ผมไม่ต้องการที่จะแสดงขึ้นใน TOC เลขหมาย ปิดคดี. :)
itsjeyd

@itsjeyd: คุณสามารถปรับเปลี่ยนorg-export-numbered-headline-pเพื่อให้เกิดพฤติกรรมนี้โดยอัตโนมัติ - หากเปลี่ยนเป็นส่วนที่ไม่ได้จัดเรียงเป็นตัวเลือกนั่นคือ ฉันสามารถทำอย่างละเอียดหากคุณสนใจ
Constantine

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