2016-04-06 8 views
1

Я написал код 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, а не все эти 6 строк вместе, которые сделайте блок BPF. Как я могу это достичь?

ответ

1

Я сделал еще несколько экспериментов с стилями TikZ и закончил с this one here. Он работает очень хорошо и позволяет мне рисовать блок-диаграммы довольно гибким образом, но теперь у меня есть проблема, что метки узлов не масштабируются должным образом при изменении размера блока. Вместо этого я должен написать

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

все время. Можно ли установить глобальный масштабный коэффициент для всех меток? И есть ли какие-либо комментарии о том, как я могу улучшить свой код?

 Смежные вопросы

  • Нет связанных вопросов^_^