Диаграмма битовой строки с LaTex

Диаграмма битовой строки с LaTex

Мне интересно сделать несколько диаграмм, как на картинке-образце. Я не уверен, можно ли это сделать с помощью латекса или нет. Может кто-нибудь дать идею. Спасибо.

Образец изображения

решение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} 

введите описание изображения здесь

Связанный контент