1 Fontconfig 이용
Emacs를 쓰면서 한글 글꼴 폭이 영문 글꼴 폭의 두 배가 되게 해서 쓰고 있다. 옛 버전에서는 Emacs 소스 코드에 CJK 글꼴에 패딩을 주는 패치를 하고 직접 빌드해서 썼는데 소스 코드가 바뀌면서 패치를 새로 만들어 주어야 하는 것이 귀찮고 잘못 나오는 부분도 있고 해서 다른 방법을 찾아 보다가 fontconfig에서 matrix로 글꼴을 변형하는 방법이 있어 이 방법으로 한글 폭을 늘려서 사용했다. 아래는 ~/.config/fontconfig/fonts.conf
파일 내용 중 일부이다. 이렇게 하면 폭이 1.2
배 커진다. 이것이 적용된 D2Coding 글꼴을 유니코드 한글 영역에 대해서 사용하도록 Emacs를 설정하면 된다. (내가 TeX 사용자 그룹에 썼던 댓글 참조)
<match target="pattern">
<test qual="any" name="family">
<string>D2Coding</string>
</test>
<edit mode="assign" name="matrix">
<times>
<name>matrix</name>
<matrix>
<double>1.2</double><double>0</double>
<double>0</double><double>1.0</double>
</matrix>
</times>
</edit>
</match>
그런데 이 방법은 Xft에만 적용이 된다. Xft 대신에 Cairo를 쓰도록 Emacs가 개발되고 있는 것 같은데 최근 개발 버전에 Cairo가 기본이 된 것 같다. --without-cairo
옵션과 --with-xft
옵션을 줘서 빌드하면 계속 원하는 모양이 나오지만 Cairo로도 되는 방법이 있으면 좋을 것이다. 아직 Cairo에 대한 Emacs 개발이 다 끝나지 않아서 fontconfig 설정이 안 먹히는 것일까?
2 글꼴 파일 직접 수정
일단은 그냥 글꼴 파일을 고쳐봤다. 글꼴에 대해서 전혀 모르는데 시행착오를 겪으며 글꼴 폭을 늘리는 방법을 알아냈다.
- Fontforge라는 프로그램으로
D2Coding.ttc
파일을 연다. - 여러 번 시도할 수 있으니까
파일>파일명을 지정해서 저장
을 눌러.sfd
파일을 저장한다. 원 파일을 닫고 이 파일을 연다. - 글꼴 이름을 바꾸어서 D2Coding도 쓰고 고친 글꼴도 쓰면 좋을 것이다.
요소>폰트정보
에서D2Coding
을 다른 이름으로 바꾼다. 난D3Coding
으로 하였다. 바꿀 곳이PS Names
에도 있고TTF명
에도 있다. 바꾸고 OK 한다. 이 상태를 다음에 또 쓸 수 있게 저장한다. 편집>선택>출력에 적합한 글리프
를 클릭해서 글자들을 선택한다.메트릭>폭을 설정
에서 글리프폭 확대 비율을120%
로 설정하고 OK 한다. 이렇게 하고 글꼴을 출력해도 원하는 결과가 나온다. 그런데 글자 크기는 똑같고 빈공간만 커져서 글자가 듬성듬성해서 보기가 안 좋을 수 있다. 취향 차이일 수 있다. 진짜 글자 폭을 변경하려면 계속한다.- 글자들이 선택된 상태에서
요소>변형
에 가서 변형을 하는데확대·축소
를 선택하고X
를 원하는 만큼100%
에서120%
까지의 값을 준다. 그리고Transform Width Too
는 체크가 안 되게 한다. 이것을 체크해 두면 또 폭이 증가한다. OK 한다. 파일>폰트를 출력
에서TrueType
을 선택하고 바꾼 글꼴 이름으로 글꼴을 출력한다.- Emacs에서 이 글꼴을 사용하도록 설정하고 한글 글꼴 폭이 영문 글꼴 폭의 두 배가 되었는지 확인한다. 안 되었다면 4번으로 가서 값들을 바꿔서 시도한다.
3 기울임 글꼴
D2Coding에는 기울임 글꼴이 없다. 그래서 Xft를 쓸 때는 폭 늘리는 방법과 비슷하게 fontconfig에 matrix를 적용했다. 그런데 이 경우에는 기울임 스타일의 글꼴이 있어야 적용되는 것 같다. 그래서 D2Coding.ttc
를 fontforge 프로그램으로 열어서 이름 바꾸는 방법과 비슷하게 스타일 관련된 곳의 Regular
를 Italic
으로 바꿔주고 D2Coding-It.ttf
로 글꼴 출력을 하였다. 그러면 아래의 fontconfig 설정이 적용이 된다.
<match target="font">
<test qual="any" name="family" compare="eq">
<string>D2Coding</string>
</test>
<test name="slant" compare="more_eq">
<int>80</int>
</test>
<edit mode="assign" name="matrix">
<times>
<name>matrix</name>
<matrix>
<double>1</double><double>0.2</double>
<double>0</double><double>1</double>
</matrix>
</times>
</edit>
</match>
이렇게 하면 기울임 글꼴에 대해서 위에 있는 폭 늘리는 matrix와 기울이는 matrix가 모두 적용이 되어 폭도 맞고 글꼴도 기울어진다.

