History: 1. missing date: 원래 구글 블로거에서 작성했던 글을 옮겨옴. 2. 29 JAN 2022: 홈페이지 정비 일환으로 포맷을 일부 수정.
꽤 오랜 시간동안 개인용 위키 시스템을 찾아보았었다. OSX로 넘어오게 된 본격적인 이유중 하나도 사실은 괜찮은 개인용 위키 시스템이 있느냐였으니.. 문제는 위키의 목적 자체가 연구나 공부한 내용들을 기록하고 조금씩 형식을 갖추어서 정리하기 위함인데 대부분의 위키 시스템에서 수식지원이 ‘어느정도’수준까지는 되나 만족스럽지는 못 하였다. 다만 맥저널로 정리한 내용이 일정 수준에 도달했다고 판단하여 블로그에 공개해둔다.
기존에 리눅스에서 사용하던 시스템은 WikidPad라는 오픈소스의 개발버전이었는데 여기서는 각 wiki word등을 편집모드에서 편집한 다음 디스플레이모드로 바꾸면 MathJax등을 활용하여 텍으로 만들어진 수식을 렌더링해주곤 했었다. 다만, 편집모드에서 LaTex 하이라이트 기능이 잘 되지 않는 것과 맥으로 옮겨타면서 개발버전의 패키지 의존성이 나를 괴롭게 한 것들과 같은 문제점이 발생하면서 몇몇 다른 솔루션을 찾곤 했었다. 일단 drag-drop과 같은 기능들을 포기하면 웹 기반으로 하는 위키 시스템도 나쁘진 않을 것 같았지만 결국 손에 잡은것은 Emacs에서 제공하는 org모드였다.
원래 주요 에디터로 이맥스를 사용하던 필자는 -물론 에디터로 사용한다. 그러니까… 파일열기, 삭제, gdb, 뭐 기타등등.. 다시말하지만, 리스프 그런거 모른다- 일전 org모드를 잠깐 사용했던 경험이 있고, 그 당시 pdf export까지는 해 봤던 경험이 있었다. 이런저런 방법론을 찾아서 해 보니, LaTex publish옵션을 사용해도 되고 HTML publish옵션을 사용해도 만들어진 html파일에서 자동으로 MathJax CDN으로 연결해 주던 것 같았다. 문제는 link인데 Tex파일로 출력하거나 PDF로 바로 출력하는 경우에는 모든 링크가 기존의 .org 파일로 연결되는 문제가 발생하였다. 위키를 사용한다는 것은 기본적으로 각 node – 위키에서는 wiki word등으로 표현하는 -간의 관계가 비선형으로 꼬여 있는 것을 이야기하는데 (여기서 비선형적 구조에 관한 이야기는 다른 글을 올릴 예정이다) 결국 각 노드간의 링크를 통해 이런 비선형관계를 표현하는데 큰 문제점을 안게 된 결과, HTML로 publishing을 한 다음 로컬에 MathJax를 설정해서 이를 이용해서 렌더링을 하도록 설정을 해 두었다. 물론 인터넷이 잘 되는 환경에서는 CDN을 활용해도 좋지만, 로컬이 우선이라 생각한다.
이를위해서 다음과 같은 변경이 필요하였다.
1. .emacs 설정파일에서 html publishing 설정 추가
(setq org-publish-project-alist
'(
("scientific-knowledge-html"
:base-directory "~/Dropbox/knowledge_repository/orgmode/scientific_wiki_system/"
:publishing-directory "~/Dropbox/knowledge_repository/orgmode/scientific_wiki_system/publish_html/"
:publishing-function org-html-publish-to-html)
))
일단 위와 같은 설정은 M-x org-publish
scientific-knowledge-html 키워드로 특정 폴더에 있는 변화가 있는 .org파일을 publishing 폴더에 html파일 형식으로 저장해준다. 이 때 참조하는 파일은 org 패키지 폴더에서 ox-html.el 인데 MathJax옵션들은 해당 파일을 수정함으로 인하여 조절할 수 있다. (이를 .emacs에서 조절할 수 있는지는 잘 모르겠다. 이맥스를 그렇게 잘 다루는 편이 아니라서..)
2. MathJax를 CDN을 이용하지 않고 로컬에 설치해놓은 경로로 변경
해당 .org파일의 문두에 다음과 같이 추가한다. 다음은 패키지에서 MathJax에관한 옵션으로서 path:뒤에 경로를 실제로 로컬에 설치해둔 MathJax경로로 해 주면 된다. 만약 해당 경로를 제공하지 않는다면 MathJax CDN을 통하여 (즉, 네트워크를 통하여) 렌더링이 진행되므로 누군가와 공유를 할 경우에는 해당 옵션을 주지 않는 것이 오히려 좋다. align:”left”의 경우에는 당연하게 수식을 왼쪽 정렬하는 것인데, 기본 설정은 가운데 정렬이다. 본인의 취향이므로 하고 싶은대로 하면 된다.
#+HTML_MATHJAX: align:"left" path:"/Users/ed_mac/ed_packages/MathJax/MathJax.js"
3. org-html-publish-to-html 키워드를 사용할때 (즉, 위에 .emacs와 같은 설정을 사용할때) MathJax의 옵션 조절
여기에는 여러가지가 속하는데, 일단 본인의 이맥스 org mode에서는 equation numbering같은 경우 기본옵션으로 지정되어 있지 않았으므로 옵션조절이 필요한데, 해당 명령어셋은 org패키지폴더 안의 ox-html.el 을 참조한다. 해당 파일 내에서 “(defcustom org-html-mathjax-template” 부분을 찾아서 다음과 같이 수정한다.
원래의 코드:
(defcustom org-html-mathjax-template
"수정한 코드:
(defcustom org-html-mathjax-template
"
MathJax.Hub.Config({
TeX: { equationNumbers: { autoNumber: "AMS" } }
});
즉, 수식넘버링을 추가하게 되는데 중요한것은 이렇게 옵션을 추가하지 않으면 나중에 본문에서 label{eq:xxx} 라고 한 다음 eqref{eq:xxx}으로 받아오는게 모두 ??로 렌더링 되게 된다. 위키시스템을 빌드업하는데에는 자기참조도 중요하므로 꼭 수식 렌더링 옵션을 추가하도록 하자.
(중요. .el 파일이나 .emacs 파일을 수정한 다음에는 항상 M-x byte-compile-file 명령어를 이용하여 컴파일 시켜주도록 하자)
결국 구현은 이맥스의 org모드의 HTML publishing기능과 MathJax를 활용하여 텍을 지원하는 개인용 위키를 구현하였다는 것이고, 일단 이를 기점으로 연구관련 부분을 쌓아나가고 있다. 그리고 이와는 별개로 현재 가지고 있는 문제점들을 해결하고 조금 더 나은 방향을 탐색하고 있는데 여기에 해당되는 부분은 다음과 같다.
1. Bibliography 부분을 BibTex등을 활용하여 처리하는 부분 (의외로 MathJax에서 지원하지 않는 것을 보고 놀랐다)
2. .emacs나 wiki용 설정파일에서 옵션을 추가하여 ox-html을 직접 수정하지 않고도 다양한 스크립트 등을 추가하거나 수정할 수 있도록 하는 부분 (이맥스를 조금 더 공부해야 할 듯)
3. mhchem등의 패키지가 작동하지 않고 있는데 이유 분석
4. org-latex-publish-to-latex 명령어나 org-latex-publish-to-pdf 명령어를 사용할 때 각 wiki word간의 링크가 .org 파일로 전달되는 부분 수정
5. 각 node간의 연결 관계도를 보여주는 부분 (예로들어 iOS에 있는 WikiLinks 앱과 같은 기능 구현)
6. Django를 활용하여 정적이면서 선택적인 온라인 개인 위키 시스템을 만드는 방법.
Leave a Reply