Hallo! Ich habe kürzlich auf Matheplaneten ein Schaltblid, mit Hilfe der TikZ-Bibliothek matrix erstellt.
Dazu hätte eine, vermutlich banale, Frage: Wie beseitige ich die Lücken zwischen den Leiterbahnen / Bauteilen?


PS: Auch weitere, andere Verbesserungsvorschläge jedweder Art sind willkommen.

Lauffähiges Minimalbeispiel:

Open in writeLaTeX
\documentclass{article}

\usepackage[active,tightpage]{preview} %Für spezielle Ansichten **--**

\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{circuits.ee.IEC} 
 \usetikzlibrary{spy}
%==============
\begin{document}
%==============
\PreviewEnvironment{tikzpicture}  %Zeigt nur TikZ-Bild an  **--**

\begin{tikzpicture}[%
circuit ee IEC, circuit symbol lines/.style={draw,thick}, %Schaltung
spy using outlines={circle, magnification=4, size=3.5cm, connect spies} %Spies
]
\matrix (S) [
%  every node/.style={font={+}},  %Orientierungshilfe
  matrix of nodes, nodes in empty cells,
  inner sep=0pt, column sep=15mm, row sep = 5mm,
  nodes={inner sep=0.0pt,text width=0em,align=center}
  ]
{
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
};

%Schaltungsaufbau, oben
\draw (S-1-3) to  [inductor={info=$L_1$}](S-1-4.east); 
\draw (S-3-3) to  [capacitor={info=$C_1$}](S-3-4);

%Schaltungsaufbau, unten
\draw[set inductor graphic=var inductor IEC graphic] (S-5-3) to [inductor={info=$L_2$}](S-5-4);
\draw (S-7-3) to  [capacitor={info=$C_2$}](S-7-4); 
\draw (S-6-4) to  [capacitor={info=$C_3$}](S-6-5);

%Leiterbahnen, oben
\draw[] (S-4-1) -- (S-4-2) -- (S-2-2) -- (S-2-3);
\draw[] (S-1-3) -- (S-3-3);
\draw[] (S-1-4) -- (S-3-4);
\draw[] (S-2-4) -- (S-2-5) -- (S-4-5) -- (S-4-6);

%Leiterbahnen, unten
\draw[] (S-4-2) -- (S-6-2) -- (S-6-3);
\draw[] (S-7-3) -- (S-5-3);
\draw[] (S-7-4) -- (S-5-4);
\draw[] (S-6-5) -- (S-4-5);

%Knotenpunkte, Klemmen (extra zeichnen, so keine Überschneidungen)
\draw[fill=white] (S-4-1) circle (2pt);
\draw[fill=white] (S-4-6) circle (2pt);

\draw[fill] (S-4-2) circle (2pt);
\draw[fill] (S-2-3) circle (2pt);
\draw[fill] (S-2-4) circle (2pt);
\draw[fill] (S-4-5) circle (2pt);

\draw[fill] (S-6-3) circle (2pt);
\draw[fill] (S-6-4) circle (2pt);

%%%%%%%%%%%%%%%%
%Spy-Vergrößerung
\spy [red] on (S-6-5) in node [left] at (7,-3);
%%%%%%%%%%%%%%%%

\end{tikzpicture}

%==============
\end{document}
%==============

PPS: Ich bitte um Nachsicht, mir ist nicht ganz klar wie oder ob das mit dem Code-Einfügen bzw. seiner Ergebnisausgabe funktioniert

alt text

gefragt 28 Mär '14, 21:51

cis's gravatar image

cis
9.5k75452491
Akzeptiert-Rate: 29%

bearbeitet 29 Mär '14, 21:56

Willkommen auf der TeXwelt! Du kannst den Code formatieren, indem Du ihn markierst und dann den Button mit den Nullen und Einsen klickst. Alternativ kannst Du ihn auch um vier Leerzeichen einrücken, das hat den gleichen Effekt. Ich hab das mal für Dich gemacht. Editieren kann man, indem man unten links bei der Frage auf »Bearbeiten« klickt.

Generell kann man seine Fragen/Antworten/Kommentare mit Markdown formatieren. Hier oder hier gibts Details

