Lobsters

Quarkdown: Turing-complete Markdown typesetting system

Quarkdown: 튜링 완전한 Markdown 조판 시스템

Quarkdown은 CommonMark와 GFM을 확장해 함수, 변수, 조건문, 반복문을 제공하는 Markdown 기반 조판 시스템입니다. 하나의 소스에서 책·논문·문서 사이트·프레젠테이션·PDF 등을 생성할 수 있으며, 라이브 미리보기와 빠른 컴파일을 지원합니다.

AI 요약

Quarkdown은 익숙한 Markdown 문법을 기반으로 문서 작성과 조판을 함께 처리하는 시스템입니다. CommonMark와 GitHub Flavored Markdown(GFM)을 확장한 ‘Quarkdown Flavor’에 함수 호출, 변수, 조건문, 반복문, 입출력, 수학 기능 등을 추가했으며, 프로젝트는 이를 튜링 완전한(Turing-complete) Markdown 확장으로 설명합니다. 따라서 일반적인 Markdown 문서뿐 아니라 반복되는 콘텐츠를 추상화한 재사용 가능한 컴포넌트와 동적인 문서 구조까지 하나의 소스 안에서 구성할 수 있습니다.

■ Markdown 안에서 사용하는 함수와 스크립팅

함수는 `.somefunction {arg1} {arg2}`와 같은 형태로 호출하며, 들여쓴 본문을 인자로 전달할 수 있습니다. 사용자가 직접 함수와 변수를 정의하는 것도 지원합니다. 예를 들어 `.greet {world} from:{iamgio}`를 호출하면 함수 본문에 정의된 `to`와 `from` 값이 치환되어 “Hello, world from iamgio!”라는 결과를 만듭니다. 프로젝트 설명에 따르면 표준 라이브러리에는 레이아웃 빌더, 입출력, 수학 연산, 조건문, 반복문이 포함되어 있으며, 사용자가 다른 사람과 공유할 라이브러리를 만들 수도 있습니다. 반복되는 콘텐츠를 한 줄짜리 함수 호출로 바꾸는 방식이 핵심 재사용 단위입니다.

이 확장은 정적인 Markdown을 렌더링하는 수준을 넘어, 문서 생성 과정 자체를 소스에 표현하려는 접근입니다. 문서의 레이아웃, 미관, 속성과 출력 형식도 언어 내부에서 설정할 수 있습니다. 기본적으로 시스템 자원에 대한 접근을 제한하는 권한(permission) 체계를 제공해 보안을 기본값으로 둔다고 설명합니다.

■ 하나의 소스에서 여러 문서 형식으로 출력

Quarkdown은 한 프로젝트를 인쇄용 책, 학술 논문, 지식 베이스, 인터랙티브 프레젠테이션 등으로 컴파일하는 것을 목표로 합니다. `doctype` 함수를 소스에 넣어 출력 유형을 지정할 수 있으며, 기본값은 `plain`입니다. `paged`는 paged.js를 이용해 페이지 기반 HTML을 만들고 논문·기사·책에 사용할 수 있습니다. `slides`는 reveal.js 기반의 인터랙티브 프레젠테이션을 만들며, `docs`는 위키와 기술 문서처럼 큰 지식 베이스를 위한 형식입니다.

지원 대상으로는 연속적인 HTML과 일반 텍스트, 페이지형 HTML, 슬라이드, 문서 사이트, PDF, GFM Markdown, plain text가 제시되어 있습니다. PDF 내보내기는 HTML에서 지원하는 문서 유형과 기능을 대상으로 하며, PDF 생성을 위해 Chrome 계열 브라우저 또는 `chrome-headless-shell`이 필요합니다. 프로젝트 비교표는 Quarkdown의 대상으로 HTML, PDF, Markdown, TXT를 제시하고, LaTeX·Typst·AsciiDoc·MDX와 함께 간결성, 문서 제어, 스크립팅, 책·기사·프레젠테이션·정적 사이트·문서 사이트 출력 여부를 비교합니다. 이 표에서 Quarkdown은 각 항목을 모두 지원하는 것으로 표시되어 있지만, 비교 대상별 지원 범위는 항목마다 다르게 표시되어 있습니다.