그런데 Cairo를 쓰면 역시 이것도 무효가 되기 때문에 직접 글꼴을 기울였다. D2Coding-It.ttf
을 파일을 기초로 해서 fontforge 폰트정보
에서 D2Coding
을 D3Coding
같은 이름으로 바꿔주고 이전처럼 폭을 설정
하고, 요소>변형
에서 전과 조금 달리 확대·축소
와 동시에 아래 선택에서 기울기를 선택하고 시계방향
으로 15°
정도를 주어 변형한다. 이것을 출력하여 .ttf
파일로 저장하면 Emacs에서 한글 기울어진 글꼴을 볼 수 있다.

완벽을 기하기 위해 D2Coding.ttc
에 있는 Bold 글꼴도 Regular와 같이 폭을 늘려서 .ttf
파일로 저장해 주자. 그러면 fc-list D3Coding
명령을 치면 다음과 같이 출력된다.
$ fc-list D3Coding
/home/esrevinu/.fonts/D3CodingBold.ttf: D3Coding:style=Bold
/home/esrevinu/.fonts/D3Coding.ttf: D3Coding:style=Regular
/home/esrevinu/.fonts/D3Coding-It.ttf: D3Coding:style=Itailic
4 Emacs 설정
난 Spacemacs를 쓰는데 글꼴 관련 설정은 다음과 같이 했다.
(defun dotspacemacs/init ()
(setq-default
dotspacemacs-default-font '("Source Code Pro"
:size 13
:weight normal
:width normal)
))
(defun dotspacemacs/user-init ()
(setq haskell-font-lock-symbols t)
(when window-system
(require 'fira-code-mode)
(add-hook 'prog-mode-hook #'fira-code-mode)
(add-hook 'org-mode-hook #'fira-code-mode)
(setq haskell-font-lock-symbols-alist
'(("." "∘" haskell-font-lock-dot-is-not-composition)))
(add-hook 'haskell-mode-hook
(lambda ()
(prettify-symbols-mode -1)
(setq prettify-symbols-alist
(append '(
("\\" . ?λ)
("()" . ?∅)
("not" . ?¬)
("&&" . ?∧)
("||" . ?∨)
("undefined" . ?⊥)
("forall" . ?∀)
("sqrt" . ?√)
("pi" . ?π)
)
(seq-filter (lambda (item)
(let ((a (car item)))
(not (or (equal a "x")
(equal a "&&")
(equal a "||")))))
prettify-symbols-alist)))
(prettify-symbols-mode t))))
)
(defun dotspacemacs/user-config ()
(when window-system
(diminish 'fira-code-mode "λ")
(fira-code-mode--setup)
(set-fontset-font t '(#X1200 . #Xa95f) '("D3Coding" . "unicode-bmp"))
(set-fontset-font t '(#Xac00 . #Xd7af) '("D3Coding" . "unicode-bmp"))
(set-fontset-font t '(#X1100 . #X11ff) '("함초롬돋움" . "unicode-bmp"))
(set-fontset-font t '(#Xa960 . #Xa97c) '("함초롬돋움" . "unicode-bmp"))
(set-fontset-font t '(#Xd7b0 . #Xd7fb) '("함초롬돋움" . "unicode-bmp"))
(set-fontset-font t '(#Xe0bc . #Xefff) '("함초롬돋움" . "unicode-bmp"))
(set-fontset-font t '(#Xf100 . #Xf66e) '("함초롬돋움" . "unicode-bmp"))
(set-fontset-font t 'han '("Noto Sans CJK KR" . "unicode-bmp"))
)
)
fira-code-mode
는 Emacs-instructions에서 얻을 수 있는데 Fira Code Symbol
이란 글꼴이 필요하다. 그런데 이 글꼴은 유니코드 개인사용영역에 ligature 글꼴을 넣어 놓았는데 공교롭게도 옛한글 완성형 한글 코드와 충돌이 난다. 위 코드에서 함초롬돋움
글꼴을 쓰는 부분이 옛한글 부분이다. 옛한글 쓰지도 않지만 완벽하게 하기 위해 글꼴 파일을 고쳐서 글자를 이동시키고 fira-code-mode
도 수정했다. 링크의 코드에서 #Xe100
은 #Xe000
으로, #Xe16f
은 #Xe06f
으로, Fira Code Symbol
은 Fira Code Symbol2
로 바꾼 후에 수정한 Fira Code Symbol 글꼴을 쓰면 된다.
Source Code Pro
글꼴이 13
크기일 때만 D2Coding 120%
폭 늘림이 맞는 것 같다. 다른 크기이면 다른 폭 늘림 비율을 적용해야 할 것이다. 공식을 만들 수 있을 것이다. Visual Studio Code에서도 D3Coding
을 적용하고 글꼴 크기를 13
으로 바꾸니까 잘 된다. Visual Studio Code에서는 Fira Code
글꼴을 D3Coding
글꼴 앞에 두었다. Visual Studio Code는 fontconfig matrix가 적용되지 않았다.