Markdown tarzı bağlantı kimlikleri org modunda nasıl uygulanır?


22

Bazen, aynı bağlantıyı uzun bir belgede birden fazla yerde kullanmam gerekiyor.

Bu gibi durumlarda, markdown'da olduğu gibi link kimlikleri olması yararlı olacaktır. Gönderen markdown sözdizimi ref ,

İsteğe bağlı olarak parantez kümelerini ayırmak için bir boşluk kullanabilirsiniz:

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

Ardından, belgenin herhangi bir yerinde, bağlantı etiketinizi bu şekilde, tek bir satırda tanımlayabilirsiniz:

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

Org kipindeki Link Kısaltmasının aynı şekilde (etiketsiz) işe yarayacağına inandım .

Link ID'lerinin amacı linkleri düzenlemek için merkezi bir yere sahip olmaktır. Belgenin sonunda iyi bir yer olacaktır. Tam bağlantılar kimlikte tanımlanır, ancak belgede başka bir yerde kullanılan bağlantılar köprüleri yerleştirmemiz gerekir. Dışa aktarırken, kimlikler gerçek köprülerle değiştirilir.

Bu yaklaşımın faydaları,

  • Bağlantılar değiştiğinde, sadece kimlik tanımlarını değiştirmemiz gerekir. Dışa aktarırken, belgedeki köprüler bununla güncellenecektir.
  • Belgeyi tek tek yazarken daha hızlı köprü ekleme, her seferinde tam linkleri alıp yapıştırmak zorunda değildir. Kimlikleri belgeye yazıp belgenin sonundaki bir blokta tanımlarsınız.

Bu kullanım için mi yoksa ihracat için mi?
Malabarba

Kullanım ihracat içindir. Amaç, bağlantıyı düzenlemek için bir yere sahip olmak ve sadece köprüleri yerleştirmek istediğim kimliği kullanmak. Şimdilik sadece genişleyen MAKRO'ları kullanmaya başladım [[Link][Link Name]]. Ancak Markdown'daki gibi ID yaklaşımı daha temiz olacaktır.
Kaushal Modi

Bu bana bir dipnot gibi görünüyor. İşe yarayabilecek diğer bazı olasılıklar radyo hedefleri ( orgmode.org/manual/Radio-targets.html#Radio-targets ) veya <<targets>> orgmode.org/manual/Internal-links.html#Internal-links’e iç bağlantılar .
John Kitchin

Yanıtlar:


20

Bu sayfa , org modu bağlantıların nasıl genişletileceği hakkında hoş bir açıklama içeriyor. Özel kaygınızı ele almaz, ancak temel prensibi açıklar.
Diyelim ki bağlantılarınızın bu şekilde tanımlanmasını istiyoruz, arabellekte herhangi bir yerde,

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

ve böyle çağrıldı

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

Öncelikle, kuruluşunuza nasıl takip edileceğini ve bağlantınızı nasıl dışa aktaracağınızı söylemeniz gerekir.

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

Ardından, sadece nasıl karar vermeniz gerekir Eğer bu bağlantıyı ele almak istiyorum.

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

Bahsettiğiniz unvanın ne için kullanıldığından emin değilim. Bana haber verirseniz ekleyebilirim.
Malabarba

1
Var olan dışa aktarma işlevi örnekleri için şunu fark ettim: docview, bbdb, org-add-link-typeişlev çağrısı boyunca onlar da yapıyor (add-hook 'org-store-link-functions 'org-LINKTYPE-store-link).
Kaushal Modi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.