In my diagram I have a few components I reuse a lot, thus making "macros" in tikz for them. The current code I have is using nested tikzpicture environments and is not exactly working as expected. Do you have any suggestions how to improve this?
I found other questions, but none seem to help me?
My code
\documentclass[]{article}
% tikz
\usepackage{tikz}
\usetikzlibrary{positioning} %relative positioning
\usetikzlibrary{fit} %box around multiople nodes
\usetikzlibrary{calc} %complex positioning
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}[
block/.style={draw},
container/.style={inner sep=0,},
]
\def\EDFA{
\begin{tikzpicture}[scale=0.25]
\draw (-1,1) -- (1,0) -- (-1,-1) -- (-1,1);
\node[anchor=north,inner sep=2pt] at (0,-1) {$1$};
\end{tikzpicture}
}
\node[block] (source) {Source};
\node[container,right= of source] (edfa) {\EDFA};
\node[block, right= of edfa] (sink) {Sink};
\draw[->] (source) -- (edfa);
\draw[->] (edfa) -- (sink);
\end{tikzpicture}
\end{document}
Update I now have this code, is there a tex-ninja way to get rid of the helper coordinates?
\documentclass[]{standalone}
% tikz
\usepackage{tikz}
\usetikzlibrary{positioning} %relative positioning
\begin{document}
\tikzset{%
EDFA/.pic={
\begin{scope}[scale=.5, shift={(1,0)}]
\draw (-1,0) coordinate (-in) -- (-1,1) -- (1,0) coordinate (-out) -- (-1,-1) -- cycle;
\node[anchor=north,inner sep=2pt] at (0,-1) {EDFA};
\end{scope}
},
Coupler/.pic={
\begin{scope}[scale=.5, shift={(1,-1)}]
\draw (-1,1) coordinate (-in1) to[out=0,in=180] (0,0) to[out=0,in=180] (1,1) coordinate (-out1);
\draw (-1,-1) coordinate (-in2) to[out=0,in=180] (0,0) to[out=0,in=180] (1,-1) coordinate (-out2);
\end{scope}
}
}
\begin{tikzpicture}[
block/.style={draw},
]
\node[block] (source) {Source};
\path coordinate[right=of source] (helper a);
\draw (helper a) pic (edfa) {EDFA};
\path coordinate[right=of edfa-out] (helper b);
\draw (helper b) pic (coupler) {Coupler};
\node[block, right= of coupler-out1] (sink) {Sink};
\draw[->] (source) -- (edfa-in);
\draw (edfa-out) -- (coupler-in1);
\draw[->] (coupler-out1) -- (sink);
\end{tikzpicture}
\end{document}

/.picpic, described are in TikZ manual (v3.0.1a), chapter 18, page 251, is what you looking for. About it use as well number of different application you can find here, on SE.