다음 그림을 만들고 싶습니다.
여기에서 다소 비슷한 그림에 대한 코드를 받았습니다.하위 그림과 캡션이 포함된 Tikzpicture하지만 위에 표시된 대로 원하는 형식으로 변경하지 마세요.
\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}
\begin{document}
\begin{figure}
\centering
\subcaptionbox{subfigure a}[\textwidth]{
\begin{tikzpicture}
\def\length{6} % Length of your arrow
\def\height{0.5} % Height of your intersections
\draw[->] (-\length,0) -- (\length,0);
\node at (-2*\length/3,0) [yshift=-4,anchor=north]{X};
\node at ( 0,0) [yshift=-4,anchor=north]{Y};
\node at ( 2*\length/3,0) [yshift=-4,anchor=north]{Z};
\draw[-] (-\length/3,-\height/2) -- (-\length/3,\height/2);
\draw[-] ( \length/3,-\height/2) -- ( \length/3,\height/2);
\end{tikzpicture}
}
\subcaptionbox{subfigure b}[\textwidth]{
\begin{tikzpicture}
\def\length{6} % Length of your arrow
\def\height{0.5} % Height of your intersections
\draw[->] (-\length,0) -- (\length,0);
\node at (-2*\length/3,0) [yshift=-4,anchor=north]{X};
\node at ( 0,0) [yshift=-4,anchor=north]{Y};
\node at ( 2*\length/3,0) [yshift=-4,anchor=north]{Z};
\draw[-] (-\length/3,-\height/2) -- (-\length/3,\height/2);
\draw[-] ( \length/3,-\height/2) -- ( \length/3,\height/2);
\end{tikzpicture}
}
\end{figure}
\end{document}
답변1
내가 사용하는 그림 사이의 분리를 subcaption block environment
다양하게 할 수 있는 를 사용하는 것이 더 낫습니다 . 또한 이 환경을 사용하면 캡션을 넣을지 여부를 제어할 수 있습니다. 캡션 을 그림 앞이나 뒤에 넣을 경우 정의됩니다. 제안해주신 도면의 경우, 스타일과 좌표를 여러번 지정하지 않아도 되도록 도면 정의를 3개 만들어 두었습니다. 첫 번째를 사용하면 표시된 길이 ( 이 경우 텍스트 줄의 너비) 사이의 요소를 기준으로 위치에 마크를 배치할 수 있으므로 마크를 더 잘 배치할 수 있습니다. 각 마크에는 , a 및 a가 있어야 합니다 . 절대 좌표를 배치하지 않도록 다른 도면 정의에 사용됩니다 .vertical
\captionsetup{skip=2em}
below
above
\Xdoms
0
1
\linewidht
name
content
color
names
두 번째는 \Acot
를 사용하여 정의된 2개의 마크 사이에 차원을 그립니다 names
. \xdoms
거기 에는 및 2
이라는 명명된 좌표가 있으며 , 여기에서 차원이 시작되고 콘텐츠는 ( ) 및 경로의 텍스트 노드로 이동합니다.name
name-up
middle
pos=0.5
above
마지막 것은 tikz 라이브러리를 calc
메서드와 함께 사용하는 중간점 "x"를 배치하는 데 사용 $(#1)!0.5!(#2)$
되며 이름으로도 입력할 수 있는 두 노드 사이의 중간점을 찾은 다음 원이 그려지고 텍스트 노드를 정의하지만 배치하는 대신 특정 방향으로 노드로부터 node label
특정 거리에 배치할 수 있는 해당 텍스트를 사용합니다 .label distance=0.7em
-90
이렇게 하면 놀이터로 사용되는 추가 케이스를 포함하여 모든 케이스를 그릴 수 있습니다. 당연히 먼저 를 사용해야 \xdoms
하고 나머지는 입력된 각 마크에 생성된 좌표의 이름을 사용하기 때문입니다.
결과:
MWE:
\documentclass{article}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc}
\def\Xdoms#1#2#3{%\Xdoms{length}{height}{Markers{position/name/content/color}}
\draw(0,0)--++(#1,0);
\foreach \position/\name/\content/\color in {#3}{
\draw[draw=\color,thick]
(#1*\position,0)++(0,#2/2)
-- ++(0,-#2) node[below, minimum height=2em,inner sep=0]{\content};
\coordinate (\name-up) at (#1*\position,#2*1.5);
\coordinate (\name) at (#1*\position,0);
}
}
\def\Acot#1#2#3#4{
\draw[draw=#4,|-|](#1)--(#2)node [pos=0.5,above]{#3};
}
\def\Dotx#1#2#3#4{
\fill[fill=#4]($(#1)!0.5!(#2)$) circle (3.5pt) node[below,label={[label distance=0.7em,#4]-90:#3}]{};
}
\begin{document}
\setcounter{figure}{4}
\begin{figure}
\centering
\caption {figure name}
\begin{subcaptionblock}{\textwidth}
\begin{tikzpicture}
\Xdoms{\linewidth}{0.5}{
0/Mk-0/0/black,%\position/\name/\content/\color
0.45/Mk-a/a/black,
0.65/Mk-b/b/black,
1/Mk-1/1/black%
}
\Acot{Mk-0-up}{Mk-a-up}{Text\_1}{red}
\Acot{Mk-b-up}{Mk-1-up}{Text\_2}{blue}
\Dotx{Mk-b}{Mk-1}{x}{black}
\end{tikzpicture}
\captionsetup{skip=2em}
\caption{Sub figure a}
\end{subcaptionblock}
\begin{subcaptionblock}{\textwidth}
\begin{tikzpicture}
\Xdoms{\linewidth}{0.5}{
0/Mk-0/0/black,%\position/\name/\content/\color
0.5/Mk-a/a/black,
1/Mk-1/1/black%
}
\Acot{Mk-0-up}{Mk-a-up}{Text\_1}{red}
\Acot{Mk-a-up}{Mk-1-up}{Text\_2}{blue}
\Dotx{Mk-a}{Mk-1}{x}{black}
\end{tikzpicture}
\captionsetup{skip=2em}
\caption{Sub figure b}
\end{subcaptionblock}
\begin{subcaptionblock}{\textwidth}
\begin{tikzpicture}
\Xdoms{\linewidth}{0.5}{
0/Mk-0/0/black,%\position/\name/\content/\color
1/Mk-1/1/black%
}
\Acot{Mk-0-up}{Mk-1-up}{Text\_2}{blue}
\Dotx{Mk-0}{Mk-1}{x}{black}
\end{tikzpicture}
\captionsetup{skip=2em}
\caption{Sub figure c}
\end{subcaptionblock}
\begin{subcaptionblock}{\textwidth}
\begin{tikzpicture}
\Xdoms{\linewidth}{0.5}{
0/AA/A/red,%\position/\name/\content/\color
0.1/BB/B/black!20!red,
0.3/CC/C/black!30!red,
0.4/DD/D/black!40!red,
0.5/EE/E/black!50!red,
0.75/FF/F/black!60!red,
1/GG/G/black!70!red%
}
\Acot{AA-up}{CC-up}{A TO C}{blue}
\Acot{DD-up}{FF-up}{D TO F}{blue!50!red}
\Dotx{AA}{BB}{x}{green!50!blue}
\Dotx{EE}{FF}{y}{green!50!cyan}
\end{tikzpicture}
\captionsetup{skip=2em}
\caption{Sub figure d playground}
\end{subcaptionblock}
\end{figure}
\end{document}