Diagrama de cadena de bits con LaTex

Diagrama de cadena de bits con LaTex

Estoy interesado en hacer algunos diagramas como la imagen de muestra. No estoy seguro de si se puede hacer con látex o no. ¿Alguien puede dar alguna idea? Gracias.

Imagen de muestra

Respuesta1

Como punto de partida en tu aprendizaje (en caso de que como herramienta básica selecciones el paquete TikZ) te puede servir el siguiente 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}

lo que da:

ingrese la descripción de la imagen aquí

Breve explicación del código: El código anterior es (muy) conciso, por lo que es necesario tener algo de experiencia con el paquete TikZ. En su diseño consideré lo siguiente:

  • La estructura simple de la imagen. Tiene 27 nodos de formas iguales que forman una cadena. Por eso chainsse utiliza la biblioteca de TikZ para su posicionamiento. Está definido por la opción start chain = A going right, donde A es el nombre de la cadena. En consecuencia, los nodos de la cadena se denominan A-1, A-2, ..., A-27.

  • Las distancias entre nodos en la cadena están determinadas por node distance. Su valor predeterminado es 15 mm, por lo que node distance=0ptse establece en cero, por lo que los nodos se separan solo por el outer sepparámetro de las formas. Que las líneas de borde se superpongan correctamente, además esta distancia se establece en cero (en la definición del estilo de los nodos, se denomina X)

  • En TikZ, los foreachbucles están destinados a realizar tareas repetitivas. Esta tarea consiste en establecer nodos en la cadena. con

    \forach \i in {...}\node[X] {\i};

    Se forman una cadena de nodos (con estilo X), con contenido determinado por lista entre llaves. Dado que sus posiciones están determinadas por la cadena, el bucle en realidad solo determina su número y contenido.

  • Las llaves debajo y encima de los nodos se dibujan mediante el uso de decorations.pathreplacingla biblioteca. En su definición, entre sus parámetros, el parámetro mirrorse selecciona como parámetro libre que se puede determinar más adelante. Dado que las tres de las cuatro llaves están reflejadas, esto se establece como predeterminado y la excepción se determina "localmente".

  • Los tirantes están diseñados de manera que sean 1ptmás cortos en cada lado que la distancia entre las coordenadas, y raise=1mmse muevan hacia abajo (cuando está reflejado) o hacia arriba (cuando no está reflejado) de las coordenadas dadas.

  • Las cruces de arriba al comienzo y al final de los "enlaces del canal 2" están configuradas en la "forma clásica" con above=of <coordinate name>y para ello se utiliza el símbolo matemático para multiplicar.

Una descripción más profunda del principio de TikZ que se utiliza aquí se encuentra en el manual de TikZ:

  • para cadenas: capítulo 46 Cadenas, página 541
  • bucle for \foreach: capítulo 83 Repetir cosas: la declaración Foreach, página 901
  • para tirantes: subsección 48.3 Camino que reemplaza decoraciones, página 581

Respuesta2

Un código corto con 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} 

ingrese la descripción de la imagen aquí

información relacionada