(28 Mär '14, 22:01) cgnieder

Deine nodes in der Matrix haben immer noch eine Ausdehnung. Um die Lücken zu beseitigen, könntest du jeweils die Zentren der Noden verbinden, also zum Beispiel (S-4-1.center) mit (S-4-2.center). Besser wäre es aber minimum width=0pt statt text width=0pt zu verwenden und die verbleibende Ausdehnung über outer sep=-.5\pgflinewidth zu korrigieren:

Open in writeLaTeX
\matrix (S) [
%  every node/.style={font={+}},  %Orientierungshilfe
  matrix of nodes, nodes in empty cells,
  inner sep=0pt, outer sep=-.5\pgflinewidth,
  column sep=15mm, row sep = 5mm,
  nodes={minimum width=0pt}
  ]

Da du aber eigentlich gar keine Noden brauchst, genügt es sich mit Hilfe zweier \foreach Schleifen eine Koordinaten-Matrix zu definieren. Das hat gleichzeitig den Vorteil, dass die Zeilen- und insbesondere die Spaltenanzahl leicht anpassbar ist.

Open in writeLaTeX
\documentclass[tikz,margin=5mm]{standalone}
\usetikzlibrary{circuits.ee.IEC}

\begin{document}
\begin{tikzpicture}[circuit ee IEC, circuit symbol lines/.style={draw,thick}]

%Matrix
\def\spaltenabstand{1.5cm}
\def\zeilenabstand{0.5cm}
\def\zeilenzahl{7}
\def\spaltenzahl{6}
\foreach \i in {1,...,\zeilenzahl}
  \foreach \j in {1,...,\spaltenzahl}
    {
      \coordinate (S-\i-\j) at ({(\j-1)*\spaltenabstand},{-(\i-1)*\zeilenabstand});
      %\node at (S-\i-\j){+}; % Orientierungshilfe
    }

%Schaltungsaufbau, oben
\draw (S-1-3) to  [inductor={info=$L_1$}](S-1-4.east); 
\draw (S-3-3) to  [capacitor={info=$C_1$}](S-3-4);

%Schaltungsaufbau, unten
\draw[set inductor graphic=var inductor IEC graphic]
  (S-5-3) to [inductor={info=$L_2$}](S-5-4);
\draw (S-7-3) to  [capacitor={info=$C_2$}](S-7-4); 
\draw (S-6-4) to  [capacitor={info=$C_3$}](S-6-5);

%Leiterbahnen, oben
\draw 
  (S-4-1) -- (S-4-2) -- (S-2-2) -- (S-2-3)
  (S-1-3) -- (S-3-3)
  (S-1-4) -- (S-3-4)
  (S-2-4) -- (S-2-5) -- (S-4-5) -- (S-4-6);

%Leiterbahnen, unten
\draw (S-4-2) -- (S-6-2) -- (S-6-3)
  (S-7-3) -- (S-5-3)
  (S-7-4) -- (S-5-4)
  (S-6-5) -- (S-4-5);

%Knotenpunkte, Klemmen (extra zeichnen, so keine Überschneidungen)
\foreach \p in {S-4-1,S-4-6}
  \draw[fill=white] (\p) circle [radius=2pt];

\foreach \p in {S-4-2,S-2-3,S-2-4,S-4-5,S-6-3,S-6-4}
  \draw[fill] (\p) circle [radius=2pt];

\end{tikzpicture}
\end{document}

alt text

Falls man die Koordinaten-Matrix nicht nur durch \foreach Schleifen, sondern mit Hilfe von \matrix erzeugen möchte, ist auch das möglich. Die matrix Bibliothek wird dafür nicht benötigt.

Open in writeLaTeX
\matrix(S)[column sep=15mm, row sep=5mm,
  execute at empty cell=\coordinate
    (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn);]
{
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
  &&&&&  \\
};

% Zur Orientierung:
%\foreach \i in {1,...,7} % 7 Zeilen
  %\foreach \j in {1,...,6}% 6 Spalten
    %{\node at (S-\i-\j){+};}
Permanenter link

beantwortet 28 Mär '14, 21:57

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 29 Mär '14, 17:39

Ah, also mit dem edit zur Matrixlösung geht es. Immer dieses pgflinewidth, damit sollte ich mich wirklich mehr vertraut machen.

Die Schleifenlösung werde ich auf jeden Fall im Hinterkopf behalten.

Danke an alle!

(29 Mär '14, 00:55) cis

@cis Zur Info, dank des Hakens steht die passende Lösung dann ganz oben (für spätere Leser), im Gegensatz zu mehrseitigen Forum-Threads mit Lösung ganz am Ende. Und der Daumen hoch, die Stimmenzahl, hilft allgemein beim Sortieren. Wenn später 10.000 Fragen und mehr Antworten hier sind, findet man die "besten" schnell oder siebt sich fix ein paar toll-bewertete raus zum Stöbern oder Lernen. Kleine Mechanismen, welche uns die Wissens-Datenbank um Qualitäts-Skala ergänzen.

(29 Mär '14, 11:47) stefan ♦♦
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×728
×58

gestellte Frage: 28 Mär '14, 21:51

Frage wurde gesehen: 10,568 Mal

zuletzt geändert: 29 Mär '14, 23:27