Diagrama de string de bits com LaTex

Diagrama de string de bits com LaTex

Estou interessado em fazer alguns diagramas como a imagem de exemplo. Não tenho certeza se isso pode ser feito usando Latex ou não. Alguém pode dar alguma ideia. Obrigado.

Imagem de amostra

Responder1

Para ponto de partida em seu aprendizado (caso você selecione o pacote TikZ como ferramenta básica) pode servir o seguinte 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}

que dá:

insira a descrição da imagem aqui

Breve explicação do código: O código acima é (muito) conciso, então para isso é necessário ter alguma experiência com o pacote TikZ. No seu design considerei o seguinte:

  • A estrutura simples da imagem. Possui 27 nós com formatos iguais que formam uma cadeia. Portanto a chainsbiblioteca do TikZ é utilizada para seu posicionamento. É definido pela opção start chain = A going right, onde A é o nome da cadeia. Conseqüentemente, os nós da cadeia são denominados A-1, A-2, ..., A-27.

  • As distâncias entre os nós da cadeia são determinadas por node distance. Seu valor padrão é 15 mm, portanto node distance=0ptestá definido como zero, para que os nós sejam separados apenas pelo outer sepparâmetro de formas. Para que as linhas de borda estejam devidamente sobrepostas, esta distância também é definida como zero (na definição do estilo dos nós, ela é chamada de X)

  • No TikZ, os foreachloops destinam-se a realizar tarefas repetidas. Essa tarefa é colocar nós em cadeia. com

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

    são formadas uma cadeia de nós (com estilo X), com conteúdo determinado por lista entre chaves. Como suas posições são determinadas por cadeia, o loop na verdade determina apenas seu número e conteúdo.

  • Os colchetes abaixo e acima dos nós são desenhados pelo uso da decorations.pathreplacingbiblioteca. Nela definição entre seus parâmetros o parâmetro mirroré selecionado como parâmetro livre que pode ser determinado posteriormente. Como as três das quatro chaves são espelhadas, isso é definido como padrão e a exceção é determinada "localmente".

  • Os colchetes são projetados de forma que sejam 1ptmais curtos em cada lado do que a distância entre as coordenadas e se raise=1mmmovam para baixo (quando são espelhados) ou para cima (quando não são espelhados) de determinadas coordenadas.

  • As cruzes acima do início e do fim dos "links do canal 2" são definidas no "modo clássico" above=of <coordinate name>e para isso é usado o símbolo matemático para multiplicação.

Uma descrição mais profunda do princípio do TikZ que é usado aqui está no manual do TikZ:

  • para correntes: capítulo 46 Correntes, página 541
  • for \foreachloop: capítulo 83 Repetindo coisas: a declaração Foreach, página 901
  • para colchetes: subseção 48.3 Decorações de substituição de caminho, página 581

Responder2

Um código curto com 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} 

insira a descrição da imagem aqui

informação relacionada