วิธีการนำรหัสลิงก์สไตล์มาร์กดาวน์ในโหมดองค์กร?


22

บางครั้งฉันต้องใช้ลิงค์เดียวกันในหลาย ๆ ที่ในเอกสารที่มีความยาว

สำหรับกรณีเหล่านั้นจะมีประโยชน์หากมี ID ลิงก์เหมือนใน markdown จากโทษไวยากรณ์ markdown ,

คุณสามารถเลือกใช้ช่องว่างเพื่อแยกชุดของวงเล็บได้:

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

จากนั้นที่ใดก็ได้ในเอกสารคุณกำหนดป้ายกำกับลิงก์เช่นนี้ในบรรทัดด้วยตัวเอง:

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

ฉันเชื่อว่าตัวย่อของลิงก์ในโหมดองค์กรจะทำงานในลักษณะเดียวกัน (ไม่มีแท็ก) แต่ก็ไม่เป็นเช่นนั้น

จุดประสงค์ของ ID ลิงก์คือการมีจุดศูนย์กลางสำหรับการแก้ไขลิงก์ ตำแหน่งที่ดีจะอยู่ท้ายเอกสาร ลิงก์แบบเต็มมีการกำหนดไว้ใน ID แต่มีการใช้ ID เฉพาะที่อื่นในเอกสารที่เราต้องการวางไฮเปอร์ลิงก์ เมื่อส่งออก ID จะถูกแทนที่ด้วยไฮเปอร์ลิงก์จริง

ประโยชน์ของวิธีนี้คือ

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

นี่สำหรับการใช้งานหรือเพื่อการส่งออก?
Malabarba

การใช้งานสำหรับการส่งออก เป้าหมายคือมีที่เดียวเพื่อแก้ไขลิงค์และใช้ ID ที่ฉันต้องการวางไฮเปอร์ลิงก์ สำหรับตอนนี้ผมหันไปเพียงแค่ใช้มาโครโหมด org [[Link][Link Name]]ที่ขยายตัวออกไป แต่วิธีการ ID เหมือนใน Markdown จะสะอาดขึ้น
Kaushal Modi

มันดูเหมือนเชิงอรรถมากสำหรับฉัน ความเป็นไปได้อื่น ๆ ที่อาจใช้ได้คือเป้าหมายทางวิทยุ ( orgmode.org/manual/Radio-targets.html#Radio-targets ) หรือลิงก์ภายในไปยัง <<targets>> orgmode.org/manual/Internal-links.html#Internal- links .
John Kitchin

คำตอบ:


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)))))

ฉันไม่แน่ใจว่าชื่อที่คุณพูดถึงจะถูกใช้เพื่ออะไร ถ้าคุณบอกให้ฉันรู้ว่าฉันสามารถเพิ่มได้
Malabarba

1
ผมสังเกตเห็นว่าที่มีอยู่ในตัวอย่างฟังก์ชั่นการส่งออก: docview, bbdb พร้อมฟังก์ชั่นที่พวกเขายังทำorg-add-link-type (add-hook 'org-store-link-functions 'org-LINKTYPE-store-link)
Kaushal Modi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.