| <colbgcolor=#289cac,#289cac><colcolor=#fff,#fff> Typst 타입스트 | |
| <nopad> | |
| 종류 | 마크업 언어 조판 시스템 |
| 최초 개발자 | Martin Haug(reknih)#, Laurenz Mädje(laurmaedje) |
| 개발 | Typst |
| 출시 | 2023년 4월 4일# |
| 안정 버전 | v0.14.2 (2025년 12월 12일) |
| 개발 언어 | Rust |
| 플랫폼 | Linux, Windows, macOS 월드 와이드 웹 |
| 라이선스 | 아파치 라이선스 2.0# |
| 링크 | |
1. 개요
The new foundation for documents
논문, 보고서 등의 작성에 사용될 수 있는 조판 소프트웨어 및 이에 사용되는 마크업 언어.
LaTeX 등을 대체하면서 보다 배우기 쉽고 활용하기 쉬운 기능을 구현하는 것이 목표다.
2. 특징
LaTeX 대비 패키지 관리 시스템이 강력하다. LaTeX이 워낙 오래전에 개발된 소프트웨어라 패키지 시스템이 다소 현대적이지 않고 외부 패키지 관리가 여러모로 진입장벽이 높은 면이 있다. 그렇다고 자주 쓰이는 패키지를 전부 이것저것 집어넣다 보면 또 그것대로 용량이 커지는 문제가 있는데, TeX Live의 full 스킴 기준 번들 패키지 용량이 기가바이트 단위에 도달하기도 한다.typst init으로 쉽게 남들이 개발하고 배포한 템플릿을 가져와 사용할 수 있다.전반적으로 문서화가 잘 되어 있는 편이다. LaTeX이야 워낙 사실상 표준이라 어딜 가나 사용법, 튜토리얼, 문서 등을 찾아볼 수 있으니 이와 비교 가능한 것은 아니지만, 전반적으로 새로 배우는 사용자 입장에선 reference를 찾아보기 쉬운 형태로 문서가 디자인되어 있다.
소소한 장점으로 높은 이식성을 들 수 있다. LaTeX의 경우 CTAN 등 어느 정도 표준적인 패키지 저장소가 있긴 하지만, 그래도 빌드를 하려면 TeX Live 등 all in one 툴링이나 로컬에 이것저것 여러 도구를 설치하고 패키지를 가져오고.. 하는 과정이 필요하나, typst의 경우는 상대 임포트가 없다면 개별
.typ 소스 하나만 있어도 선언된 패키지를 정적으로 알아내서 첫 빌드 시 자동으로 다운로드가 가능하다. 때문에 typst snippet을 공유할 때 그냥 (import를 포함한) 소스 자체만 공유하여 붙혀넣어도 대부분은 별 문제 없이 적용이 가능하다.여타 현대 조판 언어 구현체들과 마찬가지로 사실상 완벽한 유니코드 지원을 내장하고 있다. 요즘은 LaTeX 생태계도 나아져 한글 들어간 논문 쓴다고 XeTeX, LuaTeX 등에서 온갖 삽질을 할 가능성이 많이 낮아지긴 했으나, 그럼에도 셋업에 따라 여전히 다양한 이슈를 마주하기 쉬운 것이 현실이다. 처음부터 유니코드를 완벽하게 지원하도록 설계된 점이 비영어권 언어 조판 작업을 할 때는 큰 장점이 되는 편. 반대로 이 때문에 TeX에서 되던 여러 이스케이프 문법을 지원하지 않는데, (수식이 아닌) 본문에 다이어크리틱을 넣을 때
\' 같은 문법이 전혀 없고#833 현재 공식적으로는 그냥 유니코드 다이어크리틱을 쓸 것을 권장한다.3. 문법
조판 언어가 아닌 마크업 언어인 만큼 대부분의 문법이 구조적으로 설계되어 있다. 다만 모드 개념을 이해하지 못하면 초반에 조금 헤맬 수 있다. 특히 LaTeX하고 다르게 스타일링이 더 선언적인 형태이기 때문에#set의 동작이 다소 헷갈릴 수 있다.함수 호출이 가장 기본적인 문법이며, 대부분의 자주 쓰이는 ad hoc 문법들은 빌트인 함수를 호출하는 syntactic sugar 형태로 구성되어 있다. 가령 ATX 헤딩에 대응하는
= 헤더 문법은 내부적으로 heading() 함수 호출로 이루어진다. 특히 함수 형태를 사용하면 상황에 따라 추가적인 인자를 전달할 수도 있어 더 정밀한 typesetting이 가능해지는 편.3.1. 함수 및 마크업
기본적으로 Typst의 코어는 프로그래밍 언어이며, 일련의 함수 호출을 조립해 문서를 만드는 식이다. 이 위에 마크업을 쌓은 구조이기 때문에 기본적으로 언어(또는 표현식) 컨텍스트와 마크업 컨텍스트의 두 컨텍스트를 잘 구분하는 것이 좋다. 공식 문서 기준 전자는 code mode, 후자는 markup mode라고 부른다.#특정 함수의 결과를 마크업 문서에 임베딩할 때는
#을 앞에 붙힌다. 가령 #lorem 함수의 결과를 문서에 넣는 경우, #lorem(15)처럼 앞에 #이 들어가야 한다. code mode에서 또 다른 함수를 호출하는 경우, 이미 code mode이기 때문에 #가 필요 없다.반대로, code mode에서 특정 마크업 덩어리를 함수 인자 등으로 전달하고 싶은 경우, 대괄호를 열고 그 안에 마크업 내용을 넣으면 된다. 이를 content block이라고 한다. 가령
#align 함수는 인자로 전달된 마크업을 정렬하는 함수이며, 해당 함수에 입력으로 긴 마크업 텍스트를 전달하고 싶은 경우#align(center)[
= 개요
*나무위키*, 여러분이 가꾸어 나가는 지식의 나무
#image("파일:나무위키 아이콘.svg", width: 70pt)
]
와 같이 대괄호를 열고 임의의 마크업 조각을 넣으면 해당 부분이 중앙 정렬된 채로 보여진다.3.2. 수식
TeX과 마찬가지로 수식 기술용 도메인 특화 언어를 내장하고 있다. 전반적인 기초 문법은 TeX과 상당히 흡사하며, 복잡한 문법으로 갈수록 함수 형태가 자주 쓰인다.TeX과 비슷하게
$로 시작하는 경우 math mode에 진입한다. block의 경우 $$로 시작하는 TeX과 다르게 $ x^2 $ 처럼 $ 앞뒤로 한 칸 공백을 주면 블럭 수식으로 인식하고, $x^2$처럼 붙혀쓰는 경우 인라인으로 인식한다.3.2.1. 분음 기호
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
grave(a) | \grave a | [math(\grave a)] | 그라브 |
acute(a) | \acute a | [math(\acute a)] | 어큐트 |
acute.double(a) | \H a | [math(\H a)] | 더블 어큐트 |
hat(a) | \hat a | [math(\hat a)] | 서컴플렉스 |
tilde(a) | \tilde a | [math(\tilde a)] | 틸데 |
macron(a) | \bar a | [math(\bar a)] | 매크론 |
breve(a) | \breve a | [math(\breve a)] | 브리브 |
dot(a) | \dot a | [math(\dot a)] | 도트 |
diaer(a)dot.double(a) | \ddot a | [math(\ddot a)] | 다이에러시스 (움라우트) |
dot.triple(a) | \dddot a | [math(\dddot a)] | 삼중 도트 |
dot.quad(a) | \ddddot a | [math(\ddddot a)] | 사중 도트 |
circle(a) | \mathring a | [math(\mathring a)] | 오버 링 |
caron(a) | \check a | [math(\check a)] | 캐런 |
arrow(a) | \vec a | [math(\vec a)] | 오른쪽 화살표 |
arrow.l(a) | \overset\larr a | [math(\overset\larr a)] | 왼쪽 화살표 |
arrow.l.r(a) | \overset\harr a | [math(\overset\harr a)] | 양쪽 화살표 |
harpoon(a) | \overset\rightharpoonup a | [math(\overset\rightharpoonup a)] | 오른쪽 작살표 |
harpoon.lt(a) | \overset\leftharpoonup a | [math(\overset\leftharpoonup a)] | 왼쪽 작살표 |
3.2.2. 첨자
위(t), 아래(b), 좌측 위(tl), 좌측 아래(bl), 우측 위(tr), 우측 아래(br) 총 여섯 가지의 첨자 위치가 존재한다.^, _ 문법은 내부적으로 attach() 함수의 syntactic sugar이며, 각각 t/b로 간주된다. t/b의 경우 smart positioning 알고리즘을 사용할 경우 위치가 겹치는 별도의 첨자가 없을 시 각각 tl/bl로 렌더되지만 limits, scripts 등으로 각각 극한 표기, 첨자 표기를 강제할 수 있다.| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
x^2 | x^2 | [math(x^2)] | 위첨자 |
x_i | x_i | [math(x_i)] | 아래첨자 |
attach(a, tl: b) | {}^ba | [math({}^ba)] | 좌첨자 (군론, 테트레이션 연산 표기, 화학식 표기 등) |
attach(A, tl: 0, bl: 2) | {}^0_2A | [math({}^0_2A)] | |
attach(x, t: alpha, tr: beta) | \overset\alpha{x^\beta} (KaTeX상 대응 불가) | [math(\overset\alpha{x^\beta})] | 위첨자 위치가 겹칠 시 자동으로 위치 정렬 |
product^a_b | {\displaystyle\prod}^a_b | [math({\displaystyle\prod}^a_b)] | 위, 아래첨자만 지정된 경우 (smart positioning 사용) |
limits(product)^a_b | \displaystyle\prod^a_b | [math(\displaystyle\prod^a_b)] | 극한 표기로 강제 |
3.2.3. 다항계수
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
binom(n, k) | \binom nk | [math(\dbinom nk)] | 이항계수 |
binom(n, k_1, k_2, k_3, ..., k_m) | n \choose k_1, k_2, \dots, k_m | [math(\displaystyle{n \choose k_1, k_2, \dots, k_m})] | 다항계수 |
3.2.4. 분수
/ 기호를 넣어a/b와 같이 간단히 분수를 만들 수 있다. 분모 또는 분자에 긴 표현식이 들어 간다면 괄호로 감싸야 하며, 이 괄호는 분수 문법의 일부로 인식되어 렌더되지 않는다. 괄호를 표시해야 하는 경우, 괄호를 두 번 겹쳐 표시할 수 있다. / 기호 주변의 공백은 영향을 끼치지 않는다.| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
a/b | \frac ab | [math(\dfrac ab)] | 분수 |
(n(n + 1)) / 2 | \frac{n(n + 1)}2 | [math(\dfrac{n(n + 1)}2)] | 분자가 표현식인 분수 |
((n(n + 1))) / 2 | \frac{(n(n + 1))}2 | [math(\dfrac{(n(n + 1))}2)] | 괄호 강제 |
참고로 / 기호를 그대로 표시하고 싶은 경우(quotient 등),
a slash b와 같이 심볼 식별자를 직접 입력하거나 a \/ b와 같이 이스케이핑을 하면 된다.3.2.5. 행렬
기본적으로 ,로 열을 나누고 ;으로 행을 나눈다. 괄호의 종류는delim: 인자로 지정할 수 있다.#!wiki
||<tablewidth=100%><tablebordercolor=#239dad><tablebgcolor=transparent><rowkeepall><rowbgcolor=#239dad><rowcolor=#fff,#fff> '''Typst''' || '''TeX 대응''' || '''렌더''' || '''설명''' ||
|| {{{mat(a, b; c, d)}}} || {{{\begin{pmatrix} a & b \\ c & d \end{pmatrix}}}} || [math(\begin{pmatrix} a & b \\ c & d \end{pmatrix})] || 행렬 ||
||{{{#!wiki style="margin: -20px -10px"
{{{mat(delim: "[",
x_11, x_12, ..., x_(1n);
x_21, x_22, ..., x_(2n);
dots.v, dots.v, dots.down, dots.v;
x_(m 1), x_(m 2), ..., x_(m n);
)}}}}}} ||{{{#!wiki style="margin: -20px -10px"
{{{\begin{bmatrix}
x_{11} & x_{12} & \cdots & x_{1n} \\
x_{21} & x_{22} & \cdots & x_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
x_{m1} & x_{m2} & \cdots & x_{mn}
\end{bmatrix} }}}}}} || [math(\begin{bmatrix}
x_{11} & x_{12} & \cdots & x_{1n} \\
x_{21} & x_{22} & \cdots & x_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
x_{m1} & x_{m2} & \cdots & x_{mn}
\end{bmatrix})] || 행렬 (대괄호) ||만약 항상 한쪽 종류의 괄호만 쓴다면 매번
delim:을 입력할 필요 없이 문서 상단에 math.mat(delim: "[")을 해주면 된다.3.2.6. 프라임
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
f' | f' | [math(f')] | 프라임 |
f'' | f'' | [math(f'')] | 고계도함수 |
3.2.7. 근호
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
sqrt(b^2 - 4 a c) | \sqrt{b^2 - 4ac} | [math(\sqrt{b^2 - 4ac})] | 제곱근 |
root(3, a + b) | \sqrt[3]{a + b} | [math(\sqrt[3]{a + b})] | 세제곱근 |
root(n, x) | \sqrt[n]x | [math(\sqrt[n]x)] | n제곱근 |
3.2.8. 폰트
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 |
serif(A B C D E F) | ABCDEF | [math(ABCDEF)] | 로만 이탤릭 세리프. 기본값이다. |
sans(A B C D E F) | \mathsfit{ABCDEF} | [math(\mathsfit{ABCDEF})] | 이탤릭 산세리프 |
frak(A B C D E F) | \frak{ABCDEF} | [math(\frak{ABCDEF})] | 블랙레터(프락투어) |
mono(A B C D E F) | \tt ABCDEF | [math(\tt ABCDEF)] | 고정폭 |
bb(A B C D E F) | \mathbb{ABCDEF} | [math(\mathbb{ABCDEF})] | 칠판체 |
cal(A B C D E F) | \mathcal{ABCDEF} | [math(\mathcal{ABCDEF})] | 흘림체 |
Typst 파서상
AB와 같이 문자를 붙여 쓰면 하나의 심볼로 인식되므로 개개의 문자로 인식시키기 위해서는 A B와 같이 띄어 써야 한다.3.2.9. 이름있는 기호
TeX의\mathrm, \operatorname 등에 대응하는 문법. 상술한 바와 같이 Typst는 기본적으로 각 문자를 공백을 기준으로 띄어쓰며 [math(A B)]처럼 붙여쓰기(juxtaposition) 표기를 하려면 소스는 A B처럼 써야 하기 때문에, AB라고만 입력하면 하나의 식별자로 인식되어 정의되지 않은 함수 호출로 오류가 발생한다. 이름 자체가 AB라는 기호를 입력하려면 따옴표를 사용해 "AB"처럼 입력하면 되며, 이 경우 기본적으로 upright/로만체로 보여진다.가령, 자기 동형 사상군 [math(\mathrm{Aut}(X))]를 표기한다면
"Aut"(X)처럼 적으면 된다. \mathrm과 달리 괄호를 쓰지 않고 띄어 써도 자동으로 적절한 공백이 삽입된다. 가령 [math(\operatorname{Spec} K)]를 쓰고 싶다면 "Spec" K와 같이 적으면 된다.사전 정의된 기호는 다음과 같다. TeX 열은 KaTeX에 등록된 심볼 기준이다.
| <rowcolor=#fff,#fff> Typst | TeX 대응 | 렌더 | 설명 | Typst | TeX 대응 | 렌더 | 설명 |
arccos | \arccos | [math(\arccos)] | 아크코사인 | lcm | \mathrm{lcm} | [math(\mathrm{lcm})] | 최소공배수 |
arcsin | \arcsin | [math(\arcsin)] | 아크사인 | lg | \lg | [math(\lg)] | 로그 표기 |
arctan | \arctan | [math(\arctan)] | 아크탄젠트 | lim | \lim | [math(\lim)] | 극한 |
arg | \arg | [math(\arg)] | 편각 | liminf | \liminf | [math(\liminf)] | 하극한 |
cos | \cos | [math(\cos)] | 코사인 | limsup | \limsup | [math(\limsup)] | 상극한 |
cosh | \cosh | [math(\cosh)] | 쌍곡 코사인 | ln | \ln | [math(\ln)] | 자연로그 |
coth | \coth | [math(\coth)] | 쌍곡 코탄젠트 | log | \log | [math(\log)] | 로그 |
cot | \cot | [math(\cot)] | 코탄젠트 | max | \max | [math(\max)] | 최대 |
csch | \mathrm{csch} | [math(\mathrm{csch})] | 쌍곡 코시컨트 | min | \min | [math(\min)] | 최소 |
csc | \csc | [math(\csc)] | 코시컨트 | mod | \mod, \bmod | [math(\bmod)] | 나머지, 합동식 |
ctg | \ctg | [math(\ctg)] | 코탄젠트 관용표기 | Pr | \Pr | [math(\Pr)] | 확률, 확률변수 |
deg | \deg | [math(\deg)] | 각도, 차수 등 | sec | \sec | [math(\sec)] | 시컨트 |
det | \det | [math(\det)] | 행렬식 | sech | \mathrm{sech} | [math(\mathrm{sech})] | 쌍곡 시컨트 |
dim | \dim | [math(\dim)] | 차원 | sin | \sin | [math(\sin)] | 사인 |
exp | \exp | [math(\exp)] | 자연로그의 밑의 거듭제곱 | sinc | \mathrm{sinc} | [math(\mathrm{sinc})] | sinc 함수 |
gcd | \gcd | [math(\gcd)] | 최대공약수 | sinh | \sinh | [math(\sinh)] | 쌍곡 사인 |
hom | \hom | [math(\hom)] | 사상 | sup | \sup | [math(\sup)] | 최소상계 |
id | \mathrm{id} | [math(\mathrm{id})] | 항등사상 등 | tan | \tan | [math(\tan)] | 탄젠트 |
im | \mathrm{im} | [math(\mathrm{im})] | 상 | tanh | \tanh | [math(\tanh)] | 쌍곡 탄젠트 |
inf | \inf | [math(\inf)] | 최대하계 | tg | \tg | [math(\tg)] | 탄젠트 관용표기 |
ker | \ker | [math(\ker)] | 핵 | tr | \mathrm{tr} | [math(\mathrm{tr})] | 주대각합 |
기본적으로 대소문자를 구분하며, 가령
hom(A, B)는 되어도 Hom(A, B)는 지원되지 않는다. 이런 경우 "Hom"(A, B)로 작성해야 한다.보다시피 이항 형태의
\bmod와 공백 포함인 \mod 및 괄호까지 포함인 \pmod가 별도의 매크로인 TeX과 달리 mod 하나밖에 없다. 이항인 경우 a mod b와 같이 쓰면 되며 합동식을 쓰는 경우 a equiv b (mod n)처럼 괄호를 수동으로 넣으면 될 것 같지만 실제로는 공백이 하나도 들어가지 않아 문제가 있다. 이 경우 공백을 수동으로 입력해 줘야 하는 수고가 있는데, 정해진 공백은 딱히 없고 취향대로 thin, med, thick, space 중 적당한 것을 넣으면 된다. \pmod 기본 공백과 가장 가까운 것은 thick이다. 이 경우, 최종적으로는 a equiv b thick (mod n)처럼 사용하면 된다.아래는 일반적으로 TeX 환경에서는 내장되어 있으나 현재 Typst에서는 기본 내장하지 않는 이름있는 기호들이다.
- [math(\argmax)](
\argmax), [math(\argmin)](\argmin)#7424 - [math(\arcctg)](
\arcctg), [math(\arctg)](\arctg), [math(\cosec)](\cosec), [math(\cotg)](\cotg), [math(\cotg)](\cotg), [math(\sh)](\sh) - [math(\projlim)](
\projlim), [math(\varprojlim)](\varprojlim), [math(\injlim)](\injlim), [math(\varinjlim)](\varinjlim), [math(\varlimsup)](\varlimsup), [math(\varliminf)](\varliminf) - 특히 현재 역극한/유향극한 중 화살표 표기법을 쓰기 정말 쉽지 않다. lim sup/inf는 over로 비슷하게 구현이 가능하지만 전자의 경우#op에 limits를 넣어도 화살표가 잘 안 늘어나기 때문에 쉽지 않은 상황.#
3.3. 심볼
웬만한 심볼은#sym에서 찾아볼 수 있다.LaTeX과 다르게 symbol 내장 지원이 체계적이고, 특히 이름 짓는 방식이 LaTeX에 비하면 굉장히 직관적이고 체계적이다.
| |
내장 #sym의 인테그랄(적분) 기호 및 variants 예시 |
LaTeX은 특성상 symbol 이름에 약어가 잔뜩 들어가고 자기들 나름의 작명 규칙이 있는 반면, typst는 변수명 짓듯이 가독성을 우선해서 지으며 기본적으로
.을 네임스페이스처럼 써서 비슷한 기호의 variants끼리 묶는다. 당연히 LaTeX에 친숙하다면 간결(?)한 \int, \oint, \iint 등이 너무 익숙해져서 오히려 typst가 길고 번거롭게 느껴질 수도 있으며, 실제로 저 긴 심볼명이 다 들어가는 수식을 타이핑하고 있으면 생각보다 번거롭다. 물론 필요하다면 #let으로 이름을 원하는 대로 바꾸어 쓸 수 있으니 큰 상관은 없다.LaTeX 기본 심볼보단 커버리지가 살짝 넓은 편이다.
amssymb처럼 사실상 반 필수적으로 들어가는 외부 패키지 사용도 적은 편. 다만 결국 내장 심볼은 좀만 요구사항이 늘어나면 LaTeX과 크게 차이가 나지 않는다. 당장 소문자 double strock(Bbbk 등)부터 유니코드에 내장되어 있음에도(MATHEMATICAL DOUBLE-STRUCK SMALL KCode Point: U+1D55C) 내장을 안 하고 있다.4. 인용 정보
참고문헌(bibliography)을 작성하는 경우#bibliography() 함수를 사용한다. 지원되는 서지 파일 포맷은 BibTeX과 자체 형식이자 YAML 기반의 Hayagriva를 지원하지만, 개발이 더뎌 아직은 본격적으로 사용하기는 어렵다.지원되는 인용/양식은 style 인자 표 참고. 대부분의 유명 양식은 alias가 지원된다[1]. 예를 들어
"american-psychological-association"라고 쓰는 대신에 "apa"라고 쓰는 식. 필요한 경우 임의의 CSL 파일도 지원된다.5. 패키지 시스템
LaTeX과 다르게 필수적인 기능들은 대부분 내장 지원되는 편이지만, 여전히 요구사항이 조금만 복잡해지면 패키지를 사용하는 것이 좋다.패키지는 기본적으로 문서에
#import를 넣으면 컴파일 시 자동으로 다운로드 및 로드된다. 일반적으로 다음 syntax를 사용한다."@preview/namu-pkg1:0.1.0": 항목1, 항목2, 항목3항목1, 항목2 등에는 불러와 사용할 함수 식별자 등을 입력한다. 패키지 내 모든 public item을 전부 불러오는 경우 아래 예시처럼 *를 적으면 된다. 참고로 *를 사용할 때 일부 item만 제외하고 나머지 전부를 불러오는 것은 불가능하다.#3068 이런 경우나 이름 충돌을 해결해야 하는 경우 마지막 예시처럼 as 를 통해 모듈로 불러오고 명시적으로 모듈명을 붙혀서 사용하면 된다.CTAN처럼 공식 패키지 저장소로 Universe가 있으며,
@preview/ 네임스페이스가 붙은 외부 패키지들은 전부 Universe에 올라간 패키지를 뜻한다.5.1. 주요 패키지
- CeTZ: TikZ 표지션. 정말 TikZ랑 비슷한 구현이라고 생각하면 좋으며, 직접 쓸 필요는 없더라도 CeTZ 의존성이 있는 패키지를 다루면 접하기 쉽다.
- fletcher: 가환 다이어그램이나 간단한 다이어그램을 그리기 위한 패키지. CeTZ 기반이다. 그런 의미에선
tikz-cd와 비슷하다고 볼 수 있다. - theorion: LaTeX
amsthm과 비슷한 포지션으로,\begin{thm},\begin{proof}등 친숙한 environment랑 대응되는#theorem[],#proof[]등 함수를 제공한다. 기본적으로 predefined된 스타일셋이 있는데, 이를 cosmos 폴더에 담아두고 있다. 이중 하나를 골라서 적용하려면#show: show-theorion전에 cosmos.스타일: *을 먼저 해주어야 한다. - touying: 슬라이드 제작용, 즉 LaTeX의
beamer와 비슷한 포지션이다. 슬라이드 제작 쪽 패키지 중에선 polylux 등 몇몇 패키지와 함께 가장 유명한 쪽이다. - mannot: 수식 강조 및 annotation 삽입용.
6. HTML 지원
현재 Typst의 큰 약점 중 하나라고 볼 수 있다. 아예 불가능한 건 아니고 shiora처럼 experimental한 프로젝트도 있긴 하지마 제너럴하게 쓰기는 확실히 부족한 상황.7. 소프트웨어별 지원
typst 코어는 컴파일러 바이너리 하나만 있으면 충분하기 때문에 웬만한 환경에서 로컬로 작업할 수 있다. CTAN처럼 외부 패키지를 쓸 때만 네트워크를 사용하면 된다.언어 서버 프로토콜 구현체로 tinymist#가 존재한다. Visual Studio Code에서는 이를 감싼 확장을 사용할 수 있다.
JetBrains 제품에서는 쓸만한 플러그인이 거의 없는데 현재는 IDEA 2025.3.3 이상을 똑바로 지원하는 플러그인이 드물다.
Zed에도 tinymist기반 확장이 존재하지만 현재 Zed 플러그인 시스템의 제약으로 인에디터 프리뷰는 구현이 불가능하다.#11 적당히 외부 PDF 뷰어를 띄울 수만 있다면 기본 기능은 전부 tinymist와 동일하기 때문에 vscode 수준으로 쓸만한 편.
웹 버전도 존재하는데, Overleaf 등 LaTeX 기반 상용 제품과 비슷한 느낌의 인터페이스를 떠올리면 좋다. 당연히 성향에 따라 자유도가 낮게 느껴질 수도 있고, 오히려 웹으로 바로 사용할 수 있어 접근성이 좋게 느껴질 수도 있다. 전형적인 오픈 소스 기반 상용화와 마찬가지로 웹 버전은 오픈 소스가 아닌 Typst 팀의 사유 서비스임에 유의.
LaTeX이 익숙하다면 당연히 적응하기 어려운데, cheatsheet나 컨버터 같은 걸 이용하면 좋다. 이 외에도 오픈소스로 된 게 여럿 있으니 찾아보자.
8. 기타
- 공식적인 읽는 방법은 /taɪpst/로, 타입스트 또는 타이프스트에 가깝게 읽으면 된다.#@
- Typst 최초 개발자가 독일인들이라 본사가 베를린에 있다.
- 로컬 빌드 시 폰트 디버깅에 좋은 명령어로
typst fonts가 있다. 놀랍게도 typst CLI는 아직까지 문서화되어 있지 않다.#3765
[1] 기본 서식은 IAAA다