조직 모드에서 마크 다운 스타일 링크 ID를 구현하는 방법은 무엇입니까?


22

때로는 긴 문서의 여러 위치에서 동일한 링크를 사용해야합니다.

이러한 경우 마크 다운과 같은 링크 ID를 갖는 것이 유용합니다. 에서 인하 구문 심판 ,

선택적으로 공백을 사용하여 대괄호 세트를 구분할 수 있습니다.

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

그런 다음 문서의 어느 곳에서나 다음과 같이 링크 레이블을 한 줄씩 정의하십시오.

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

나는 org-mode 의 링크 약어 가 태그없이 같은 방식으로 작동 한다고 생각 했지만 그렇지 않습니다.

링크 ID의 목적은 링크를 편집하기위한 중앙 위치를 갖는 것입니다. 문서 끝에 좋은 위치가 있습니다. 전체 링크는 ID에 정의되어 있지만 하이퍼 링크를 배치해야하는 문서의 다른 곳에서는 ID 만 사용됩니다. 내보낼 때 ID는 실제 하이퍼 링크로 바뀝니다.

이 방법의 장점은 다음과 같습니다.

  • 링크가 변경되면 ID 정의 만 수정하면됩니다. 내 보내면 문서의 하이퍼 링크가 해당 하이퍼 링크로 업데이트됩니다.
  • 매번 전체 링크를 가져 와서 붙여 넣을 필요가 없으므로 문서를 작성할 때 더 빠른 하이퍼 링크 삽입 문서에 ID를 입력하고 문서 끝에 블록으로 정의합니다.

사용 또는 수출용입니까?
Malabarba

사용법은 수출입니다. 목표는 한 곳에서 링크를 편집하고 하이퍼 링크를 배치하려는 ID를 사용하는 것입니다. 지금은로 확장되는 조직 모드 MACRO를 사용합니다 [[Link][Link Name]]. 그러나 Markdown과 같은 ID 접근 방식이 더 깨끗합니다.
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.