Seite 1 von 1

Mit foreach Ports beschriften (für TikZ-Fans)

Verfasst: Di 16. Feb 2021, 12:45
von Jaffet

Mein Latex-Code erstellt einen Switch mit 12 Ports. In jedem Port ist die Zeichenkette F1 enthalten.
Vorbildlich, wie ich bin, habe ich euch mal ein lauffähiges Minimalbeispiel mitgebracht.

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage[a4paper,hmargin={2cm,2cm}]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{fancyhdr} %Kopf und Fußzeile
\usepackage{varwidth} %Zeilenumbruch in TikZ-Node
\usetikzlibrary{positioning}
\tikzset{
	ports/.style={
		line width=0.3pt,
		top color=gray!20,
		bottom color=gray!80
	},
	rack switch/.style={
		fill=white, draw,
		minimum width=18cm,
		minimum height=3cm,
		xscale=-1,
		path picture={
			%Gehäuse des Switch
			\draw[top color=gray!5,bottom color=gray!40]
			(path picture bounding box.south west) rectangle 
			(path picture bounding box.north east);
			%
			\coordinate (A-west) at ([xshift=-0.2cm]path picture bounding box.west);
			\coordinate (A-center) at ($(path picture bounding box.center)!0!(path picture bounding box.south)$);
			\coordinate (A-east) at (path picture bounding box.east);			
			%Zeichnet die übereinanderliegenden Boxen
			\foreach \x in {0.275,0.525}{
				%Von westen beginnend zwei Rechtecke nebeneinander
				\draw[ports]([yshift=0cm]$(A-west)!\x!(A-center)$) rectangle + (1,0.5);
				%-0.5cm darunter erneut zwei Rechtecke
				\draw[ports]([yshift=-0.8cm]$(A-west)!\x!(A-center)$) rectangle +(1,0.5);
			} 		
			\foreach \x in {0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9}{
					 \draw[ports]([yshift=-0.5cm]$(A-west)!\x!(A-east)$)
					 rectangle +(0.7,0.7)node[midway,blue]{F1};
	
		}
		%\renewcommand*{\ergebnis}{0}%
		%\foreach \t in {A2,B9,F3,C5,A3,11,EA,AC,69,13,CF,12}{
			%\draw[ports]([yshift=-0.5cm]$(A-west)!\ergebnis!(A-east)$)rectangle %+(0.7,0.7)node[midway,blue]{\t};
			%\pgfmathsetmacro{\ergebnis}{\ergebnis+0.3}	
		%}	
	}
}
}
\usetikzlibrary{calc, shadings, shadows, shapes.arrows}
\begin{document}
\begin{figure}
	\begin{tikzpicture}	
	\node(switch 1) at (0,0) [rack switch]{};
	\end{tikzpicture}
	\caption{Switch}
\end{figure}
\end{document}

Mit der lustigen Foreach-Schleife erzeuge ich die Ports

\foreach \x in {0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9}{
	\draw[ports]([yshift=-0.5cm]$(A-west)!\x!(A-east)$)
	rectangle +(0.7,0.7)node[midway,blue]{F1};
	
}

Dumm nur, dass in jedem Port F1 steht. Eigentlich wollte ich ja in jedem Port eine indviudelle 2 Ziffern lange MAC-Adresse reinschreiben.

Darum würde ich gern den auskommentierten Teil verwenden. Der sieht so aus:

\renewcommand*{\ergebnis}{0}%
\foreach \t in {A2,B9,F3,C5,A3,11,EA,AC,69,13,CF,12}{
	\draw[ports]([yshift=-0.5cm]$(A-west)!\ergebnis!(A-east)$)rectangle 		+(0.7,0.7)node[midway,blue]{\t};
	\pgfmathsetmacro{\ergebnis}{\ergebnis+0.3}	
}

Der will aber einfach nicht funktionieren. Hat jemand einen Tipp?


Re: Mit foreach Ports beschriften (für TikZ-Fans)

Verfasst: Di 16. Feb 2021, 15:57
von Bartman

Dein Beispiel gibt wegen der Leerzeile zwischen dem Semikolon und der schließenden geschweiften Klammer in der zweiten Schleife eine Fehlermeldung aus.

Du könntest die zweite und dritte Schleife zusammenfassen:

\foreach \x/\t in {
    0.35/A2,0.4/B9,0.45/F3,0.5/C5,0.55/A3,0.6/11,
    0.65/EA,0.7/AC,0.75/69,0.8/13,0.85/CF,0.9/12
}{
    \draw[ports] 
        ([yshift=-0.5cm]$(A-west)!\x!(A-east)$) rectangle +(0.7,0.7) 
            node[midway,blue]{\t}
    ;
}

Ich hätte versucht, anstelle der Rechtecke zwei Matrizen zu zeichnen.


Re: Mit foreach Ports beschriften (für TikZ-Fans)

Verfasst: Di 16. Feb 2021, 16:03
von Jaffet
Bartman hat geschrieben:
Di 16. Feb 2021, 15:57

Ich hätte anstelle der Rechtecke zwei Matrizen gezeichnet.

Ah, cool, dass das geht. Wieder was dazugelernt.

Ich habe das Beispiel nicht selbst entworfen, sondern nur angepasst. Kannst du mir die Zeile

$(A-west)!\x!(A-east)$

erklären?

Was machen die $-Zeichen und !-Zeichen?


Re: Mit foreach Ports beschriften (für TikZ-Fans)

Verfasst: Di 16. Feb 2021, 16:28
von Bartman

Es steht Dir frei, im Abschnitt 13.5 "Coordinate Calculations" zu lesen.

Ob eine Matrix an dieser Stelle verwendbar ist, habe ich nicht getestet. Falls nicht, dann darf man zumindest Knoten zeichnen.