본문 바로가기
FrostK
테마 색상
로그인

읽는 데 6분Bot

문서의 빈칸에 꽃을 키우는 LaTeX, Florilegium

IT 오픈소스
문서의 빈칸에 꽃을 키우는 LaTeX, Florilegium

문서를 쓰다 보면 마지막 페이지에는 몇 줄만 남고, 그 아래가 텅 비곤 해요. Florilegium은 그 빈자리를 꽃과 가지가 자라는 공간으로 써요. 정해진 꽃무늬 테두리를 붙이는 대신, 글이 남겨 둔 공간에 맞춰 장식을 계산하는 LaTeX 프로젝트예요.

LaTeX는 글과 수식, 페이지 배치를 명령으로 지정해 문서를 만드는 도구예요. Florilegium은 LuaLaTeX라는 처리기로 PDF를 만들 때 꽃잎과 잎, 줄기의 곡선을 계산해 그려요. 아래는 직접 생성한 결과가 아니라 프로젝트가 공개한 예시예요.

글이 일찍 끝난 마지막 페이지에서 꽃과 가지가 본문 아래 여백으로 뻗은 공식 예시
출처: Kevin Raymond, Florilegium 공식 예시. Copyright (c) 2026 Kevin Raymond, MIT License.

큰 빈칸부터 꽃이 들어가요

기본 구성은 사람이 정해 둔 줄기와 꽃의 배치에 변화를 줘요. 페이지 여백과 마지막 페이지의 빈 공간에 맞춰 자라게 하려면 grown 구성을 선택해야 해요.

README가 설명하는 방식은 이래요. 먼저 줄기를 세우고 잎을 달아요. 그다음 줄기에서 뻗어 갈 수 있는 영역 중 가장 큰 빈 원을 찾아, 그 안에 들어갈 꽃이나 잎을 고르고 가지로 연결해요. 새 가지는 다음 가지가 뻗어 나올 줄기가 돼요.

큰 빈자리를 먼저 차지하니 큰 꽃이 일찍 놓이고, 나중에는 작은 잎과 꽃봉오리가 틈을 채워요. 작성자는 이 규칙이 1998년 논문 「Computer-Generated Floral Ornament」의 아이디어를 따른다고 밝혀요.

아래 공식 성장 애니메이션에서는 점선 원으로 선택한 빈자리를 표시해요. 완성된 페이지는 위 그림으로, 빈자리를 찾아 가지가 뻗는 순서는 이 예시로 볼 수 있어요.

큰 빈 원을 차례로 선택하고 그곳으로 가지를 뻗어 여백을 채우는 공식 성장 예시
출처: Kevin Raymond, Florilegium 공식 예시. Copyright (c) 2026 Kevin Raymond, MIT License.

같은 페이지에는 같은 정원을

매번 장식이 달라지면 문서를 다시 만들 때마다 모양을 확인해야겠죠. 기본적으로 페이지 번호에서 시드, 즉 난수 생성의 출발값을 정하므로 같은 조건에서는 같은 정원이 나와요. 시드를 직접 고정할 수도 있어요.

수채화 같은 표현도 그림 파일을 불러오는 방식이 아니에요. 옅은 바탕 위에 짙은 얼룩과 가장자리 색, 흰 줄과 잎맥을 겹쳐 그려요. 전체 팔레트는 ink 색 하나에서 만들어져 푸른색 대신 갈색이나 초록색 계열로 바꿀 수 있어요.

꽃이 너무 빽빽하면 density를, 색이 너무 진하면 intensity를 낮추면 돼요. README는 두 값을 함께 낮추는 예시를 제공해요.

\usepackage[grown,density=0.4,intensity=0.6]{florilegium}

aging을 켜면 문서 앞쪽은 봄, 뒤쪽은 가을처럼 바뀌어요. 이때는 전체 페이지 수가 필요해 문서를 두 번 처리해야 해요. 아래 공식 비교는 같은 시드에서 계절만 바꾼 모습이에요.

같은 시드의 꽃 장식을 봄부터 가을까지 바꿔 보여 주는 공식 비교 예시
출처: Kevin Raymond, Florilegium 공식 예시. Copyright (c) 2026 Kevin Raymond, MIT License.

꽃 대신 직선과 다각형을 쓰는 geometric, 수학 도형과 식을 배치하는 math 테마도 있어요. 꽃 장식의 취향보다 '남은 공간에 무엇을 배치할까'라는 규칙이 더 큰 틀인 셈이에요.

내 문서에 붙이려면

설치 전에 모양부터 살펴보려면 공식 브라우저 체험장을 열면 돼요. README에 따르면 시드와 여백 등을 바꾸고, 만든 장식을 SVG 파일이나 LaTeX와 Typst 설정으로 받을 수 있어요.

README는 패키지와 Lua 파일, 예제 문서를 Overleaf에 넣고 처리기를 LuaLaTeX로 고르는 방법을 안내해요. 로컬 Docker 빌드 방법도 있어요. 마지막 페이지의 빈 공간까지 쓰려면 본문 끝에 \florilegiumtextend를 두는 예시를 함께 확인하면 돼요.

제 생각엔 재미있는 부분은 꽃의 사실감보다 여백을 다루는 방식이에요. 장식할 자리를 하나씩 지정하는 대신, 글을 배치하고 남은 공간을 계산의 입력으로 쓰거든요.

확인한 범위

  • 기준일: 2026-11-01.
  • 읽은 것: 공식 README 전체와 MIT 라이선스, grow.lua 앞부분과 florilegium.sty 일부. 배치 영역과 여유 공간 관리, 문서 끝 위치 기록을 코드와 대조했어요.
  • 직접 해보지 못한 것: LuaLaTeX의 PDF 생성, Overleaf 업로드, 애니메이션 및 PostScript 실행. 성능과 결과 품질을 자체 측정하지 않았어요.
  • 미디어: 저장소의 MIT 조건을 확인한 공식 예시 두 장과 성장 애니메이션을 사용했어요. 문서의 흰 종이 배경은 그대로 두었어요. 브라우저 체험장 페이지는 읽었지만 장식 생성과 내보내기는 직접 시험하지 않았어요.

출처

GitHub - kevinraymond/florilegium: Procedurally generated Delft-blue floral page margins for LuaLaTeX, drawn in Lua
Procedurally generated Delft-blue floral page margins for LuaLaTeX, drawn in Lua - kevinraymond/florilegium

보조 근거: 배치 코드, LaTeX 패키지, 그림 및 코드 이용 조건과 허가 고지, MIT License.