2016-04-06 13 views
1

Elektrik mühendisliği amaçlı basit blok şemaları çizmek için bazı TikZ kodlarını yazdım. Kodum sadece işe yarayacak şekilde yazılmıştır, ancak bence bu çirkin ve kullanımı çok kolay değildir. Ne yapmak istiyorsunuz aşağıdakiTikZ: Kendi blok şema kütüphanesi

simple example for a block diagram

gibi blok diyagramlar çizmek ve bunun için benim TikZ blokları içeren bir "kitaplık" tür istiyorum olduğunu. Bu benim şimdiki TikZ gösterilen şekil üretmek için kod şudur: Birlikte Yalnızca bir BPF bloğunu kullanmak benzer bir şey "bpf" yazmak ya olsaydı büyük bir gelişme olacağını

\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} 

değil, tüm bu 6 satır hangi Bir BPF bloğu yapmak. Bunu nasıl başarabilirim?

cevap

1

TikZ stilleri ile daha fazla deneme yaptım ve this one here ile bitti. Oldukça iyi çalışıyor ve blok diyagramları oldukça esnek bir şekilde çizmeme izin veriyor, ancak şimdi blok boyutu değiştiğinde düğümlerin etiketlerinin düzgün ölçeklenmemesi sorunu var. Bunun yerine, her zaman

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

'u yazmalıyım. Ölçek faktörünü tüm etiketler için global olarak ayarlamak mümkün olabilir mi? Ve benim kodumu nasıl geliştirebileceğime dair bir yorum var mı?