Я хотел бы сделать следующий рисунок:
Я получил код для похожей фигуры здесь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
, который позволит вам изменять vertical
разделение между используемыми мной фигурами \captionsetup{skip=2em}
, затем также с помощью этой среды вы можете контролировать, будут ли подписи идти below
или above
, это определяется, если вы поместите подпись до или после рисунка; В случае предлагаемого вами рисунка я создал 3 определения рисунка, чтобы не указывать стили и координаты много раз. Первое \Xdoms
, позволяет вам размещать метки в позициях относительно фактора между 0
и 1
указанной длины, в данном случае ширины текстовой строки \linewidht
, таким образом вы можете лучше размещать метки, каждая метка должна иметь name
, content
и color
, names
будет использоваться для других определений рисунка, чтобы не размещать абсолютные координаты.
Второй метод \Acot
рисует измерение между двумя отметками, определенными с помощью их names
; помните, что \xdoms
существуют 2
именованные координаты name
и name-up
, с которых начинаются измерения, затем содержимое помещается в текстовые узлы в middle
( pos=0.5
) и above
путь.
Последний используется для размещения средней точки «x», которая использует библиотеку tikz calc
с методом $(#1)!0.5!(#2)$
, находит среднюю точку между двумя узлами, которые также могут быть введены как имена, затем рисуется круг и определяется текстовый узел, но вместо размещения соответствующего текста я использую , который node label
я могу разместить на определенном расстоянии label distance=0.7em
от узла в определенной ориентации -90
.
Сделав это, можно нарисовать все случаи, включая дополнительный случай в качестве игровой площадки, очевидно, сначала нужно использовать \xdoms
, а затем остальные, поскольку они используют имена координат, которые создаются в каждой введенной отметке.
РЕЗУЛЬТАТ:
МВЭ:
\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}