TikZ로 그림 만들기
FlatBuffers 설명 에서 사용한 그림을 만드는 방법입니다.
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[very thick, fill=green!10] (0, 8) rectangle (5, 10);
\draw[very thick, fill=red!10] (0, 5) rectangle (5, 8);
\draw[very thick, fill=blue!10] (0, 2) rectangle (5, 5);
\draw[very thick, fill=yellow!10] (0, 0) rectangle (5, 2);
\node[below left, green!50!black] at (0, 10) {Header};
\node[below left, red!50!black] at (0, 8) {Body};
\node[below left, blue!50!black] at (0, 5) {VTable};
\node[below left, yellow!50!black] at (0, 2) {String};
\foreach \height in {1,...,9} \draw[dashed] (0, \height) -- +(5, 0);
\node at (2.5, 9.5) {Offset to Body};
\node at (2.5, 8.5) {File Identifier (UTF-8)};
\draw[->, very thick, dotted] (4.5, 9.5) -- +(1, 0) -- +(1, -1.9) -- +(0, -1.9);
\draw[->, very thick, dotted] (4.5, 7.4) -- +(1, 0) -- +(1, -2.9) -- +(0, -2.9);
\node at (2.5, 7.5) {Offset to VTable};
\node at (2.5, 6.5) {Value (i32)};
\node at (2.5, 5.5) {Offset to String};
\node at (2.5, 4.5) {Length of Body, VTable};
\node at (2.5, 3.5) {Offset of 1th member};
\node at (2.5, 2.5) {Offset of 2nd member};
\draw[->, very thick, dashed, blue] (4.5, 2.5) -- +(1.2, 0) -- +(1.2, +2.9) -- +(0, +2.9);
\draw[->, very thick, dashed, blue] (4.5, 3.5) -- +(1.4, 0) -- +(1.4, +3) -- +(0, +3);
\draw[->, very thick, dotted, red] (4.5, 5.6) -- +(1.6, 0) -- +(1.6, -4) -- +(0, -4);
\node at (2.5, 1.5) {``Actual String''};
\draw[->, very thick] (6.5, 10) -- +(0, -10) node[right] {Memory};
\end{tikzpicture}
\end{document}
TikZ 사용법
TikZ로 단독 그림을 생성할 때는
standalone.cls
를 추천합니다. 이것은 TeXLive 중에서도 texlive-latex-extra
등의 패키지에 들어 있습니다. 이것으로 생성한 PDF에는 여백이 포함되지 않고, 그대로 apt-file
등으로 SVG로 변환할 수 있어 편리합니다.\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
...
\end{tikzpicture}
\end{document}
그림은
pdf2svg
환경 내에서 만듭니다. \draw[very thick, fill=green!10] (0, 8) rectangle (5, 10);
직사각형을 그립니다.
tikzpicture
안은 []
명령에 대한 옵션으로, \draw
는 선을 매우 굵고, very thick
는 색의 지정입니다. TikZ에서는 fill=green!10
와 같이 2개의 색을 비율을 지정해 섞을 수가 있습니다. green!10!white
와 같이 생략하면 다른 하나는 green!10
취급이 됩니다.white
는 직사각형의 왼쪽 하단 rectangle
와 오른쪽 상단 (0, 8)
의 좌표를 받아 그립니다. \node[below left, green!50!black] at (0, 10) {Header};
(5, 10)
의 위치에 노드(정점)를 두어 문자를 표시합니다. (0, 10)
는 정점에 대해 어느 위치에 문자를 둘지를 지정하고 있어 이제 좌하에 나옵니다. 색의 지정은 below left
의 때와 같습니다. \draw
의 안에는 문자가 들어가 있습니다만, 이것은 LaTeX의 처리계이므로, 완전한 LaTeX를 사용할 수 있습니다. 이것이 TikZ의 가장 큰 장점입니다. \foreach \height in {1,...,9} \draw[dashed] (0, \height) -- +(5, 0);
이 줄은 그림에서 옆의 점선을 그립니다 (사각형에 겹치는 부분은 보이지 않습니다). TikZ에는
{}
명령어가 있으며, 이것으로 반복 처리를 할 수 있습니다. foreach
로 연속번호를 생성해 {1,...,9}
에 매회 값이 설정시키므로, 그것을 뒤의 \height
로 사용하고 있습니다. \draw
옵션으로 파선으로 할 수 있습니다. 또 dashed
와 같이 최초의 좌표에 대해서 상대 위치로 패스를 지정할 수가 있습니다. \draw[->, very thick, dashed, blue] (4.5, 2.5) -- +(1.2, 0) -- +(1.2, +2.9) -- +(0, +2.9);
+(5, 0)
의 옵션을 건네주면 화살표가 당겨집니다. ->
그러면 역방향이 됩니다. 상대 위치는 시작점에 대한 것이므로 주의가 필요합니다. 값이 어중간한 것은 그림을 보면 알 수 있지만, 화살표가 겹치는 것을 피하기 위해서입니다. 이 가장자리는 수동으로 감상합니다.빌드 방법
.latexmkrc
#!/usr/bin/env perl
#
$latex = 'uplatex %O -synctex=1 --file-line-error -interaction=nonstopmode %S';
$pdflatex = 'lualatex %O -synctex=1 --file-line-error -interaction=nonstopmode %S';
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$bibtex = 'upbibtex %O %B';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$dvips = 'dvips %O -z -f %S | convbkmk -u > %D';
$ps2pdf = 'ps2pdf %O %S %D';
$pdf_mode = 3;
if ($^O eq 'darwin') {
$pvc_view_file_via_temporary = 0;
$pdf_previewer = 'open -ga /Applications/Skim.app';
} else {
$pdf_previewer = 'xdg-open';
}
나는 LuaTeX파이므로 위의 TikZ 소스도
<-
로 컴파일합니다. 위와 같이 lualatex
를 지정해 두면$ latexmk -pdf -f
그 디렉토리에 있는
$HOME/.latexmkrc
파일을 전부 처리해 줍니다. CI로 빌드하는 경우는 비교적 경량으로 일본어도 처리할 수 있다.마지막으로
TikZ는 쉽게 깨끗한 그림을 쓸 수 있어
*.tex
와 같이 프로그래머블이며, 텍스트이므로 관리가 편리합니다! 꼭 사용합시다 (/· ω ·)/
Reference
이 문제에 관하여(TikZ로 그림 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/termoshtt/items/ed467e6176b8177d7f12텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)