ऑर्ग-मोड में मार्कडाउन शैली लिंक आईडी कैसे लागू करें?


22

कई बार, मुझे एक ही दस्तावेज़ में कई स्थानों पर एक ही लिंक का उपयोग करने की आवश्यकता होती है।

उन मामलों के लिए मार्कडाउन की तरह लिंक आईडी होना उपयोगी होगा। से markdown वाक्यविन्यास रेफरी ,

आप वैकल्पिक रूप से कोष्ठक के सेट को अलग करने के लिए एक स्थान का उपयोग कर सकते हैं:

This is [an example] [id] reference-style link. 

फिर, दस्तावेज़ में कहीं भी, आप अपने लिंक लेबल को इस तरह परिभाषित करते हैं, एक लाइन पर ही:

[id]: http://example.com/ "Optional Title Here"

मुझे विश्वास था कि ऑर्ग-मोड में लिंक संक्षिप्तिकरण उसी तरह काम करेगा (बिना टैग के) लेकिन यह नहीं है।

लिंक आईडी का उद्देश्य लिंक को संपादित करने के लिए एक केंद्रीय स्थान है। एक अच्छा स्थान दस्तावेज़ के अंत में होगा। पूर्ण लिंक आईडी में परिभाषित किए गए हैं, लेकिन केवल आईडी का उपयोग उस दस्तावेज में कहीं और किया जाता है, जहां हमें हाइपरलिंक्स लगाने की आवश्यकता होती है। निर्यात करते समय, आईडी को वास्तविक हाइपरलिंक के साथ बदल दिया जाता है।

इस दृष्टिकोण के लाभ हैं,

  • जब लिंक बदलते हैं, तो हमें बस आईडी परिभाषाओं को संशोधित करना होगा। निर्यात करने पर, दस्तावेज़ में हाइपरलिंक्स को उसी पर अद्यतन किया जाएगा।
  • दस्तावेज़ को लिखते समय तेज़ हाइपरलिंक प्रविष्टि हर बार पूर्ण लिंक प्राप्त करने और पेस्ट करने की आवश्यकता नहीं होती है। आप दस्तावेज़ में आईडी टाइप करते हैं और उन्हें दस्तावेज़ के अंत में एक ब्लॉक में परिभाषित करते हैं।

क्या यह उपयोग के लिए या निर्यात के लिए है?
मालाबार

उपयोग निर्यात के लिए है। उद्देश्य लिंक को संपादित करने के लिए एक जगह है और सिर्फ उस आईडी का उपयोग करना है जहां मैं हाइपरलिंक रखना चाहता हूं। अभी के लिए मैं केवल ओआरजी मोड एमएसीआरओ का उपयोग करने का सहारा लेता हूं जिसका विस्तार होता है [[Link][Link Name]]। लेकिन मार्कडाउन की तरह आईडी दृष्टिकोण क्लीनर होगा।
कौशल मोदी

यह मेरे लिए एक फुटनोट की तरह लग रहा है। कुछ अन्य संभावनाएँ जो काम कर सकती हैं, वे हैं रेडियो लक्ष्य ( orgmode.org/manual/Radio-targets.html#Radio-targets ) या << लक्ष्य के आंतरिक लिंक >> orgmode.org/manual/Internal-links.html##ternat-links
जॉन किचन

जवाबों:


20

इस पृष्ठ पर ऑर्ग-मोड लिंक का विस्तार करने के बारे में एक अच्छा वर्णन है। यह आपकी विशिष्ट चिंता को संबोधित नहीं करता है, लेकिन यह मूल सिद्धांत की व्याख्या करता है।
मान लें कि हम चाहते हैं कि आपके लिंक इस तरह से परिभाषित हों, बफर में कहीं भी,

#+LINK-ID: wiki http://www.emacswiki.org

और इस तरह से आह्वान किया

[[lid:wiki][You should check out the wiki]]

सबसे पहले, आपको यह बताने की जरूरत है कि आपको अपने लिंक का निर्यात कैसे करना है और कैसे करना है।

(org-add-link-type "lid" 'endless/open-id-link 'endless/export-id-link)

(defun endless/open-id-link (path)
  "Follow an ID link to PATH."
  (browse-url (endless/find-id-link path)))

(defun endless/export-id-link (path desc format)
  "Create the export version of an ID link specified by PATH and DESC.
FORMATs understood are 'latex and 'html."
  (setq path (endless/find-id-link path))
  (cond
   ((eq format 'html) (format "<a href=\"%s\">%s</a>" path desc))
   ((eq format 'latex) (format "\\href{%s}{%s}" path desc))
   (t desc)))

फिर, आपको बस यह तय करने की आवश्यकता है कि आप इस लिंक को कैसे संभालना चाहते हैं।

(defun endless/find-id-link (id &optional noerror)
  "Find \"#+LINK-ID: ID\" in current buffer and return the link.
Unless NOERROR is non-nil, throw an error if link not found."
  (save-excursion
    (goto-char (point-min))
    (let ((case-fold-search t))
      (when (search-forward-regexp 
             (format "^#\\+LINK-ID: \\b%s\\b +\\(.*\\) *$" id)
             nil noerror)
        (match-string-no-properties 1)))))

मुझे यकीन नहीं है कि आपके द्वारा बताए गए शीर्षक का उपयोग किस लिए किया जाएगा। यदि आप मुझे बताएं कि मैं इसे जोड़ सकता हूं।
मालाबार

1
मुझे लगता है कि मौजूदा निर्यात समारोह के उदाहरणों के लिए: docview, bbdb, org-add-link-typeफ़ंक्शन कॉल के साथ, वे भी करते हैं (add-hook 'org-store-link-functions 'org-LINKTYPE-store-link)
कौशल मोदी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.