본문 바로가기
Topos Uranos

요약

이 강의는 TikZ로 문서 안에서 그림을 그리는 법을 가르친다. LaTeX으로 그릴 때 얻는 것(본문의 글꼴과 수식, 손실 없는 확대와 축소, 소스에서의 수정, 버전 관리)과 그 대가, 그리고 R이나 Python에서 그래프를 내보내는 편이 나은 경우를 설명한다. babel의 언어 모듈이 기호를 활성 단축 기호로 바꾸는 언어(예컨대 스페인어)의 문서에서는 TikZ에 전용 babel 라이브러리가 필요하며, 그것이 없으면 첫 화살표에서 연쇄적인 오류가 난다는 것을 보인다. tikzpicture 환경과 \tikz 명령, 직교 좌표·극좌표·상대 좌표, 그리고 경로(선분, 직사각형, 원, 호, 곡선)를 소개하고, 선의 여러 옵션과 arrows.meta 라이브러리의 화살촉을 살펴본다. 이름 붙은 노드, 앵커, positioning 라이브러리를 이용한 상대 배치를 배우고, 고유한 스타일로 표기를 고정하며, \foreach로 반복을 다룬다. 순서도, 힘의 도식, 개념의 나무, 구문 나무, 함수의 그래프를 만들면서 plot이 각도를 도 단위로 잰다는 점에 주의를 기울인다. 데이터 그래프를 위한 pgfplots를 소개하고, 그림을 플로트에 넣고, 세 가지 축소 방법을 비교한다. 끝으로 흔한 오류, 컴파일 시간, 피해야 할 것을 다룬다.

학습 목표

  1. 어떤 그림을 TikZ로 그릴지, pgfplots로 그릴지, 데이터 분석 프로그램에서 내보낼지를 근거를 들어 판단할 수 있다.
  2. TikZ를 쓰는 문서의 프리앰블을 준비하고, babel 라이브러리가 언제, 왜 필요한지 설명할 수 있다.
  3. 절대 좌표·극좌표·상대 좌표로 그리고, +와 ++가 들어간 좌표열이 그리는 경로를 예측할 수 있다.
  4. 이름 붙은 노드를 positioning 라이브러리로 배치하고, 한 번만 정의한 고유 스타일로 도식을 구성할 수 있다.
  5. 그림을 캡션과 레이블이 있는 플로트에 넣고, 글자가 어떻게 될지 예측하며 크기를 줄이고, 로그로부터 흔한 오류를 진단할 수 있다.

왜 LaTeX으로 그리는가

앞의 강의들에서는 문서 밖에서 만든 이미지를 삽입했다. 반면 TikZ로 만든 그림은 소스 안에 명령으로 쓰이고, 엔진이 본문을 조판하듯 그것을 조판한다. 여기서 네 가지 이점이 나온다. 첫째는 조판의 통일성이다. 그림의 레이블은 본문과 같은 글꼴, 같은 크기를 쓰고, 레이블 속 수식은 그것을 논하는 문단의 수식과 똑같다. 둘째는 손실 없는 크기 조절이다. 결과가 벡터 그래픽이므로 확대해도 픽셀이 드러나지 않는다. 셋째는 그림을 소스에서 고친다는 점이다. 레이블을 바꾸거나 점을 옮기는 일은 한 줄을 바꾸는 일이며, 그리기 프로그램으로 돌아가거나 원본 파일을 찾을 필요가 없다. 넷째는 그림이 본문과 함께 버전 관리된다는 점이다. 그림 자체가 텍스트이기 때문에 같은 파일, 같은 백업, 같은 이력 안에 남는다.

그러나 이 이점에는 대가가 따른다. TikZ는 고유한 문법을 지닌 언어이고 그 설명서는 천 쪽이 넘으며, 그래픽 프로그램에서 마우스로 일 분이면 되는 그림이 여기서는 처음에 삼십 분이 걸릴 수도 있다. 그러므로 구별이 필요하다. 레이블이 붙은 몇 개의 도형으로 이루어진 모식도, 다이어그램, 기하학적 그림은 TikZ의 본령이다. 반면 데이터 그래프는 TikZ 위에 세워졌으며 이 강의 끝에서 소개할 pgfplots로 그리는 편이 낫고, 데이터를 R이나 Python으로 분석한다면 그것을 분석하는 바로 그 프로그램으로 그리는 편이 낫다. 그래프를 PDF로 내보내 이미지를 다룬 강의에서처럼 삽입하면, 그래프는 그것을 만든 데이터 및 분석과 묶인 채로 남는다. 두 언어 모두 그래프를 LaTeX용 코드로 써 내는 출력(R의 tikzDevice 패키지, Python matplotlib의 PGF 출력)도 제공하므로, 레이블이 문서의 글꼴을 따르게 할 수 있다.