Org Mode 문서에 이미지를 넣기 위해서는 단순히 이미지 파일을 준비해놓고 아래처럼 링크 문법으로 이미지 파일의 경로를 적어주면 됩니다.
[[./foo/bar/image.png]]
하지만 외부 이미지, 즉 다른 사이트에 있는 이미지를 문서에 첨부하려는 경우는 좀 다릅니다. 예를 들어 아래의 경우를 봅시다.
[[https://foo.bar/img/image.png]]
위 링크는 과연 이미지가 나올까요? 아니면 링크가 걸릴까요? 물론 평범하게 URL 링크가 걸리게 됩니다. 따라서 당연하게도 익스포트 한 결과물에는 이미지가 나오지 않지요.
자 그러면 이 문제를 어떻게 해결하면 좋을까요?
커스텀 링크
Org Mode에는 친절하게도 org-add-link-type
함수를 이용해 커스텀 링크를 추가하는 방법을 제공합니다. 사용 방법에 대한 자세한 설명을 하기엔 저도 지식이 좀 부족하니 일단 우리가 원하는 바를 다짜고짜 코드로 살펴보겠습니다.
(defun org-custom-link-img-follow (path)
(org-link-open-from-string path))
(defun org-custom-link-img-export (path desc format)
(cond
((eq format 'html)
(format "<img src=\"%s\" alt=\"%s\"/>" path desc))))
(org-add-link-type "img" 'org-custom-link-img-follow 'org-custom-link-img-export)
이 코드를 실행시킨 후 Org 문서에 아래와 같은 문법으로 코드를 작성하면 외부 사이트의 이미지를 문서에 넣을 수 있게 됩니다.
[[img:https://foo.bar/img/image.png]]
코드 자체의 가독성도 그다지 나쁘지는 않은 것 같습니다. 하여간 익스포트를 하게 되면 적절하게 이미지가 표시됩니다.
약간의 설명
org-add-link-type
함수의 첫 번째 인자는 FOLLOW 함수를 지정하는데 Org Mode에서 입력한 링크에서 엔터를 누를 경우 어떤 식으로 동작할지를 결정할 수 있게 합니다. 만약 이미지가 아니라 로컬 문서를 링크하고 있는 경우라면 이 FOLLOW 함수에서 file:path
와 같은 식의 값을 돌려줄 경우 일반적인 [[file:...]]
링크와 비슷하게 동작하게 됩니다.
두 번째 인자인 EXPORT 함수는 보시다시피 실제로 익스포트 될 내용을 돌려주는 함수입니다. 이 EXPORT 함수에 전달되는 두 번째 인자인 desc
는 [[LINK NAME][DESCRIPTION]]
과 같이 링크 설명을 분리해서 적을 경우 뒷부분의 description이 여기로 전달됩니다.
주의
org-add-link-type
함수는 이름처럼 커스텀 링크 함수를 추가(add)하는 함수입니다. 만약 해당하는 함수를 수정하고 코드를 evaluate 하더라도 만약 이전에 적용된 코드가 있다면 새로 고친 코드는 제대로 적용이 안 되게 됩니다. 따라서 해당 커스텀 링크 함수를 개발하는 도중에는 귀찮지만 수정할 때마다 이맥스를 재시동하는 편이 좀 더 정확한 결과를 얻을 수 있습니다.
'기술적인 이야기 > 이맥스' 카테고리의 다른 글
터미널에서 트루컬러 이맥스 사용하기 (0) | 2020.02.07 |
---|---|
Org Mode 테이블 스프레드시트 (1) | 2020.01.31 |
Org Publish가 이맥스를 자꾸 얼리고 있어요 (1) | 2020.01.10 |
Org Publish로 익스포트 자동화하기 (0) | 2020.01.09 |
Emacs에서 CRLF를 LF로 변환하기 (0) | 2020.01.06 |
댓글