■ 개발 환경과 CLI

공식적으로 VS Code 지원을 제공하며, IntelliJ IDEA용 비공식 지원도 안내합니다. 라이브 미리보기와 빠른 컴파일을 주요 기능으로 내세우며, 공식 위키는 100개 이상의 하위 문서로 구성되어 있고 약 2초 만에 컴파일된다고 설명합니다. 명령줄에서는 `quarkdown create [directory]`로 메타데이터와 초기 콘텐츠가 포함된 프로젝트를 대화형으로 만들 수 있습니다. `quarkdown c file.qd`는 지정한 소스 파일을 컴파일하고 결과를 저장하며, 여러 소스 파일로 구성된 프로젝트에서는 다른 파일을 포함하는 루트 파일을 대상으로 지정해야 합니다.

`quarkdown repl`은 언어를 대화형으로 시험할 수 있는 REPL 모드입니다. `-p` 또는 `--preview`는 컴파일 이후 콘텐츠를 자동으로 다시 불러오는 미리보기를 활성화하고, `-w` 또는 `--watch`는 소스 디렉터리의 파일 변경 때마다 재컴파일합니다. 두 옵션을 함께 사용하면 라이브 미리보기 구성이 됩니다. `--pdf`는 PDF 파일을 생성합니다. 설치 방법으로는 Linux용 설치 스크립트, Homebrew, Windows용 PowerShell 및 Scoop, 수동 설치가 제공되며, GitHub Actions에 쉽게 통합할 수 있는 별도의 설정도 안내합니다. Linux 설치 스크립트는 root 권한을 사용해 `/opt/quarkdown`과 `/usr/local/bin/quarkdown`에 설치하며, PDF 내보내기에 필요한 브라우저도 자동으로 설치합니다.

■ 예제와 라이선스

`Mock`은 Quarkdown으로 작성된 시각 요소 모음으로, 언어의 기능을 실제 페이지나 슬라이드 결과물과 함께 탐색하도록 구성되어 있습니다. 소스는 `mock` 디렉터리에 있으며 `quarkdown c mock/main.qd -p`로 컴파일할 수 있습니다. 프로젝트는 GitHub Actions 설정, 빠른 시작 문서, 위키, 기여 안내와 함께 제공됩니다. 기본적으로 Quarkdown과 모듈은 GNU GPLv3를 따르지만, CLI(`quarkdown-cli`)와 Language Server(`quarkdown-lsp`) 모듈 및 바이너리는 GNU AGPLv3를 사용합니다.

■ Lobsters 반응

• @ur5us — Quarkdown의 작성자님, 만들어 주셔서 감사합니다. 확실히 흥미롭고 매우 매력적으로 보입니다. README와 웹사이트에서는 LaTeX와 Typst를 모두 언급하고 있습니다. 저는 두 가지를 모두 사용했는데, LaTeX는 학사·석사 논문, 논문, 편지를 작성할 때 사용했고 Typst는 최근 법원 문서와 편지를 작성할 때 사용했습니다. (La)TeX의 문법과 매크로는 복잡하고 학습 곡선이 매우 큽니다. Typst는 이를 해결하려고 하며 확실히 더 쉽지만, 여전히 학습 곡선은 있습니다. 이 글은 여러 측면을 설명하고 있습니다. 이에 비해 작성자님은 Markdown을 확장하고 그 상위 집합(superset)을 구축하는 방식을 선택했습니다. 이제 문법에 대한 설계 철학과 엔진이 내부적으로 어떻게 동작하는지 궁금합니다. 혹시 이미 어딘가에 언급되어 있는데 제가 사이트와 README를 대충 훑어봐서 놓친 것이라면 양해 바랍니다. 전반적으로 Quarkdown이 Typst, 그리고 Sile과 어떻게 비교되는지도 궁금합니다. 제가 보기에는 특히 Typst를 중심으로 상당한 추진력이 형성되고 있습니다. Quarkdown의 미래에 대해서는 어떻게 생각하시나요?

원문: GitHub Quarkdown README, Lobsters / 번역·요약: Trawling