TikZ:我自己的方框图库

时间:2016-04-06 11:04:04

标签: latex block diagram tikz

我已经编写了一些TikZ代码来绘制用于电气工程目的的简单框图。我的代码是这样编写的,它只是起作用,但在我看来它很难看并且不易使用。我想要做的是绘制如下的

框图

simple example for a block diagram

为此,我希望有一个包含我的TikZ块的“库”。这是我目前的TikZ代码,用于生成显示的数字:

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

如果我只需编写“bpf”或类似的东西来使用BPF块,而不是所有那些组成BPF块的6行,那么将会有很大的改进。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我用TikZ样式做了一些实验,结果是this one here。它工作得很好,让我以一种非常灵活的方式绘制框图,但现在我遇到的问题是,当块大小改变时,节点的标签不能正确缩放。相反,我必须写

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

一直以来。是否可以为所有标签全局设置比例因子?而且,有什么评论我可以改进我的代码吗?