혹시 Latex에 대해서 알고 계신가요? 논문을 써보신 적이 있으시다면 한 번 들어보셨을 겁니다. Latex는 문서작성 을 위한 프로그래밍 언어 입니다.
Typst는 Latex의 확장편입니다. Typst를 사용하면 Latex보다 쉽게 문서를 작성할 수 있습니다.
Typst 홈페이지 입니다.
awesome Typst 에는 확장 프로그램이 잘 정리되어 있습니다.
아뇨 있습니다. 그럼에도 여기에 새로 글을 쓰는 이유는 두가지가 있습니다.
개인적으로 제가 colemak 자판을 연습하고 싶기도 합니다.
홈페이지로 가셔서 계정을 만드시고 어디에서 든지 문서를 작성해보세요.
macOS/Linux: brew install typst
Arch Linux: pacman -S typst
Void Linux: xbps-install typst
Windows Package Manager: winget install --id Typst.Typst
확장자명은 typ입니다.
typ 파일을 pdf로 바꾸기
typst compile path/to/source.typ path/to/output.pdf
typ 파일이 바뀔 때 마다 pdf로 변환하기
typst watch file.typ
폰트 추가하기
# 내 폰트로 pdf파일 변환하기 typst --font-path path/to/fonts compile file.typ # 여태까지 찾은 모든 모든 폰트 목록 typst --font-path path/to/fonts fonts # 환경 변수 이용하기 (리눅스 문법의 경우) TYPST_FONT_PATHS=path/to/fonts typst fonts
실시간 파일 변환을 원하시면 공식 웹사이트나 타입스트 라이브를 사용하실 수 있습니다.
일반적으로 글을 쓰고 싶으시다면 그냥 텍스트만 적으셔도 됩니다.
줄바꿈은 \ 입니다.
Typst는 Markdown과 유사한 마크업(특수 기호)도 포함하고 있습니다.
유의할 점은 Typst에서 표제 기호는 Markdown처럼 #이 아니라 = 이라는 점입니다. #는 함수를 위해 사용합니다.
아래는 간단한 목록 예시입니다.
웹 버전의 편집기를 사용하신다면 간단하게 사이드바를 여신 후 사진 파일을 올리시면 됩니다. 개인 컴퓨터에서 작성하시는 경우에는 같은 폴더 내에 사진을 위치 시켜 주시면 됩니다.
사진을 추가하기 위해서 우리는 또 다른 마크업(특수기호)을 쓰지 않습니다. 예시를 들자면 !@@# 이미지 링크 !@@# 가 있겠네요. 만약 우리가 모든 기능에 대해서 서로 다른 마크업 기호를 사용한다면 그거를 외우는 일은 고될겁니다.
그래서 우리는 함수 마크업 기호 # 랑 함수를 사용합니다.
#image("이미지 파일 주소")
#을 쓰는 순간 타입스트는 "유저가 평범한 본문이 아니라 함수를 쓰려고 하는 구나" 라고 판단합니다.
사진을 예쁘게 꾸미기 위해서 우리는 image 함수를 figure함수로 감쌀 수 있습니다.
caption: [
_Glaciers_ form an important part
of the earth's climate system.
],
위 코드를 보시면 caption에게 마크업 기호를 사용한 본문을 값으로 주기 위해 대괄호로 감싸는 것을 보실 수 있습니다. 이렇게 대괄호로 [요 부분] 을 콘텐츠 블록 이라고 합니다.
Typst에서는 쉽게 참조하실 수 있습니다.
위 처럼 figure 아래에 <꺽쇠 단어>를 적어주시고
본문에서 @꺽쇠안에 쓴 단어 를 적어주시면 됩니다.
콘텐츠 블록을 왜 쓰나요??
그 이유는 콘텐츠 블록에는 문자열, 마크업 기호, 다른 함수 등등을 넣을 수 있기 때문입니다. 정말로 무엇이든 다 넣을 수 있는 블록인 셈이죠. Typst에는 기본적으로 변수 타입이 존재합니다. 우리가 image() 함수에서 문자열인 "사진파일이름.jpg" 를 주는 이유도 그것입니다.
Typst는 BibLaTeX나 Hayagriva 파일을 기초로 하여 간단하게 참고문헌을 표시할 수 있습니다. 하지만 제가 BibLaTeX에 대해 아는 게 없어서 링크만 첨부하고 넘어가겠습니다.
우리는 간단하게 Markdown 처럼 $ 수학공식 $ 를 사용할 수 있습니다.
수학 공식만 따로 다른 줄에 쓰고 싶으시다면 빈줄로 감싸주세요 이렇게요.
Typst에서 Q나 A v같은 문자는 일반 문자로 인식하고 rho 같은 것들은 그리스문자로 인식합니다. 그리고 문자들간의 곱셈 으로 표기하고 싶으시다면 빈칸 으로 각 문자들을 띄어주세요. 그리고 문자열은 "문자열" 로 쓰실 수 있습니다.
더 많은 수학 기호들은 수학기호들을 참고해주세요.
서식을 만들기란 글꼴 크기 조절하기, 중앙 정렬 하기 등등을 일컫습니다.
여러분께서 본문을 간단히 가운데 정렬하고 싶으면 어떻게 해야할까요? 한글이나 워드에서는 간단히 가운데 정렬을 누르면 되지만 프로그래밍 언어에서는 그럴 수가 없습니다.
개발자의 평범한 생각이라면..
그렇기에 Typst도 똑같은 방식으로 본문을 정렬할 수 있습니다.
위 사진을 설명하겠습니다.
왜 두번째 인자인 콘텐츠 블록을 맨 마지막에 [콘텐츠 블록] 으로 넣는 건가요? ()안에 justify: true와 함께 적으면 안되나요?
왜냐하면 콘텐츠 블록은 특별하기 때문입니다. 우리는 함수를 쓸 때 아마도 콘텐츠 블록을 많이 사용 할 겁니다. 그럴 때 마다
#par (justify: true , [콘텐츠 블록]) 처럼 함수를 쓰는 것은 가독성이 좋지 않고 쉼표를 많이 씁니다.
근데 모든 문단을 이런식으로 관리한다면 그건 너무 힘든 일 일겁니다. 우리의 문서에 1000개의 문단이 있다고 생각하시면 1000개의 함수를 적어야 하는 거니까요.
#set par(justify: true)
문서 최상위에 써진 set 마크업 단어는 전체 문서에 영향을 끼칩니다.
그와 반대로
이런 식으로 블록 내에서만 set 마크업 단어를 쓸 수 있습니다.
Typst 웹사이트는 자동 완성을 지원합니다. 이거 이거 아주 편하답니당.
우리는 이제 set 마크업 단어를 이용해서 모든 걸 설정할 수 있습니다. set 마크업 단어와 주로 쓰이는 기능들이 있습니다.
#set text(
font: "New Computer Modern",
size: 10pt
)
글꼴 설정하기
글꼴 크기 설정하기
또한 Heading의 모양을 바꿔 줄 수도 있습니다. 아래 처럼요.
show 규칙은 간단히 말해서 바꿔치기 혹은 보여주기 입니다.
이런 식으로 단어를 다른 단어로 바꿔치거나 다른 모양으로 바꿔칠 수 있습니다!
Typst에서는 마크업이 코드입니다. 즉, #을 앞에 붙여서 코딩을 하시면 됩니다.
한 줄 씩 # 를 쓰는 것은 번거롭습니다. 우리는 두가지의 서로 다른 블록을 사용할 수 있습니다.
{ let x = 1; x + 2 }
변수를 만들고 연산자를 사용해서 프로그램을 작성할 수 있습니다. 각 표현식은 ; 이나 줄바꿈으로 구분되어야 합니다. 코드블록은 템플릿을 만들 때 주로 사용됩니다.
[ *이것은* 콘텐츠 블록입니다!]
우리는 변수에 콘텐츠 블록을 할당할 수 있습니다. 그리고 코드 블록과 콘텐츠 블록은 서로 얼마든지 중첩해서 쓸 수 있습니다. 그 말인 즉 코드 블록안에 콘텐츠 블록안에 콘텐츠 블록을 넣는 게 가능하다는 뜻입니다. 러시아 인형 마트료시카처럼요.
위 코드를 보면 일단
1. # {} 로 코드 블록을 만들었습니다.
2. a, b 에 각각 콘텐츠 블록을 할당해줬습니다.
3. 각각의 콘텐츠 블록을 연결해줬습니다.
다음과 같은 시험 레포트 형식을 받았다고 생각해봅시다.
먼저 문서 최상단에 set 규칙을 적어보겠습니다.
첫번째 세팅에서는 이 항목을 완료했네요.
두번째 세팅에서는 이 항목을 완료했고요.
세번째 세팅에서는 이 항목을 마지막으로 완료했습니다.
위 항목을 만족해야 하군요.. 한 번 적어봅시다.
제목은 이렇게 적는 게 어떨까요?
이참에 저자 목록도 만들어 볼까요?
우리는 여기서 Grid 함수를 사용했습니다. 1fr 1fr 은 각 문단을 가로로 1:1 비율로 나눠줬음을 뜻합니다.
이제 초록을 만들어 볼까요?
초록은 왼쪽과 오른쪽 여백이 동일하라는 지시가 없으니 justify 항목을 거짓으로 만들었습니다.
제목 같은 많이 쓰는 문장은 변수로 지정해주는 게 훨씬 편하지 않을까요? 이렇게요.
논문속 본문을 2열로 만들어 볼까요? 이때 우리는 columns 함수를 사용할 수 있습니다. 초록 다음에 작성되는 나머지 문서 를 2열로 만들고 싶을 때 우리는 show 규칙을 사용할 수 있습니다. 더 많은 show 규칙을 알고 싶으시면 여기를 나중에 클릭해주세요. 우리는 일단 지금 아래 용법만 집중해봅시다.
show: rest => ..
#show: rest => columns(2, rest)
이 표현식에서 우리는 이렇게 명령을 내립니다.
나머지 콘텐츠를 모두 2열로 만들어주세요.
show 문법에 대해서 자세히 설명하자면
1. 보통은 이런 식으로 쓰입니다.#show "나의 상세하고 엄청 긴 제목" : title => text(red)[#title]
title => text(red)[#title]
이 부분은 "이름 없는 함수"입니다. 이는 아래와 같습니다.
let 함수 (title) = text(red)[#title]
#show "나의 상세하고 엄청 긴 제목" : title => text(red)[#title]
이 코드를 다시 보자면, "나의 상세하고 엄청 긴 제목" 을 아래 함수의 인자로 전달해준겁니다.
title => text(red)[#title]
#show : rest => columns(2, rest)
이 함수를 다시보자면
#show all : let 2columns (rest) [columns(2,rest)]
위 코드와 같은 뜻을 같고 있습니다.
다음 코드 아래 부터 모든 나머지 콘텐츠 (all)를 2열로 만드는 함수(2columns)의 인자로 전달해줍니다.
#show "Project": smallcaps
그럼 이 코드는 아래 코드와 같습니다.
#show "Project": smallcaps ["Project"]
이제 제목 모양을 설정해볼까요?
h1 과 h2의 모양을 다르게 설정하고 싶다면 where 함수를 사용해주세요.
이제 우리의 예쁜 문서가 생겼네용.
앞서 만든 우리의 문서 양식을 친구에게 주거나 재사용하면 얼마나 좋을까요? 그냥 간단하게 다운받아서 쓰기만 하면 되니까요. 그럼 이제 우리의 고유한 템플릿을 만들어 봅시다.
아주 간단한 템플릿 하나를 만들어 봅시다.
우리의 함수도 다른 함수들 처럼 여러가지 매개변수를 가질 수 있습니다. 이번에는 글자색을 설정해보죠.
나머지 모든 문서에 우리가 만든 템플릿을 적용해봅시다.
위 코드를 설명하겠습니다.
1. 템플릿 함수를 만든다.
2. 그 안에 set 규칙과 show 규칙 넣는다.
3. show 규칙으로 우리가 만든 템플릿 함수를 사용한다.
그럼 이제 우리가 전 챕터에서 만든 모든 설정들을 모아서 템플릿을 만들어 봅시다.
conf 대신에 template로 명명했으면 좋았을 텐데 말이죠..
변수를 템플릿 안에서 정의하는 건 어리석은 일 임니다. 우리가 아주 멋진 템플릿을 만들었다고 가정합시다. 그 안에 문서 제목도 정의를 해놨고요. 그러면 우리는 이 템플릿을 이용할 때 마다 템플릿 함수를 찾고, 그 안에 정의 된 제목을 찾고, 변경해야합니다. 그럴바에야 이런 변수를 함수의 인자로 만들어서 함수를 사용할 때 인자를 변경해서 넘겨줍시다 ( 더불어 이렇게 하면 자동완성 기능도 이용할 수 가 있습니다.)
우리의 템플릿 함수를 아래와 같이 변경합시다.
그리고 함수를 쓸 때 이런식으로 인자를 전달해줍시다.
아 보기가 훨씬 좋아졌네요.
마치 파이썬 import 처럼 템플릿을 써봅시다.
축하합니다. 이제 기본적인 사용법은 다 배우셨습니다. 솔직히 이걸로도 거의 대부분의 문서는 다 작성할 수 있습니다. 이제 Cheatsheet(요령 문서)를 만들어봅시다.
이건 제가 적은 템플릿입니다.
현재 문서에서는 이런식으로 사용했습니다.
Typst의 장점중에 보기 편한 공식문서도 있습니다. 보기 정말 편하고 쓰기도 편합니다.
더불어 다양한 패키지도 있습니다.
이 점을 참고하여 예쁘고 멋진 문서를 작성하시길 바랍니다. 그럼 이만 글을 마칩니다.