2016-04-06 21 views
1

Ich habe einen TikZ-Code geschrieben, um einfache Blockschaltbilder für elektrotechnische Zwecke zu zeichnen. Mein Code ist so geschrieben, dass es einfach funktioniert, aber meiner Meinung nach ist es hässlich und nicht sehr einfach zu benutzen. Was ich möchte, ist tun Blockdiagramme wie folgtTikZ: Meine eigene Blockdiagramm-Bibliothek

simple example for a block diagram

und dafür zeichnen würde ich gerne eine Art „Bibliothek“ haben, die meine TikZ Blöcke enthält. Dies ist mein aktueller TikZ Code, um die Figur zu erzeugen, gezeigt:

\begin{tikzpicture}[% 
,auto 
,node distance=10mm 
,>=latex' 
,block/.style={text depth=.25ex,draw, fill=anti-flashwhite, rectangle, minimum height=10mm, minimum width=10mm} 
,gluon/.style={decorate, draw=black, decoration={complete sines,amplitude=1mm, segment length=6mm}} 
,osci/.style={decorate, draw=black, decoration={complete sines,amplitude=2mm, segment length=6mm}} 
] 

% bpf 
\node at (0,0) [block,label={BPF}]  (bpf) [anchor=center] {}; 
\draw[gluon] ([xshift=-4mm, yshift=2mm]bpf.center) -- +(0.8,0) {}; 
\draw[gluon] ([xshift=-4mm]bpf.center) -- +(0.8,0) {}; 
\draw[gluon] ([xshift=-4mm, yshift=-2mm]bpf.center) -- +(0.8,0) {}; 
\draw[transform canvas={yshift=2mm}] ([xshift=1mm,yshift=1mm]bpf.center) -- ([xshift=-1mm,yshift=-1mm]bpf.center) {}; 
\draw[transform canvas={yshift=-2mm}] ([xshift=1mm,yshift=1mm]bpf.center) -- ([xshift=-1mm,yshift=-1mm]bpf.center) {}; 

% hpf 
\node at (2,0) [block,label={HPF}]  (hpf) {}; 
\draw[gluon] ([xshift=-4mm, yshift=1mm]hpf.center) -- +(0.8,0) {}; 
\draw[gluon] ([xshift=-4mm, yshift=-1mm]hpf.center) -- +(0.8,0) {}; 
\draw[transform canvas={yshift=-1mm}] ([xshift=1mm,yshift=1mm]hpf.center) -- ([xshift=-1mm,yshift=-1mm]hpf.center) {}; 

% lpf 
\node at (5,0) [block,label={LPF}]  (lpf) {}; 
\draw[gluon] ([xshift=-4mm, yshift=1mm]lpf.center) -- +(0.8,0) {}; 
\draw[gluon] ([xshift=-4mm, yshift=-1mm]lpf.center) -- +(0.8,0) {}; 
\draw[transform canvas={yshift=1mm}] ([xshift=1mm,yshift=1mm]lpf.center) -- ([xshift=-1mm,yshift=-1mm]lpf.center) {}; 

% mixer 
\node[draw,circle,radius=1mm, label={Mixer}] at (3.5,0) (x) {}; 
\begin{scope} 
\clip (3.5,0) circle [radius=2mm]; 
\draw ([xshift=-5mm,yshift=-5mm]x.center) -- ([xshift=5mm,yshift=5mm]x.center) {}; 
\draw ([xshift=-5mm,yshift=5mm]x.center) -- ([xshift=5mm,yshift=-5mm]x.center) {}; 
\end{scope} 

% oscillator 
\node[draw,circle,inner sep=2.5mm] at (3.5,-2) (osc) {}; 
\draw[osci] ([xshift=-2mm]osc.center) -- +(0.4,0) {}; 

% integrator 
\node at (7,0) [block,label={Int}]  (int) {$\int$}; 

% arrow stuff 
\draw[->] (bpf.east) -- (hpf.west); 
\draw[->] (hpf.east) -- (x.west); 
\draw[->] (x.east) -- (lpf.west); 
\draw[->] (osc.north) -- (x.south); 
\draw[->] (lpf.east) -- (int.west); 

\end{tikzpicture} 

Eine große Verbesserung wäre, wenn ich nur einen BPF Block „BPF“ oder etwas ähnliches zu verwenden, habe zu schreiben, und nicht alle diese sechs Reihen zusammen die mache einen BPF-Block. Wie kann ich das erreichen?

Antwort

1

Ich habe ein paar mehr Experimente mit TikZ-Stilen gemacht und endete mit this one here. Es funktioniert ziemlich gut und erlaubt mir, Blockdiagramme ziemlich flexibel zu zeichnen, aber jetzt habe ich das Problem, dass die Beschriftungen der Knoten nicht richtig skaliert werden, wenn die Blockgröße geändert wird. Stattdessen muss ich schreiben

label=above:\scalebox{\fontscale}{label text} 

die ganze Zeit. Wäre es möglich, den Maßstabsfaktor global für alle Etiketten festzulegen? Und, gibt es irgendwelche Kommentare, wie ich meinen Code verbessern könnte?