क्या शीर्षकों की सामग्री को उनके शीर्षकों के बिना निर्यात करना संभव है?


28

मैं ओआरजी-मोड में दस्तावेजों का मसौदा तैयार करता हूं और उन्हें आवश्यकतानुसार एलटीटीएक्स, एचटीएमएल आदि को निर्यात करता हूं। :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: no_title:

अनुभाग में पाठ का पहला पैराग्राफ।

1.1.2 पैरा 2: no_title:

अनुभाग में पाठ का दूसरा पैराग्राफ।

२ अध्याय २

२.१ खंड १

२.१.१ उपसर्ग १

◊ 2.1.1.1 अनुच्छेद 1: no_title:

उपधारा में पाठ का पहला पैराग्राफ।

लेकिन मैं जो चाहता हूं वह इस तरह है:

१ अध्याय १

१.१ खंड १

अनुभाग में पाठ का पहला पैराग्राफ।

अनुभाग में पाठ का दूसरा पैराग्राफ।

२ अध्याय २

२.१ खंड १

२.१.१ उपसर्ग १

उपधारा में पाठ का पहला पैराग्राफ।

जवाबों:


27

यह आपके लक्ष्य को पूरा करने का एक पसंदीदा तरीका (इसकी सादगी के कारण) हो सकता है - ऐसा लगता है कि एक और उत्तर की टिप्पणियों में दफन हो गया है:

  1. अपनी .emacsफ़ाइल में निम्न जोड़ें :

    (require 'ox-extra)
    (ox-extras-activate '(ignore-headlines))
    
  2. उस ignoreसुर्खियों पर टैग का उपयोग करें जिसे आप अनदेखा करना चाहते हैं (जबकि उनकी सामग्री को अनदेखा नहीं करते)

नोट: यदि आप org- मोड को स्थापित करने के लिए ELPA का उपयोग कर रहे हैं, तो आपको अपनी ELPA सामग्री की सूची में org-mode रिपॉजिटरी को जोड़ना होगा। अधिक जानकारी के लिए यहां देखें । ऐसा होने के बाद, पैकेज सूची को ताज़ा करें ( M-x package-refresh-contents) और org-plus-contribपैकेज स्थापित करें (जैसे कि M-x package-install)। किसी भी पुराने ऑर्ग-मोड प्रतिष्ठानों से छुटकारा पाने के लिए मत भूलना।


2
यह सही जवाब है।
रासमस

मैंने इसे उत्तर के रूप में स्वीकार किया भले ही यह मेरे लिए काम नहीं करेगा। मैंने org-extra.el को लोड करने की कोशिश की, लेकिन कुछ अन्य फ़ंक्शन अभी भी गायब था (मैं ऑर्ग 8.2.4 के साथ फंस गया हूं)।
ब्रायन जेड

मुझे पैकेज ऑक्स-एक्स्ट्रा नहीं मिला ...
टूथरोट

1
@Toothrot यह contrib/lispफ़ोल्डर में है - orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/ox-extra.el देखें - आपकी emacs config फ़ाइल में, आपको एक पंक्ति जोड़ने की आवश्यकता हो सकती है जैसे (add-to-list 'load-path "/path/to/contrib/lisp")
मार्क

ध्यान दें कि यह केवल मूल 8.3+ में शब्द है। और आप सिर्फ ox-extra.el को नहीं पकड़ सकते, जिसमें org 8.3+ निर्भरताएँ हैं। आपको आवश्यक फ़ाइलों को खोजने में सक्षम नहीं होने के बारे में निर्यात पर त्रुटियाँ मिलेंगी।
डोडेगी

16

हां , यह पूरी तरह से संभव है। निम्नलिखित कोड को अपने init-file में जोड़ें:

(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 पर पूछा गया है (एक अलग फ़ोकस और शब्दांकन के साथ, शायद यही कारण है कि जब आप यहाँ पोस्ट करने से पहले इंटरनेट पर खोज करते हैं तो आप इसे ढूँढ नहीं पा रहे थे)। उपरोक्त कोड स्वीकृत उत्तर में कोड का एक सरलीकृत संस्करण है ; यह 8.0 में पेश किए गए नए निर्यातक के लिए काम करता है org-modeऔर बैकएंड-अज्ञेयवादी है

अद्यतन करें

जैसा कि टिप्पणियों में चर्चा की गई है, उपरोक्त कोड प्रविष्टियों की सामग्री के :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, तो दूसरी शीर्षक की सामग्री भी निर्यात नहीं की जाती है।
ब्रायन जेड

@BrianZ आपका स्वागत है! क्या हेडिंग no_exportऔर no_titleहेडिंग भाई बहन हैं (यानी, उनके पास प्रमुख सितारों की संख्या समान है)? यदि नहीं, तो किन दो शीर्षकों में अधिक सितारे हैं?
itsjeyd

वे भाई - बहन हैं। इस खिलौने के उदाहरण के निर्यात में मेरे लिए कोई सामग्री नहीं है (सिर्फ शीर्षक, सामग्री की तालिका आदि) pastebin.com/KaiK9qJm
ब्रायन जेड

1
@BrianZ अपने आप में, org-remove-headlinesसिर्फ एक समारोह है; अगर कहीं से कभी फोन नहीं किया गया तो यह आपकी बहुत मदद नहीं करेगा। तो हाँ, आपको अभी भी (add-hook 'org-export-before-processing-hook #'org-remove-headlines)सही व्यवहार को सक्षम करने के लिए लाइन का मूल्यांकन करने की आवश्यकता है । मुझे शायद अपने मूल उत्तर के संपादन में इस बारे में स्पष्ट होना चाहिए था। चेतावनी के रूप में आप देख रहे हैं: मुझे वेनिला एमएसीएस 24.4 और ऑर्ग मोड के 8.2.10 संस्करण नहीं मिलते हैं। आपके द्वारा उल्लिखित चेतावनी से छुटकारा पाने के लिए आप लाइन का (require 'org-agenda)मूल्यांकन करने से पहले कोशिश कर सकते हैं add-hook
इसका अजायबघर

2
इस सुविधा को org contrib के रूप में भी लागू किया गया है। Ref: orgmode.org/cgit.cgi/org-mode.git/plain/contrib/lisp/…
rudolfo.christ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.