새로운 Latex인 Typst 자습서

독일컴공생·2023년 8월 23일
3

생산성

목록 보기
1/1
post-thumbnail

Typst가 뭔가요?

혹시 Latex에 대해서 알고 계신가요? 논문을 써보신 적이 있으시다면 한 번 들어보셨을 겁니다. Latex는 문서작성 을 위한 프로그래밍 언어 입니다.

Typst는 Latex의 확장편입니다. Typst를 사용하면 Latex보다 쉽게 문서를 작성할 수 있습니다.

Typst 홈페이지 입니다.

타입스트

awesome Typst 에는 확장 프로그램이 잘 정리되어 있습니다.

공식 자습서나 설명서가 없나요?

아뇨 있습니다. 그럼에도 여기에 새로 글을 쓰는 이유는 두가지가 있습니다.

  1. 한국어로 된 설명서가 없습니다.
  2. Cheatsheet(요령 문서)를 작성하고자 합니다.

개인적으로 제가 colemak 자판을 연습하고 싶기도 합니다.

Typst를 이제 써보자

다운로드

웹페이지 편집기 이용하기

홈페이지로 가셔서 계정을 만드시고 어디에서 든지 문서를 작성해보세요.

로컬로 설치하기 (상급자용도, 비추천)

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로 문서 작성하기

일반적으로 글을 쓰고 싶으시다면 그냥 텍스트만 적으셔도 됩니다.

줄바꿈은 \ 입니다.

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에 대해 아는 게 없어서 링크만 첨부하고 넘어가겠습니다.

bibliography

수학 공식 쓰기

우리는 간단하게 Markdown 처럼 $ 수학공식 $ 를 사용할 수 있습니다.

수학 공식만 따로 다른 줄에 쓰고 싶으시다면 빈줄로 감싸주세요 이렇게요.

Typst에서 Q나 A v같은 문자는 일반 문자로 인식하고 rho 같은 것들은 그리스문자로 인식합니다. 그리고 문자들간의 곱셈 으로 표기하고 싶으시다면 빈칸 으로 각 문자들을 띄어주세요. 그리고 문자열은 "문자열" 로 쓰실 수 있습니다.

더 많은 수학 기호들은 수학기호들을 참고해주세요.

서식 만들기

서식을 만들기란 글꼴 크기 조절하기, 중앙 정렬 하기 등등을 일컫습니다.

Set 규칙

여러분께서 본문을 간단히 가운데 정렬하고 싶으면 어떻게 해야할까요? 한글이나 워드에서는 간단히 가운데 정렬을 누르면 되지만 프로그래밍 언어에서는 그럴 수가 없습니다.

개발자의 평범한 생각이라면..

  1. 본문을 정렬하는 함수를 만든다.
  2. 본문을 그 함수의 인자로 넣는다.

그렇기에 Typst도 똑같은 방식으로 본문을 정렬할 수 있습니다.

위 사진을 설명하겠습니다.

  1. 우리는 par (paragragh) 함수를 사용합니다.
  2. 첫번째 인자로 justify: true 를 넣습니다.
  3. 두번째 인자로 콘텐츠 블록을 넣어줍니다.
  4. 짜잔 본문이 가운데로 정렬되었습니다.

왜 두번째 인자인 콘텐츠 블록을 맨 마지막에 [콘텐츠 블록] 으로 넣는 건가요? ()안에 justify: true와 함께 적으면 안되나요?


왜냐하면 콘텐츠 블록은 특별하기 때문입니다. 우리는 함수를 쓸 때 아마도 콘텐츠 블록을 많이 사용 할 겁니다. 그럴 때 마다
#par (justify: true , [콘텐츠 블록]) 처럼 함수를 쓰는 것은 가독성이 좋지 않고 쉼표를 많이 씁니다.

근데 모든 문단을 이런식으로 관리한다면 그건 너무 힘든 일 일겁니다. 우리의 문서에 1000개의 문단이 있다고 생각하시면 1000개의 함수를 적어야 하는 거니까요.

#set par(justify: true)

문서 최상위에 써진 set 마크업 단어는 전체 문서에 영향을 끼칩니다.

그와 반대로

이런 식으로 블록 내에서만 set 마크업 단어를 쓸 수 있습니다.

