TikZ 기초 박승원 http://swpark.me 서울대학교물리천문학부 2017 년 11 월 18 일
목적 TikZ ( 틱즈?) 강의목적 TikZ가처음인 L A TEX 사용자를대상으로, 최대한간추려서, 뒤에있을강의들을따라갈수있도록. + 원하는그림을 TikZ로그릴수있게. 본자료의목적 워크숍종료후참고자료로활용 워크숍비참여자를위한지침서 박승원 ( 서울대물리천문학부 ) TikZ 기초 2 / 31
목차 목적 / 목차 TikZ 개관 Main: TikZ 주요문법 사용빈도순으로소개. TikZ 사용팁 / 관련논의 읽을거리 / 참고문헌 박승원 ( 서울대물리천문학부 ) TikZ 기초 3 / 31
TikZ 개관 TikZ ist kein Zeichenprogramm TikZ is not a drawing program 마우스 / 태블릿으로그리는것이아니다! TEX 에서그림그리기, 판면꾸미기등에사용. PSTricks 이후로 TikZ가대세. 박승원 ( 서울대물리천문학부 ) TikZ 기초 4 / 31
그림도구로서의 TikZ 자주쓰이는그림도구들 : PowerPoint / 아래아한글 Adobe Illustrator GeoGebra TikZ Inkscape / GIMP / Windows 그림판 https://draw.io 손으로그리기 ( 볼드 : 자유소프트웨어.) 박승원 ( 서울대물리천문학부 ) TikZ 기초 5 / 31
TikZ 준비하기 template.tex (examples 폴더에있습니다.) 그림을그리기위한기본템플릿. 1 \documentclass{standalone} 2 \usepackage{tikz} 3 \begin{document} 4 \begin{tikzpicture} 5 \draw (0,0) -- (1,1); % contents goes here 6 \end{tikzpicture} 7 \end{document} standalone 클래스의사용 tikzpicture 외에는아무것도없어야함. 옆에미리보기창을띄워놓고수시로컴파일해보며작업. 박승원 ( 서울대물리천문학부 ) TikZ 기초 6 / 31
TikZ 준비하기 taegeukgi.tex TeXstudio 의경우, 이렇게... 박승원 ( 서울대물리천문학부 ) TikZ 기초 7 / 31
TikZ 좌표계 오늘은 2차원데카르트좌표계, 극좌표계만사용한다. 3차원, 택시거리계, 무게중심좌표계, pgfmanual(tikz 매뉴얼 ) 13 장참조 여기에서부터 pgfmanual 이라는말은생략. y ( 2, 1) (60 : 2) O x 박승원 ( 서울대물리천문학부 ) TikZ 기초 8 / 31
들어가기에앞서 intro.tex 아래의코드는어떤그림을그릴까요? 1 \draw (0,0) -- (1,1); 2 \draw (0,0) rectangle (2,1); 3 \draw (0,0) circle [radius=0.5]; 4 \node at (0,0) {Some text}; 5 \draw (0,0) -- (120:2); 간결하고알아보기쉬운 TikZ 의문법. 보통의 L A TEX 과다르게, 각명령은세미콜론 (;) 으로종결. 박승원 ( 서울대물리천문학부 ) TikZ 기초 9 / 31
경로그리기 path.tex 1 \draw (0,0) -- (1,1); 2 \draw (0,0) -- (1,-1) -- (2,-2); 3 \draw (0,0) -- (2,0) -- (2,3) -- (0,3) -- cycle; 4 \draw (3,0) arc (0:120:3) -- cycle; cycle: 첫번째 / 마지막점을이어폐곡선을만듦 -- 외에도, -, arc, parabola, sin,... visualtikz 2장참조. 박승원 ( 서울대물리천문학부 ) TikZ 기초 10 / 31
도형그리기 shapes.tex 1 \draw (0,0) circle [radius=0.5]; 2 \draw (0,0) rectangle (2,3); 3 \draw (0,0) grid (5,5); 엄밀히는도형도 path. 따라서도형내부는투명. 박승원 ( 서울대물리천문학부 ) TikZ 기초 11 / 31
경로꾸미기 path-style.tex 1 \draw [ 옵션1, 옵션2] 경로 ; 2 \draw[blue, <->, dashed] (0,0) -- (4,1) -- (3,3); 3 \draw (1,2) -- (2,2) [->] -- (3,1) -- (4,2); % Nope. 색 : red, blue, white,... 두께 : line width = 2pt, thick,... (15.3.1절) 형태 : dashed, dotted,... 화살표촉 : ->, <->, <-> 등자유롭게 더다양한촉모양은 visualtikz 4.10 절참조 ( 번거로우니 ) 웬만하면그냥씁시다. 박승원 ( 서울대물리천문학부 ) TikZ 기초 12 / 31
이런것도있습니다 coil.tex 경로의형태는정말다양한것이가능. ex) 코일 : ( 와, PPT 에는없는도구다!) \usetikzlibrary{...} 는 preamble 1 에삽입. 1 % \usetikzlibrary{decorations.pathmorphing} 2 \draw[decoration={segment length=2mm, amplitude=2mm, coil}, decorate] (0,0) -- (2,2); 1 \begin{document} 이전 박승원 ( 서울대물리천문학부 ) TikZ 기초 13 / 31
도형꾸미기 shapes-style.tex 테두리조정 : 경로와동일 색채우기 (\draw는투명 ): \fill, \filldraw 무늬 : (60장참조 ) \usetikzlibrary{patterns} north east lines, dots, bricks,... 1 % \usetikzlibrary{patterns} 2 \fill[red] (0,0) circle [radius=1]; 3 \filldraw[pattern=bricks, draw=blue, ultra thick] (0,0) rectangle (2,3); 4 \filldraw[fill=green, opacity=0.8, draw=blue, ultra thick] (1,1) rectangle (3,4); 박승원 ( 서울대물리천문학부 ) TikZ 기초 14 / 31
텍스트삽입 text.tex 새로운명령어 : \node 1 \node at (0,2) {Some text}; 2 \draw (2,-1) -- (2,2) node[right] {A}; 3 \draw[ <-> ] (0,0) -- node[midway, above] {$ l $} (3,1); 텍스트대신그림도삽입할수있다. 박승원 ( 서울대물리천문학부 ) TikZ 기초 15 / 31
상대적위치사용하기 relative.tex 아래셋은모두같은결과를낸다. 1 \draw (10,10) -- (10,11) -- (11,11); 2 \draw (10,10) -- +(0,1) -- +(1,1); 3 \draw (10,10) -- ++(0,1) -- ++(1,0); + 1 개 : 임시적. 뒤의상대좌표에영향을끼치지않는다. 가지처럼뻗어나가는그림 + 2 개 : 구한좌표를뒤의상대좌표계산에사용 계속이어지는경로 박승원 ( 서울대물리천문학부 ) TikZ 기초 16 / 31
텍스트삽입 상대적위치 text-rel.tex 점라벨링하기 : 크게 2 가지방법이있다. (17.5 절참조 ) 1 \fill (0,0) circle [radius=2pt] node[above right] {A}; 2 \fill (1,0) circle [radius=2pt] +(0.25,0.25) node {B}; above left above above right left right below left below below right 박승원 ( 서울대물리천문학부 ) TikZ 기초 17 / 31
calc calc.tex \usetikzlibrary{calc} 1 \draw (0,0) -- (3,1) -- ($ (3,1) + (-1,1) $); 2 \draw (0,0) -- ($ 2*(1,2) $); 13.5 절참조 보다다양한수학계산은 pgfmath 관련명령사용 x y, floor(x), isprime(x), int(x), rand,... 89.2, 89.3, 90장참조힘들면 LuaT EX 사용 \RequirePackage{luatex85} 박승원 ( 서울대물리천문학부 ) TikZ 기초 18 / 31
node 와 coordinate coordinate.tex 점에이름짓기 : 1 \node [ 옵션 ] ( 이름 ) 위치 { 내용 }; 2 \coordinate [ 옵션 ] ( 이름 ) 위치 ; 1 \node (A) at (1,1) {a}; 2 \node (B) at (2,2) {b}; 3 \draw (A) -- (B); 4 % \usetikzlibrary{positioning} 5 \node (C) [below=of A] {c}; 박승원 ( 서울대물리천문학부 ) TikZ 기초 19 / 31
반복문의활용 foreach.tex pgffor 패키지의 \foreach 문은평소에도사용가능. TikZ 에서잘사용하면강력한도구가된다. 1 % \usepackage{pgffor} 2 \draw (0,0) grid (5,5); 3 \foreach \i in {1,2,...,5}{ 4 \draw (\i,\i) circle [radius=0.1*\i] 5 node [below right] {$ (x_{\i}, y_{\i}) $}; 6 } 박승원 ( 서울대물리천문학부 ) TikZ 기초 20 / 31
예시 : 각도기그리기 protractor.tex 140 130 50 120 60 110 70 100 80 90 90 80 100 70 110 60 120 50 130 40 40 140 150 30 30 150 160 20 20 160 170 10 10 170 180 0 + 0 180 ifthen 의 \ifthenelse 문, intcalc 의 \intcalcmod 사용. 소스 : git.io/vfrvl 박승원 ( 서울대물리천문학부 ) TikZ 기초 21 / 31
scope 환경 scope.tex 원래 tikzpicture 환경에서전역옵션사용가능. \begin{tikzpicture}[... ], 혹은 tikzset/tikzstyle 이를국소적으로사용가능케한것이 scope 환경. 1 \begin{tikzpicture}[blue] 2 \draw (0,0) -- (1,1); 3 \begin{scope}[red] 4 \draw (1,0) -- (2,1); 5 \draw (2,0) -- (3,1); 6 \end{scope} 7 \draw (3,0) -- (4,1); 8 \end{tikzpicture} 박승원 ( 서울대물리천문학부 ) TikZ 기초 22 / 31
clip clip1.tex 기본적으로는 \draw 와동일. 그려진도형내부의객체들만그려짐 1 % draw option: draw a margin. 2 \clip[draw] (0,0) circle [radius=2.6]; 3 \draw (-3,-3) grid (1,1); 4 \draw (1,1.5) circle [radius=1]; 5 \fill (4,0) circle [radius=2.6]; 박승원 ( 서울대물리천문학부 ) TikZ 기초 23 / 31
scope + clip clip2.tex scope를사용하지않으면 clip은전체에적용됨. scope를통해, 하나의 tikzpicture에여러그림작도가능 1 \begin{scope} 2 \clip (-2,0) circle [radius=3]; 3 \fill[red] (-2,0) circle [radius=3]; 4 \end{scope} 5 \begin{scope} 6 \clip (2,0) circle [radius=3]; 7 \fill[blue] (2,0) circle [radius=3]; 8 \fill[green] (-2,0) circle [radius=3]; 9 \end{scope} 박승원 ( 서울대물리천문학부 ) TikZ 기초 24 / 31
기타팁 컴파일이끝나질않아요 세미콜론 (;) 을빠트렸을가능성이높습니다. 보통에러메시지로알려주는데, 가끔무한루프를도는듯... 미리보기에서선이안보여요 선이수평 / 수직일경우 화면 에서보이지않는경우도. \documentclass{standalone} 의유용성 그림이본문속에작게보이면그리기힘듦. 문서전체를조판할때마다그림을새로그리는것은낭비. pdfcrop, convert(imagemagick) 등의후처리가편해짐 박승원 ( 서울대물리천문학부 ) TikZ 기초 25 / 31
이번시간에안한것들 그라데이션 (Shading) / 색배합 (xcolor) \tikzset, \tikzstyle의활용 TikZ 관련패키지의활용 애니메이션만들기 GeoGebra에서의 TikZ 기타 ; 수없이많은명령어의수없이많은옵션 등등... 박승원 ( 서울대물리천문학부 ) TikZ 기초 26 / 31
TikZ 의왕도 기초문법에익숙해지기 여기저기서최대한많이써보기 // 쓸일이많아야... 간결하게코딩하려노력하기 TikZ의이점을살리는길. 같은결과라도더간단하고직관적인방법이있을수도! 남의코드에서배우기 심심할때마다 pgfmanual, texample.net 오늘워크숍을열심히보고듣기... 박승원 ( 서울대물리천문학부 ) TikZ 기초 27 / 31
TikZ 의장단점 ( 사용자입장에서.) 장점 : 무료! 반복작업가능 / 다양한패키지 단순하지만품위있는그림을빠르게... 단점 : 표현수단의확대 표현의확대 생각의확대 좌표설정이까다로움 너무긴분량의매뉴얼 과거의 PSTricks 에비하여빈약한생태계 박승원 ( 서울대물리천문학부 ) TikZ 기초 28 / 31
읽을거리 pgfmanual: TikZ/PGF의바이블. 너무길다는단점. VisualTikZ: 시각적인사용가이드. (VisualPSTricks에서유래 ) awesome-tikz: TikZ 관련읽을거리모음 그중에서도 : minimaltikz: 급한사람들을위하여 : TeXample.net: 다양한 TikZ 예시수록 Nice Scientific Pictures: 걸작모음 seungwonpark/tikz-gallery: 본발표자의 TikZ 작품 (?) 모음 그냥, 심심하다면 (?)... TikZ의저자, TIll Tantau의 2015 dante 컨퍼런스발표자료 : Small TikZ miracles ( 독일어 ) 박승원 ( 서울대물리천문학부 ) TikZ 기초 29 / 31
참고문헌 T.Tantau (2015), The TikZ and PGF Packages (texdoc tikz) 윤석천 (2015), LaTeX 쉽게쓰기, bit.ly/2txsrgi J.P.Casteleyn (2017), Visual TikZ (texdoc visualtikz) 박승원 (2017), Graphing/Drawing Tools for Physics Research, goo.gl/lz2gbl 조인성 (2017), 개인서신 박승원 ( 서울대물리천문학부 ) TikZ 기초 30 / 31
감사합니다 박승원 ( 서울대물리천문학부 ) TikZ 기초 31 / 31