Post

영문 폰트와 한글 폰트 병합하기.

목차


개요

세상에는 폰트가 정말로 많다. 갬성적인 코딩을 위해 여러가지 느낌있는 폰트를 찾아보면 대부분 외국에서 만든 것이기 때문에 한글을 지원하지 않는 경우가 많다.
이 경우 한국어 출력 시 OS에 맞는 기본 폰트가 나타나기 때문에, Windows의 경우 대다수는 Clear Gothic (맑은고딕) 폰트를,
MacOS의 경우 Apple SD Gothic Neo (애플 산돌고딕 Neo)를 만나볼 수 있을 것이다.

둥글둥글한 형식의 코딩 폰트를 보다가 딱딱한 한글 폰트를 보면 기분이가 좋지 않고 몰입이 깨진다.
요새는 두 번째 폰트를 지원하는 프로그램이 많아져서 대다수의 경우에는 이렇게 하지 않아도 되지만, 몇몇 프로그램의 경우 두번째 폰트를 지원하지 않는 경우가 있다.
따라서 이번에는 이러한 영문 폰트에 한글 폰트 및 Nerd Font를 병합하는 방법에 대하여 알아보려고 한다.

방법

들어가기에 앞서,
나는 MacOS를 주로 사용하므로 MacOS 기준으로 작성하였다.

Font Forge 다운로드

먼저 폰트를 병합하는 프로그램인 Font Forge가 설치되어 있어야 한다.
Mac에서는 아래 명렁어로 바로 설치가 가능하다.

1
2
3
brew install fontforge
brew install --cask fontforge
brew link fontforge

폰트 병합하기

나는 Operator Mono 폰트에 HakgyoansimDoldam (학교안심돌담) 폰트를 병합해보려고 한다.

폰트 타입은 otfttf 든 상관없이 잘 병합됨을 확인하였다.

병합할 FontForge 스크립트 작성

fontmerge.ff 파일을 생성한다.

1
2
touch fontmerge.ff
chmod 755 fontmerge.ff

생성한 fontmerge.ff 파일에 아래 내용을 복사하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/local/bin/fontforge
Open($1)
SelectAll()
ScaleToEm(Strtol($3))
Generate("1.ttf")
Close()
Open($2)
SelectAll()
ScaleToEm(Strtol($3))
Generate("2.ttf")
Close()
Open("1.ttf")
MergeFonts("2.ttf")
Generate($4)
Close()

스크립트 내용은 아래 블로그를 참조하였다. https://180bpm.tistory.com/173

병합 bash script 작성 (font forge 병합 명령어)

결론부터 말하자면 작성하지 않아도 된다.
병합 스크립트 작성이 귀찮거나 싫다면 아래 명령어들을 복사해서 실행하자.

1
fontforge -lang=ff -script fontmerge.ff "<영문폰트경로>", "<한글폰트경로>" 2048 "<결과폰트이름>"

예시 명령어

1
# fontforge -lang=ff -script fontmerge.ff "OperatorMono/OperatorMono-BoldItalic.otf", "schoolDoldam/HakgyoansimDoldamB.otf" 2048 "result.otf"

위 명령어를 실행할 것이 아니라 스크립트를 작성해 해결하고 싶다면 아래 내용을 참고한다.

merge_font.sh 파일을 생성하고 실행권한을 주자.

1
2
touch merge_font.sh
chmod 755 merge_font.sh

아래 스크립트를 merge_font.sh 파일에 복사하고 ENG_FONT 변수와 KOR_FONT 변수에 각각 영문 폰트와 한글 폰트의 경로 (상대경로 또는 절대경로 가능) 을 입력하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# english font
ENG_FONT="OperatorMono/OperatorMono-BoldItalic.otf"
# korean font
KOR_FONT="schoolDoldam/HakgyoansimDoldamB.otf"

MERGED_FONT="mergedfont.otf"

if [ -f "$MERGED_FONT" ]; then
	rm -f "$MERGED_FONT"
fi

fontforge -lang=ff -script fontmerge.ff "$ENG_FONT" "$KOR_FONT" 2048 "$MERGED_FONT"

# 폰트 머지를 위해 생성한 임시 파일 삭제
rm -f 1.ttf 2.ttf

if [ ! -d makedfont ]; then
	mkdir ./makedfont/
fi
basename_font1=$(basename "$ENG_FONT")
mv "$MERGED_FONT" "makedfont/$basename_font1"

나의 스크립트 및 폰트 파일 경로

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ls -alhF
-rwxr-xr-x  1 test test 220  3  7 15:04 fontmerge.ff*
-rwxr-xr-x  1 test test 585  3 14 17:14 merge_start.sh*
drwxr-xr-x 12 test test 384  3 12 13:46 OperatorMono/
drwxr-xr-x  8 test test 256  3 14 16:45 schoolDoldam/