자동 완성 패널

Typst 웹사이트는 자동 완성을 지원합니다. 이거 이거 아주 편하답니당.

페이지 설정

우리는 이제 set 마크업 단어를 이용해서 모든 걸 설정할 수 있습니다. set 마크업 단어와 주로 쓰이는 기능들이 있습니다.

  • text 글꼴 모음, 크기, 색상 및 기타 텍스트 속성을 설정합니다.
  • page 페이지 크기, 여백, 머리글 설정, 열 및 바닥글 활성화
  • par 단락 정렬, 줄 간격 설정 등
  • heading 제목 모양을 설정하고 번호 매기기를 활성화합니다.
  • document 제목, 작성자 등 PDF 출력에 포함된 메타데이터를 설정합니다.

#set text(
font: "New Computer Modern",
size: 10pt
)


글꼴 설정하기
글꼴 크기 설정하기

또한 Heading의 모양을 바꿔 줄 수도 있습니다. 아래 처럼요.

show 규칙

show 규칙은 간단히 말해서 바꿔치기 혹은 보여주기 입니다.

이런 식으로 단어를 다른 단어로 바꿔치거나 다른 모양으로 바꿔칠 수 있습니다!

스크립팅(한 줄 씩 프로그래밍)

프로그램을 표현하기

Typst에서는 마크업이 코드입니다. 즉, #을 앞에 붙여서 코딩을 하시면 됩니다.

블록들

한 줄 씩 # 를 쓰는 것은 번거롭습니다. 우리는 두가지의 서로 다른 블록을 사용할 수 있습니다.

  1. 코드 블록

{ let x = 1; x + 2 }

변수를 만들고 연산자를 사용해서 프로그램을 작성할 수 있습니다. 각 표현식은 ; 이나 줄바꿈으로 구분되어야 합니다. 코드블록은 템플릿을 만들 때 주로 사용됩니다.

  1. 콘텐츠 블록

[ *이것은* 콘텐츠 블록입니다!]

우리는 변수에 콘텐츠 블록을 할당할 수 있습니다. 그리고 코드 블록과 콘텐츠 블록은 서로 얼마든지 중첩해서 쓸 수 있습니다. 그 말인 즉 코드 블록안에 콘텐츠 블록안에 콘텐츠 블록을 넣는 게 가능하다는 뜻입니다. 러시아 인형 마트료시카처럼요.

위 코드를 보면 일단
1. # {} 로 코드 블록을 만들었습니다.
2. a, b 에 각각 콘텐츠 블록을 할당해줬습니다.
3. 각각의 콘텐츠 블록을 연결해줬습니다.

고급 스타일링

다음과 같은 시험 레포트 형식을 받았다고 생각해봅시다.

  • 글꼴은 11pt 세리프 글꼴이어야 합니다.
  • 제목은 17pt로 굵게 표시해야 합니다.
  • 논문에는 1열의 초록과 2열의 본문이 포함되어 있습니다.
  • 초록은 중앙에 위치해야 합니다.
  • 본문의 내용 왼쪽과 오른쪽 여백이 동일해야 합니다.
  • 첫 번째 수준 섹션 제목은 13pt로 중앙에 정렬되어야 하며 작은 대문자로 표시되어야 합니다.
  • 두 번째 수준 제목은 이탤릭체로 표시되며 본문 텍스트와 크기가 동일합니다.
  • 마지막으로, 페이지는 US Letter 크기로 바닥글 중앙에 번호가 매겨져 있어야 하며 각 페이지의 왼쪽 상단에는 논문 제목이 포함되어야 합니다.

Set 규칙 적기

먼저 문서 최상단에 set 규칙을 적어보겠습니다.

첫번째 세팅에서는 이 항목을 완료했네요.

  • 마지막으로, 페이지는 US Letter 크기로 바닥글 중앙에 번호가 매겨져 있어야 하며 각 페이지의 왼쪽 상단에는 논문 제목이 포함되어야 합니다.

두번째 세팅에서는 이 항목을 완료했고요.

  • 본문의 내용 왼쪽과 오른쪽 여백이 동일해야 합니다.

세번째 세팅에서는 이 항목을 마지막으로 완료했습니다.

  • 글꼴은 11pt 세리프 글꼴이어야 합니다.

