TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 23 READS

옛 과학 논문의 판화 감성을 LaTeX로 재현하다: vintage-latex 뜯어보기

옛 과학 논문의 판화 감성을 LaTeX로 재현하다: vintage-latex 뜯어보기
SOURCE IMAGE · HACKER NEWS

17세기 판화, 별자리 도표, 손으로 계산한 로그표, 매듭 도해, 망원경 삽화. 근대 과학 논문 특유의 시각적 질감은 오늘날 디지털 조판 환경에서 좀처럼 재현되지 않는다. Foadsf가 공개한 오픈소스 저장소 vintage-latex는 이 '옛 과학 논문 미학'을 LuaLaTeX와 MetaPost 기반 도형 라이브러리 fiziko로 되살리는 스무 개의 예제를 모아 놓았다. 각 예제는 통짜 데모가 아니라 독립적으로 컴파일되도록 설계되어 있다는 점이 핵심이다. 파일 하나를 복사해 빌드한 뒤 특정 효과를 하나씩 제거해 보면, 그 효과가 최종 결과물에 정확히 무엇을 기여하는지 눈으로 확인할 수 있다.

세 갈래로 나뉜 예제 구조

스무 개 예제는 성격에 따라 세 부류로 갈린다. 순수 LaTeX 페이지(1, 2, 4, 5, 6, 10~14번), fiziko를 쓰는 독립 MetaPost 도형(3, 7, 8, 9번), 그리고 LuaTeX에 내장된 MetaPost가 문서 안에서 직접 fiziko 도형을 그려 넣는 LaTeX 페이지(15~20번)다. 마지막 그룹은 luamplib를 통해 fiziko를 불러오므로 LaTeX와 MetaPost 양쪽 환경이 모두 필요하다. 저장소 루트에서 셸별 빌드 스크립트를 실행하는 것이 가장 빠른 경로이며, 이 스크립트는 모든 예제를 build 디렉터리로 컴파일하되 fiziko 체크아웃 경로를 주지 않으면 fiziko 의존 예제는 건너뛴다.

실무자가 먼저 눈여겨볼 대목은 엔진 선택이다. 소스 파일들은 의도적으로 pdfLaTeX를 거부한다. 이 미학을 구성하는 OpenType 글꼴 제어 기능을 pdfLaTeX가 제공하지 못하기 때문이다. 라벨은 btex와 etex 사이에 작성되어 문서 자체가 조판하는데, 그 결과 도형 안 글자들이 Computer Modern이 아니라 본문과 같은 EB Garamond와 Garamond Math로 나타난다. 도형과 본문의 서체를 일치시키는 이 작은 결정이 전체 페이지의 시대감을 좌우한다.

반복되는 하나의 패턴

fiziko를 문서 안에서 그리는 페이지들은 공통된 얼개를 공유한다. everymplib가 fiziko.mp를 입력하고, 난수 시드를 고정하며, 획 두께와 광원 방향을 정한 뒤 drawoptions로 모든 획을 그 페이지의 잉크 색으로 물들인다. 그 위에서 개별 도형은 본문 흐름의 제자리에 놓인 평범한 mplibcode 환경일 뿐이다. 난수 시드를 고정한다는 점은 재현 가능한 빌드를 원하는 개발자에게 특히 시사적이다. 손으로 그린 듯한 불규칙함을 흉내 내면서도 매번 같은 결과물을 뽑아낼 수 있기 때문이다.

독립 MetaPost 예제를 다룰 때는 출력 형식에 주의해야 한다. 모든 소스가 prologues := 3을 사용해 라벨을 파일에 임베드하고 EPSF 헤더를 붙이며, 결과는 build 디렉터리에 EPS로 떨어진다. 이를 PDF나 PNG로 바꿀 때는 Ghostscript를 쓰되, MetaPost에 PDF를 직접 요구하기 전에 파일 시그니처를 확인하라고 문서는 권한다. 형식이 어긋난 출력을 그대로 파이프라인에 태우는 사고를 막기 위한 실무적 조언이다.

배포판 차이가 만드는 함정

이 프로젝트가 문서화한 크로스 배포판 이슈는 그 자체로 참고 가치가 있다. 두 주요 TeX 배포판이 잡네임 플래그를 두고 서로 어긋나기 때문이다. MiKTeX의 mpost(3.00, 2026년 9월 확인)는 -job-name 옵션을 주지 않으면 첫 btex 라벨에서 액세스 위반으로 죽는 반면, TeX Live의 mpost는 그 옵션 표기 자체를 거부하며 잡네임이 파일 이름에서 자동으로 정해지므로 플래그가 필요 없다. 그래서 build.ps1은 MiKTeX를 감지해 플래그를 붙이고, build.sh는 붙이지 않는다. 또한 MiKTeX의 luamplib 패키지(2.42.8)는 luamplib.sty만 담고 정작 필요한 luamplib.lua 모듈을 빼먹어 usepackage가 실패하는데, CTAN의 luamplib.dtx에서 두 파일을 추출해 TEXMF 루트에 함께 두고 파일 이름 데이터베이스를 갱신하면 해결된다. TeX Live는 영향을 받지 않는다. 동일한 소스를 여러 환경에서 굴려야 하는 팀이라면 이런 미세한 비대칭이 빌드 실패의 진짜 원인이 되곤 한다는 사실을 기억할 만하다.

라이선스와 한계도 분명히 해 두는 편이 좋다. 저장소의 소스와 산출 예제는 CC BY-SA 4.0으로 배포되며, 각색할 때는 출처를 밝히고 저장소로 링크를 걸며 변경 사항을 명시하고 같은 라이선스를 적용해야 한다. 반면 fiziko는 이 저장소에 포함되지 않은 별개의 GPL-3.0 의존성으로 남아, 상류 프로젝트가 공개한 조건을 그대로 따른다. 두 라이선스를 혼동하면 파생물 배포에서 문제가 생길 수 있으니, fiziko를 벤더링하지 않고 MPINPUTS로 외부 참조만 걸어 둔 설계 의도를 존중하는 편이 안전하다.

끝으로 이 프로젝트는 스스로를 시대에서 영감을 받은 시각적 처리이지 역사적으로 정확한 복제가 아니라고 못박는다. 실제 17세기, 19세기, 20세기 초 출판물은 인쇄소, 연도, 언어, 종이, 복제 공정에 따라 크게 달랐다. 접근성을 위해 본문 대비를 높게 유지하고 모든 도해 라벨을 텍스트로 남기며 최종 PDF를 래스터화하지 말라는 권고 역시, 심미성만 좇다 문서의 검색 가능성과 가독성을 잃지 말라는 실용적 균형 감각을 보여 준다. 조판 미학을 실험하려는 개발자에게 이 저장소는 완성품 템플릿이라기보다, 효과 하나하나를 분해해 배우는 학습용 해부 표본에 가깝다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/Foadsf/vintage-latex
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...