решение1
В качестве отправной точки в вашем обучении (в случае, если в качестве базового инструмента вы выберете пакет TikZ) могут послужить следующие MWE:
\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{chains,decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[
node distance=0pt,
start chain = A going right,
X/.style = {rectangle, draw,% styles of nodes in string (chain)
minimum width=2ex, minimum height=3ex,
outer sep=0pt, on chain},
B/.style = {decorate,
decoration={brace, amplitude=5pt,
pre=moveto,pre length=1pt,post=moveto,post length=1pt,
raise=1mm,
#1}, % for mirroring of brace, if necessary
thick},
B/.default=mirror, % by default braces are mirrored
]
\foreach \i in {0,1,1,0,0,0,1,0,0,
0,1,0,1,0,0,0,1,0,
0,0,1,1,0,0,1,0,0}% <-- content of nodes
\node[X] {\i};
\draw[B] ( A-1.south west) -- node[below=2mm] {Channel 1 Links} ( A-9.south east);
\draw[B] (A-10.south west) -- node[below=2mm] {Channel 2 Links} (A-18.south east);
\draw[B] (A-19.south west) -- node[below=2mm] {Channel 3 Links} (A-27.south east);
\node (B1) [inner sep=1pt,above=of A-10.north west] {$\times$};
\node (B2) [inner sep=1pt,above=of A-19.north west] {$\times$};
\draw[B=](B1.north) -- node[above=2mm] {Crossover Points}(B2.north);
\end{tikzpicture}
\end{document}
который дает:
Краткое объяснение кода: Код выше (очень) лаконичен, поэтому для его понимания необходим некоторый опыт работы с пакетом TikZ. При его проектировании я учел следующее:
Простая структура рисунка. Имеет 27 узлов одинаковой формы, которые образуют цепь. Поэтому
chains
для их позиционирования используется библиотека из TikZ. Она определяется опциейstart chain = A going right
, где A — имя цепи. Соответственно, узлы в цепи называются A-1, A-2, ... , A-27.Расстояния между узлами в цепочке определяются с помощью
node distance
. Его значение по умолчанию составляет 15 мм, поэтому приnode distance=0pt
его установке на ноль узлы разделяются толькоouter sep
параметром формы. Чтобы линии границ правильно перекрывались, это расстояние также устанавливается на ноль (в определении стиля узлов оно называется X)В TikZ
foreach
циклы предназначены для выполнения повторяющейся задачи. Такая задача — установка узлов в цепочку. с\forach \i in {...}\node[X] {\i};
формируются в цепочку узлов (со стилем X), с содержимым, определяемым списком в фигурных скобках. Поскольку их позиции определяются цепочкой, цикл фактически определяет только их количество и содержимое.
Скобки под и над узлами рисуются с использованием
decorations.pathreplacing
библиотеки. В ее определении среди их параметров параметрmirror
выбирается как свободный параметр, который может быть определен позже. Поскольку три из четырех скобок зеркально отражены, это устанавливается как значение по умолчанию, а исключение определяется "локально".Скобки спроектированы таким образом, что они
1pt
короче с каждой стороны, чем расстояние между координатами, и при этомraise=1mm
смещаются ниже (когда зеркально отображены) или выше (когда не зеркально отображены) от заданных координат.Крестики над началом и концом «связей канала 2» установлены по «классическому способу» с
above=of <coordinate name>
использованием математического символа для умножения.
Более подробное описание принципа работы TikZ, который здесь используется, можно найти в руководстве по TikZ:
- для цепей: глава 46 Цепи, страница 541
- цикл for
\foreach
: глава 83 Повторение вещей: оператор Foreach, страница 901 - для фигурных скобок: подраздел 48.3 Украшения, заменяющие путь, стр. 581
решение2
Короткий код с pstricks
:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{mathtools}
\usepackage{pstricks-add, multido}
\usepackage{auto-pst-pdf}
\begin{document}
\sffamily
\begin{pspicture}
\psset{dimen=middle, linewidth=0.6pt, braceWidthOuter=4pt, braceWidthInner=4pt, braceWidth=0.8pt, labelsep =-2ex}
\multido{\i = 0 + 1, \n=0+0.5}{27}{\fnode[framesize=0.5](\n, 0){A\i}}%
\rmultiput{$0$}(A0)(A3)(A4)(A5)(A7)(A8)(A9)(A11)(A13)(A14)(A15)(A17)(A18)(A19)(A22)(A23)(A25)(A26)
\rmultiput{$1$}(A1)(A2)(A6)(A10)(A12)(A16)(A20)(A21)(A24)
\psset{rot=90, nodesepB=2ex}
\multido{\ia=0 + 9, \ib=8 + 9}{3}{\pnode[-0.15, -0.35](A\ia){B\ia}\pnode[0.15, -0.35](A\ib){B\ib}\psbrace(B\ia)(B\ib){\clap{Channel\,1 Links}}}
\multido{\i=8 + 9}{2}{\pnode[0.25,0.6](A\i){C\i}\uput{1pt}[d](C\i){$\times$}}
\psbrace[rot=-90, nodesepB=-0.5ex](C17)(C8){\clap{Crossover Points}}
\end{pspicture}
\end{document}