# Hershey는 텍스트 기반 벡터 글꼴 형식이다

> Clean Markdown view of GeekNews topic #29827. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=29827](https://news.hada.io/topic?id=29827)
- GeekNews Markdown: [https://news.hada.io/topic/29827.md](https://news.hada.io/topic/29827.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-05-25T02:01:40+09:00
- Updated: 2026-05-25T02:01:40+09:00
- Original source: [wiki.xxiivv.com](https://wiki.xxiivv.com/site/hershey.html)
- Points: 1
- Comments: 1

## Topic Body

- **Hershey Fonts**는 1967년에 만들어진 초기 디지털 글꼴 표현 중 하나이며, `.jhf` 파일은 각 줄이 하나의 글리프를 나타내는 텍스트 파일임
- 글리프 줄은 `id[5]`, `length[3]`, `left[1]`, `right[1]`, `points[?]`로 구성되며, ID와 점 개수는 10진수로 인코딩됨
- **점 좌표**는 두 문자로 부호 있는 `x`, `y` 값을 나타내며, `R`은 0, `Q`는 -1, `S`는 +1에 해당함
- 문자 값은 `J=-8`부터 `Z=+8`까지 이어지고, 예를 들어 `NW`는 `-4,5` 좌표를 뜻함
- **펜 들어 올리기**는 공백 뒤 대문자 `R`인 `" R"`로 표시되며, 다음 위치까지 선을 긋지 않는 특수 동작임

---

### 형식 개요
- **Hershey Fonts**는 1967년에 만들어진 초기 디지털 글꼴 표현 중 하나이며, Hershey 벡터 글꼴 파일 `.jhf`는 한 줄이 하나의 글리프를 나타내는 텍스트 파일임
- 각 글리프 줄은 다섯 부분으로 인코딩됨
  - `id[5]`: 글리프의 **10진수 ID**
  - `length[3]`: 점의 개수를 나타내는 **10진수 값**
  - `left[1]`: 경계 상자의 왼쪽 위치
  - `right[1]`: 경계 상자의 오른쪽 위치
  - `points[?]`: 줄바꿈으로 끝나는 점 목록
- 하나의 점은 두 문자로 구성되며, 각각 부호 있는 `x`, `y` 값을 나타냄
- `" R"`처럼 **공백 뒤 대문자 R**이 오는 위치는 펜을 들어 올리는 동작을 뜻해 다음 위치까지 선을 그리지 않음

### 값 매핑과 참고 자료
- 문자 값은 `J`부터 `Z`까지 `-8`에서 `+8`로 이어지며, **`R`이 0**의 기준이 됨
  - `J=-8`, `K=-7`, `L=-6`, `M=-5`, `N=-4`, `O=-3`, `P=-2`, `Q=-1`
  - `R=0`
  - `S=+1`, `T=+2`, `U=+3`, `V=+4`, `W=+5`, `X=+6`, `Y=+7`, `Z=+8`
- 예를 들어 `NW`는 `N=-4`, `W=+5`이므로 `-4,5` 좌표에 해당함
- 관련 자료
  - [Hershey Renderer](https://git.sr.ht/~rabbits/hershey), Uxntal
  - [Hershey Vector Font](https://paulbourke.net/dataformats/hershey/), Paul Bourke
  - [Hershey Fonts](https://solhsa.com/hershey/fontprev.html)

## Comments



### Comment 58157

- Author: neo
- Created: 2026-05-25T02:01:40+09:00
- Points: 1

###### [Lobste.rs 의견들](https://lobste.rs/s/ilahdq/hershey_is_textual_vector_font_format) 
- 관심 있는 분이 있다면, 작업 중인 작은 [Hershey 글꼴 모음](https://chrislloyd.net/pendown)을 만들고 있음  
  온라인에서 흔히 보이는 다른 서체들보다 조금 더 **현대적인 느낌**이 있음
  - 멋지다. 플로터 작업을 더 많이 하던 때에는 쓸 만한 글꼴이 너무 적어서 아쉬웠는데, 이 글꼴들은 **새롭고 보기 좋음**  
    플로터와 일반 굵은 펜으로 그렸을 때 어떻게 보이는지 사진도 있으면 좋겠음
  - 유용해 보임  
    특히 제공하는 `.jhf` 파일이 **구조화가 잘 되어 있음**이 좋다. 온라인의 많은 Hershey 글꼴은 모든 글리프의 `id` 필드가 `12345`로 되어 있거나 일부 글리프에 강제 줄바꿈이 들어가 있어서, 파일 파싱과 텍스트 그리기를 괜히 어렵게 만듦
  - 정말 보기 좋은 글꼴들임  
    최근 Pimoroni Inky 전자잉크 디스플레이와 Raspberry Pi 컨트롤러를 만지다가 Hershey 글꼴과 `.jhf` 파일 형식을 접했음. 제공 라이브러리에는 기억상 “Futural” 글꼴이 있었고, 전반적으로 잘 동작하지만 한 가지 문제가 있는데 **스웨덴 문자** `å`, `ä`, `ö`가 없음  
    이제 Hershey 글꼴에 나보다 100배는 익숙할 것 같아서 묻고 싶은데, ASCII 표의 처음 255자 정도를 담은 `.jhf` 글꼴 파일을 본 적이 있는지 궁금함. 내가 글꼴을 못 찾는 건지, 아니면 실제로 없는 건지 모르겠어서 혹시 이미 본 적이 있나 물어봄

- 이건 Hershey 원본 데이터의 Usenet Font Consortium(1986) 재가공판인데, 원래 [Calligraphy for Computers](https://apps.dtic.mil/sti/tr/pdf/AD0662398.pdf)(1967, PDF) / [A contribution to computer typesetting techniques : tables of coordinates for Hershey's repertory of occidental type fonts and graphic symbols](1976) 데이터 형식에 대해 꽤 **1986년식 C 프로그래머다운** 자유를 행사한 버전임  
  원래의 Fortran 고정 필드 형식이 오히려 다루기 쉬워 보이지만, NTIS에서 제공되던 데이터 테이프는 유실된 것으로 추정됨. Usenet 글에는 “누가 정말 그 형식을 쓰고 싶겠냐만 …” 같은 비꼼도 있었음  
  그리고 2016년쯤 마지막으로 들여다본 **Hershey OTF 변환기**를 끝내거나 공개하거나 포기해야 한다는 걸 다시 떠올리게 해줘서 고맙다: [scruss/python-hershey](https://github.com/scruss/python-hershey). 이 미친 글꼴 형식에 한 번씩 덤벼본 모두에게 인사함  
  새 벡터 글꼴 토끼굴도 하나 있음: [GIMMS](https://gtoal.com/vectrex/vector_fonts/gimms/), [University of Edinburgh](https://en.wikipedia.org/wiki/Edinburgh_IMP)에서 쓰였던 것임  
  Frank Grießhammer가 Hershey와 그의 작업에 대해 좋은 글과 그림을 남겼음: [Frank Grießhammer](https://productiontype.com/article/history-of-the-hershey-fonts)

- 지금 작성 중인 **소프트웨어 렌더러**에 이 형식이 꽤 유용할 것 같음  
  장난감 프로젝트라 OTF/TTF 글꼴을 지원하고 싶지도, 필요하지도 않아서 Hershey 글꼴이 현재 방식인 [olive.c](https://github.com/tsoding/olive.c/blob/e2a3edb585ea643717f4f0d7f927ee83c9ec472c/olive.c#L891)에서 영감을 받은 고정폭 비트맵 글꼴보다 괜찮고 비용 낮은 개선책처럼 보임

- 음, **기준선**은 없나?
  - 지금까지 본 예제들은 글리프를 세로 방향으로 균일한 중심선에 맞추는 것 같음  
    글리프 ID와 ASCII/유니코드 문자 사이의 매핑만 있다면 `0` 같은 **기준 문자**의 치수에서 기준선을 계산할 수 있을 듯함

- 오래전에 Hershey 글꼴을 **JSON**으로 변환했음  
  꽤 장황하지만 처리하고 읽기는 더 쉬움. 원하는 사람이 있다면 2.6MB 파일을 [여기](https://raw.githubusercontent.com/abetusk/bleepsix/refs/heads/release/json/utf8_hershey.json)에서 받을 수 있음

- 선언적인 https://en.wikipedia.org/wiki/Metafont 에 대응하는 **명령형 형식**처럼 보임

- [BGI 글꼴](https://moddingwiki.shikadi.net/wiki/BGI_Stroked_Font)도 비슷한 구조를 가지고 있었음

- Hershey 글꼴이 유용한 이유 중 하나는 **단순한 벡터 형식**이라 펜 플로터뿐 아니라 화면 표시용 다른 효과를 그 위에 만들기 쉽다는 점임  
  예를 들어 AoC 2024 5일차 시각화에서는 벡터에서 점을 샘플링해 거품의 핵 생성 지점으로 썼음: https://hachyderm.io/deck/@bazzargh/113599143062296178  
  12일차에는 선을 천천히 그어서 성에 낀 창문 위에 글씨를 쓰는 듯한 효과를 냈음: https://hachyderm.io/deck/@bazzargh/113639456289455465
