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

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 32
Registriert: Mi 22. Jul 2020, 13:29

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

Beitrag 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?


Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

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

Beitrag 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.


Jaffet
Forum-Anfänger
Forum-Anfänger
Beiträge: 32
Registriert: Mi 22. Jul 2020, 13:29

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

Beitrag 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?


Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

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

Beitrag 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.


Antworten