Seite 1 von 1
Block-Code graphisch visualisieren.
Verfasst: Di 17. Jan 2017, 23:18
von Vertigo
Hallo!
Ich möchte einen Block-Code grafisch darstellen und die einzelnen Zellen mit Buchstaben oder Zahlen befüllen können. Ich habe jetzt erst mal versucht mit Hilfslinien einen Block-Code darzustellen und mit einer roten Linie Informationsbits(links) und Prüfbits rechts getrennt. Ich würde jetzt aber gerne in die Zellen reinschreiben können. Ich denke mal mit den Hilfslinien klappt das so nicht. Hat jemand eine Idee, bzw. einen konkreten Link, wie ich das mache. In verschiedenen pdfs/Tutorials habe ich es nicht ganz gecheckt, wie ich das umsetzen kann.
\begin{tikzpicture}
\draw[help lines](0 ,0) grid (11,1);
\draw[red](7,0) -- (7 ,1) ;
\end{tikzpicture}
Verfasst: Di 17. Jan 2017, 23:32
von Vertigo
Im Anhang ist ein Bild, wie ich es meine.
Verfasst: Mi 18. Jan 2017, 07:45
von markusv
Sicherlich nicht die eleganteste Variante und auch nicht vollständig, aber als Ansatz kann ich folgendes anbieten:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzstyle{infobit}=[draw, fill=gray!40, minimum size=2em]
\tikzstyle{pruefbit}=[draw, fill=white, minimum size=2em]
\begin{tikzpicture}[node distance=2em]
\node [infobit] (i0) {$i_0$};
\node [infobit] (i1) [right of=i0] {$i_1$};
\node [infobit] (i2) [right of=i1] {$i_2$};
\node [infobit] (i3) [right of=i2] {$i_3$};
\node [pruefbit] (c0) [right of=i3] {$c_0$};
\node [pruefbit] (c1) [right of=c0] {$c_1$};
\node [pruefbit] (c2) [right of=c1] {$c_2$};
\end{tikzpicture}
\end{document}
Verfasst: Mi 18. Jan 2017, 11:00
von Bartman
Dein Beispiel ist nach meiner Meinung durchaus elegant. Ich habe lediglich noch ein paar Änderungen vorgenommen.
\documentclass[tikz, border=5pt]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance=2em,
nodes = {draw, minimum size=2em},
infobit/.style = {fill=gray!40}
]
\node [infobit] (i0) {$i_0$};
\node [infobit] (i1) [right of=i0] {$i_1$};
\node [infobit] (i2) [right of=i1] {$i_2$};
\node [infobit] (i3) [right of=i2] {$i_3$};
\node (c0) [right of=i3] {$c_0$};
\node (c1) [right of=c0] {$c_1$};
\node (c2) [right of=c1] {$c_2$};
\end{tikzpicture}
\end{document}
Ich dachte beim Lesen des Wunsches von Vertigo jedoch eher an eine Matrix. Leider gibt es bei meinem Versuch dieser Variante eine senkrechte Verschiebung der Knoten für die Prüfbits.
Mein Versuch mit einer Matrix:
\documentclass[tikz, border=5pt]{standalone}
\usetikzlibrary{matrix, positioning}
\begin{document}
\begin{tikzpicture}
\matrix [
matrix of math nodes,
nodes={
draw,
minimum size=1cm
},
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
infobit/.style = {fill=lightgray}
] (m) {
|[infobit]| i_0 & |[infobit]| i_1 & |[infobit]| i_2 & |[infobit]| i_3 & c_0 & c_1 & c_2\\
};
\draw [dashed] ([yshift=5mm]m-1-4.north east) to ([yshift=-7mm]m-1-4.south east);
\node [below=2mm of m-1-2, xshift=5mm] (infobit) {Informationsbits};
\node [below=2mm of m-1-6] (pruefbit) {Prüfbits};
\end{tikzpicture}
\end{document}
Verfasst: Mi 18. Jan 2017, 12:59
von esdd
Bartman hat geschrieben:Ich dachte beim Lesen des Wunsches von Vertigo jedoch eher an eine Matrix. Leider gibt es bei meinem Versuch dieser Variante eine senkrechte Verschiebung der Knoten für die Prüfbits.
Die einzelnen Nodes der Matrix werden horizontal mit ihrer Grundlinie aneinander ausgerichtet. Da c und i unterschiedlich hoch sind und zentriert in innerhalb ihres Nodes, sind die Ränder der Boxen nicht auf gleicher Höhe. Du kannst das ändern, in dem Du für nodes zusätzlich anchor=center vorgibst. Alternativ kann man auch eine feste Höhe und Tiefe des Textes vorgeben. Dann sind die Grundlinien weiterhin ausgerichtet, aber auch die Ränder der Nodes auf gleicher Höhe:
\documentclass[tikz, border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix [
matrix of math nodes,
nodes={
draw,
minimum size=1cm,
text height=\ht\strutbox,% <- ergänzt
text depth=\dp\strutbox% <- ergänzt
},
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
infobit/.style = {fill=lightgray}
] (m) {
|[infobit]| i_0 & |[infobit]| i_1 & |[infobit]| i_2 & |[infobit]| i_3 & c_0 & c_1 & c_2\\
};
\draw [dash dot,dash phase=2.5pt]
([yshift=5mm,xshift=-.5\pgflinewidth]m-1-4.north east)
--
([yshift=-7mm,xshift=-.5\pgflinewidth]m-1-4.south east)
;
\node (infobit) at ([yshift=-2mm]m-1-2.south east) {Informationsbits};
\node (pruefbit) at ([yshift=-2mm]m-1-6.south) {Prüfbits};
\end{tikzpicture}
\end{document}
Verfasst: Mi 18. Jan 2017, 21:17
von Vertigo

Großartig! Das hat mir sehr geholfen! Vielen vielen Dank!