$ ls -alhF ./OperatorMono
-rw-r--r-- 1 test test 34K  3 12 13:46 OperatorMono-Bold.otf
-rw-r--r-- 1 test test 35K  3 12 13:46 OperatorMono-BoldItalic.otf
...

$ ls -alhF ./schoolDoldam
-rwxr-xr-x 1 test test 1.8M  3 14 16:45 HakgyoansimDoldamB.otf*
-rwxr-xr-x 1 test test 2.8M  3 14 16:45 HakgyoansimDoldamB.ttf*

이후 ./merge_start.sh 를 사용해 스크립트를 실행시키면 된다.
정상적으로 스크립트를 사용해 머지가 되었다면 makedfont 디렉토리가 만들어지고
해당 디렉토리 안에 mergedfont.otf 머지된 폰트가 생성될 것이다.

나온 결과물을 설치하고 확인하면 된다.

참고

폰트 파일은 영문 굵은 폰트는 한글 굵은 폰트로, 영문 일반 폰트는 한글 일반 폰트로, 영문 가는 폰트는 한글 가는 폰트로,
각자의 폰트 굵기에 맞게 병합하는 것을 추천한다.
참고로 한글 폰트는 기본적으로 폰트 자체에서 기울임꼴 글꼴을 지원하지 않는 경우가 많다.

아쉽지만 한글 폰트를 병합하여 사용할 시에는 고정폭 형식(Monospace)을 사용할 수 없다.

OperatorMono-Bold.otf + HakgyoansimDoldamB.otf
OperatorMono-Medium.otf + HakgyoansimDoldamM.otf
OperatorMono-Light.otf + HakgyoansimDoldamL.otf

번외 - 폰트에 Nerd Font 병합하기

머지한 폰트가 기본적으로 Nerd Font를 지원하지 않아서 Nerd Font 글꼴이 필요한 몇몇 글자가 깨져서 나타나고 있다.

아래 링크를 참조하여 Nerd Font를 병합해보자.
https://github.com/ryanoasis/nerd-fonts?tab=readme-ov-file#font-patcher

위 경로의 URL에 들어가면 FontPatcher.zip 을 다운로드 받을 수 있는 링크를 찾을 수 있다.

Use the script … 부분에
Download script and its helper files as archive and extract
부분의 archive 링크를 클릭하여 FontPatcher.zip 파일을 다운로드 받는다.
압축 파일을 풀면 font-patcher 스크립트가 나올 것이다.

아래 URL에서 다운로드 받을 수 있으나 외부 링크라 언제 만료될 지 모르니 위의 링크를 참조하자.
https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FontPatcher.zip

“Requres” 의 내용을 살펴보면 Python3python-fontforge, argparse 패키지가 필요하다.

필요한 패키지를 설치하자.

1
2
3
# python3 -m pip innstall fontforge
pip3 install python-fontforge
pip3 install argparse

현재 상황

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ls -alhF
font-patcher
drwxr-xr-x  6 test test  192  3 11 14:23 FontPatcher/
-rw-r--r--  1 test test 1.9M  2 29 14:12 FontPatcher.zip
drwxr-xr-x 12 test test  384  3 14 16:51 makedfont/
$ ls -alhF ./FontPatcher
total 116K
drwxr-xr-x 3 test test   96  2 29 14:13 bin/
-rwxr-xr-x 1 test test 112K 11 27 02:44 font-patcher*
-rw-r--r-- 1 test test  422 11 27 02:44 readme.md
drwxr-xr-x 3 test test   96  2 29 14:13 src/
$ ls -alhF ./makedfont
-rw-r--r-- 1 test test 3.5M  3 14 16:48 OperatorMono-Light.otf
-rw-r--r-- 1 test test 3.5M  3 14 16:48 OperatorMono-LightItalic.otf

기본적인 명령어 사용법은 아래와 같다.

1
2
3
4
fontfore --script "<font-patcher 스크립트 경로>" --complete "<머지된 폰트 경로>"

# 모노 옵션을 추가할 경우
fontfore --script "<font-patcher 스크립트 경로>" --complete --mono "<머지된 폰트 경로>"

예제

1
2
3
fontforge --script "FontPatcher/font-patcher" --complete "makedfont/Korean-OperatorMono-Light.otf"
# 모노 옵션을 추가할 경우
fontforge --script "FontPatcher/font-patcher" --complete --mono "makedfont/Korean-OperatorMono-Light.otf"

한글 폰트가 적용된 상태에서 Mono 옵션을 추가할 경우 폰트의 폭이 비정상적으로 변형될 가능성이 존재하기에 --mono 옵션을 추가하는 것은 추천하지 않는다.

결과

This post is licensed under CC BY 4.0 by the author.