레이텍에서 그림 그릴려면 tikz 패키지를 설치해야 된다. 다 알겠지만 이게 떡상한 패키지라 안 쓸 수가 없음.
물론 eps, jpg, gif 넣어서 할 수도 있겠지 근데 레이텍 쓰다보면 결국 그림도 코드로 그리게 됨 ㅋㅋ
전처리부에서는 반드시 geometric이랑 positioning 라이브러리 쓴다고 명시해줘야됨. 그래야 상대적인 위치를 쓸 수 있음(나중에 설명)
% tikz & circuitikz
\usepackage{circuitikz}
% tikz libraries
% for relative positioning
\usetikzlibrary{shapes.geometric, positioning, calc}
그리고 스타일인데 비유하면 HTML의 CSS랑 유사하다. CSS에서 class나 id 지정하고 HTML 코드에서 이걸 부르듯 \tikzset을 전처리부에 쳐넣고 이걸 tikzpicture에서 인자로 부르는 식인데, general이니 circuit이니 하는 스타일은 다 내가 쓸려고 지정한거고 디폴트 값은 아니야. CSS처럼 스타일을 지정할 수 있는데 자세한 건 메뉴얼을 봐야 되고 여기선 기본적인 것 몇 개만 적어둠.
thin, thick, ultra thick: 그림 그릴때 선의 굵기 지정하는거. 밑에 line width처럼 구체적인 수치를 지정할 수도 있음
>=latex: 화살표 대가리를 새끈한 라텍스 형식으로 하겠다는 말임 ㅇㅇ 걍 이거써라 딴 화살표들은 다 구림
즉 바로 아래의 스타일은 general 스타일은 굵은 선에 화살표 대가리는 레이텍을 쓰겠단 말이고 circuit 스타일은 구체적으로 선의 굵기를 지정까지 한 거임. 왜 지정했냐면 전기회로는 선을 더 굵게 할려고 ㅇㅇ
% [general] setting for tikz and ctikz drawing
\tikzset{
general/.style={
thick,
>=latex
},
circuit/.style={
line width=1.6pt,
>=latex
}
}
그리고 이 general 스타일을 불러올려면 밑에처럼 general을 []안에 써 주면 됨. Fblock이니 Fcicrcle이니 하는 것들도 다 스타일임 ㅇㅇ
\begin{tikzpicture}[general,
Fblock/.style={
draw,
text width=3em,
align=flush center,
outer sep=0},
Fcircle/.style={
draw,
circle,
outer sep=0}
]
% First block
\node[Fblock] (input) {기준입\\[-0.5em]력신호};
% circle block
\node[Fcircle, right=5em of input] (iocircle) { };
% and blocks
\node[Fblock, right=6em of iocircle] (control1) {조절부};
\node[Fblock, right=2em of control1] (control2) {조작부};
\node[Fblock, below right=2.5em and -1em of control1] (detect) {검출부};
\node[Fblock, right=4em of control2] (ctarget) {제어\\[-0.5em]대상};
% Arrows
\draw[->] (input.west)++(-1.5,0) -- (input.west)
node[pos=0.40, above]{목표값};
\draw[->] (input.east) -- (iocircle.west)
node[midway, above]{기준입력};
\draw[->] (iocircle.east) -- (control1.west)
node[pos=0.45, above]{동작신호};
\draw[->] (control1.east) -- (control2.west);
\draw[->] (control2.east) -- (ctarget.west);
\draw[->] (ctarget.east) -- ++(1.5,0)
node[midway](output){}
node[midway, above]{제어량};
\draw[->] (output.center) |- (detect.east);
\draw[->] (detect.west) -| (iocircle.south);
\draw[->] (ctarget.north)++(0,0.5) -- (ctarget.north)
node[at start, above]{외란};
% Boxes
\draw[ultra thick, crimson, dotted] ($(input.north west)+(-0.3,1em)$) rectangle ($(ctarget.south west)+(-0.3,-4.5em)$);
\draw[ultra thick, bnb, dotted] ($(control1.north west)+(-0.3,0.3)$) rectangle ($(control2.south east)+(0.3,-0.3)$);
\end{tikzpicture}
복잡한건 메뉴얼이나 stack 구글링하고 기본적인 것만 보겠음
\node[Fblock] (input) {기준입\\[-0.5em]력신호};
\node[Fcircle, right=5em of input] (iocircle) { };
\node[style](node name){text name}; 이런 식으로 씀
노드는 경로인데 벡터 프로그램의 그 경로 맞음. 나 이제 경로 지정함! 이뜻임
스타일은 아까 본 general처럼 해당 노드를 지정하면서 쓰는 스타일.
(node name)는 원래는 노드가 찍히는 좌표 들어가는데 예를 들면 \node (0,0)은 원점 (0,0)에 노드를 찍겠다는 말임.
근데 이렇게 하는 거는 수학 좌표할때나 쓰는거고 그림 그릴때에는 상대적인 좌표로 그릴 수 있다.
즉 기준되는 좌표를 input이라 이름을 붙인거임.
{text name}은 해당 노드에 붙여진 레이블이라 보면 됨. 비어둘 수도 있고 텍스트를 표시할 수도 있음.
이제 상대적인 좌표 뜻을 간단하게 설명하면 밑에 있는 right=5em of input요놈이 상대적인 좌표임.
말하자면 기준되는 input 좌표의 오른쪽으로 5em 떨어진 데 노드(점)를 그리고 그것의 노드를 iocircle이라 하겠다는 말임.
이런 식으로 모든 노드를 설정할 수 있음. A 노드의 북서쪽으로 얼마 떨어진 데 B 노드를 찍는다... 뭐 그정도의 의미임.
이렇게 노드 찍기가 끝나면 그림 그리기 시간임.
\draw[->] (iocircle.east) -- (control1.west)
node[pos=0.45, above]{동작신호};
\draw[화살표 그릴래?] (좌표나 노드 이름) -- (도착하는 좌표나 노드 이름) node[노드 스타일]{text name};쯤 되려나
\draw는 뭘 그리겠단 말이고 기본적으로는 선임. 사각형 원 등등 그리는 명령어도 있지만 그건 메뉴얼 찾아보라고
[화살표 그릴래?]는 끝부분에 화살표 넣을래 말래 결정하는것. [<-], [<->]도 가능하겠지? 아까 스타일 지정할 때 >=latex의 >가 화살표 대가리 설정이란거 기억함? 그게 여기서 써지는거임
(좌표나 노드 이름)은 시작하는 점의 좌표나 노드를 쓰면 됨. 근데 여기서 (iocircle.east)는 아까 지정한 iocircle 노드의 동쪽에서 시작하겠단 말임. 여기서 east니 west니 north east니 하는 건 해당 노드의 이름을 박스라 봤을 때 그 박스의 동쪽 서쪽 북동쪽 등을 가리키는 것임. 즉 위의 코드는 iocircle이란 노드의 동쪽에서 출발해서 control1 노드의 west에 도착할게 뭐 그쯤 되려나
뒤의 node는 두 노드를 잇는 선의 노드를 지정한다는 말이고, pos는 그 노드의 위치, above는 노드 이름을 아래에 둔다는 것이고 {동작신호}는 노드의 이름이 되시겠음.
잘 모르겠지? 그게 정상임 ㅇㅇ 한데 쓰다보면 익숙해지니까. 어쨌든 이렇게 해서 새끈한 라텍스 컴파일하면 이렇게 벡터로 그림을 문서 안에서 그려준다고!
아아 이것이 [틀딱]의 갬성이다...
유사한 방식으로 수학 그래프, 회로도 해결 가능임.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.