제목과 초록 만들기

  • 제목은 17pt로 굵게 표시해야 합니다.
  • 초록은 중앙에 위치해야 합니다.

위 항목을 만족해야 하군요.. 한 번 적어봅시다.

제목은 이렇게 적는 게 어떨까요?

이참에 저자 목록도 만들어 볼까요?

우리는 여기서 Grid 함수를 사용했습니다. 1fr 1fr 은 각 문단을 가로로 1:1 비율로 나눠줬음을 뜻합니다.

이제 초록을 만들어 볼까요?

초록은 왼쪽과 오른쪽 여백이 동일하라는 지시가 없으니 justify 항목을 거짓으로 만들었습니다.

제목 같은 많이 쓰는 문장은 변수로 지정해주는 게 훨씬 편하지 않을까요? 이렇게요.

  1. let 으로 콘텐츠 블록을 담은 변수 만들기
  2. 페이지 윗 부분에 오른쪽 중앙정렬된 제목 달기

열 및 제목 추가하기

논문속 본문을 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 함수를 사용해주세요.

이제 우리의 예쁜 문서가 생겼네용.

템플릿 만들기

앞서 만든 우리의 문서 양식을 친구에게 주거나 재사용하면 얼마나 좋을까요? 그냥 간단하게 다운받아서 쓰기만 하면 되니까요. 그럼 이제 우리의 고유한 템플릿을 만들어 봅시다.

장남감 템플릿

아주 간단한 템플릿 하나를 만들어 봅시다.

우리의 함수도 다른 함수들 처럼 여러가지 매개변수를 가질 수 있습니다. 이번에는 글자색을 설정해보죠.

나머지 모든 문서에 우리가 만든 템플릿을 적용해봅시다.

템플릿안에 set 규칙과 show 규칙 넣기

위 코드를 설명하겠습니다.
1. 템플릿 함수를 만든다.
2. 그 안에 set 규칙과 show 규칙 넣는다.
3. show 규칙으로 우리가 만든 템플릿 함수를 사용한다.

그럼 이제 우리가 전 챕터에서 만든 모든 설정들을 모아서 템플릿을 만들어 봅시다.


conf 대신에 template로 명명했으면 좋았을 텐데 말이죠..

변수를 템플릿에 전달해주기

변수를 템플릿 안에서 정의하는 건 어리석은 일 임니다. 우리가 아주 멋진 템플릿을 만들었다고 가정합시다. 그 안에 문서 제목도 정의를 해놨고요. 그러면 우리는 이 템플릿을 이용할 때 마다 템플릿 함수를 찾고, 그 안에 정의 된 제목을 찾고, 변경해야합니다. 그럴바에야 이런 변수를 함수의 인자로 만들어서 함수를 사용할 때 인자를 변경해서 넘겨줍시다 ( 더불어 이렇게 하면 자동완성 기능도 이용할 수 가 있습니다.)

우리의 템플릿 함수를 아래와 같이 변경합시다.

그리고 함수를 쓸 때 이런식으로 인자를 전달해줍시다.

아 보기가 훨씬 좋아졌네요.

템플릿 파일을 따로 만든 후에 불러오기

마치 파이썬 import 처럼 템플릿을 써봅시다.

  1. 먼저 우리의 템플릿 함수를 conf.typ 이라는 파일에 적고 저장합시다.
  2. #import "conf.typ": conf 를 이용해서 파일안에 있는 conf 함수를 가져옵시다.
  3. 사용합시다. 아래와 같이요.

축하합니다. 이제 기본적인 사용법은 다 배우셨습니다. 솔직히 이걸로도 거의 대부분의 문서는 다 작성할 수 있습니다. 이제 Cheatsheet(요령 문서)를 만들어봅시다.

이건 제가 적은 템플릿입니다.

현재 문서에서는 이런식으로 사용했습니다.

마무리

Typst의 장점중에 보기 편한 공식문서도 있습니다. 보기 정말 편하고 쓰기도 편합니다.

더불어 다양한 패키지도 있습니다.
이 점을 참고하여 예쁘고 멋진 문서를 작성하시길 바랍니다. 그럼 이만 글을 마칩니다.

profile
uni Leipzig

0개의 댓글