\ProvidesPackage{duotenzor} %% Version 1.00 %%%%% This is the duotenzor package. %%%%%% I have written this sef of definitions to enable me to draw diagrams for operational cicuits and duotensor calculations. It is built on top of %%%%%% the Tikz drawing package. \usepackage{tikz} \usetikzlibrary{calc} \usetikzlibrary{arrows} \usepackage{xspace} %% duotensor.sty %% Copyright 2010 Lucien Hardy % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % This work consists of the files duotenzor.sty and duotenzormanual.pdf % Notes % % Every absolute coordinate should have the coordinate (XYshift) added to it. % % Font is placed at (fontlocation), or if \otherside is invoked, at (fontlocationb) % % If an opbox is named A then it has a point on the bottom left called (bottoml A) for inputs and a point on the top left called (topl A) corresponding % to input 1 and output 1 respectively. Other inputs/outputs are spaced at 0.8 intervals using a bit of code. % Similarly, a duoboxes named B has (leftt A) at left top and (rightt B) at right top. % % Op font is \operationalfont which is set, by default, to \mathsf % Duotensor font is \duotensorfont which is set, by default, to normal math font. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fonts %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Default font choices (for internal use) \newcommand{\operationalfont}{\mathsf} \newcommand{\duotensorfont}{ {} } % These commands can be used to change the fonts used. \newcommand{\setoperationalfont}[1]{\renewcommand{\operationalfont}{#1}} \newcommand{\setduotensorfont}[1]{\renewcommand{\duotensorfont}{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% environments %%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% diagram environment \begin{diagram}[scale] optional argument is scale. Default is 1=0.25cm \newenvironment{diagram}[1][1]{\begin{tikzpicture}[scale=#1*0.25] \path (0,0) coordinate (XYshift); }{\end{tikzpicture}} %%%%%% diagram environment \begin{Diagram}[scale]{Xshift}{voffset} has a verticle offset and a horizontal shift \newenvironment{Diagram}[3][1]{\begin{tikzpicture} [scale=#1*0.25, baseline=-5-#3cm] \path (0,0)+(#2*4/{#1},0) coordinate (XYshift);}{\end{tikzpicture}} \newenvironment{move}[2][1]{\begin{scope}[scale=#1] \path (XYshift) coordinate (XYshiftoriginal); \path (XYshift)+(#2) coordinate (XYshift);}{\path (XYshiftoriginal) coordinate (XYshift);\end{scope}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Grid %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\constructiongrid}[3][1]{\draw[step=#1cm, very thin] ($(#2)+(XYshift)$) grid ($(#3)+(XYshift)$);} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% boxes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \Opbox[hsize]{A}{x,y} % % plots operation A at (x,y) with symbol A in mathsf. % optional argument is hsize = max {number of inputs, number ofoutputs} default is 3. % Also defines coordinates bottomlA and bottomrA for reference for wires (for internal use). \newcommand{\Opbox}[3][3]{\draw[thick] ($(#3)+(XYshift)$) node (#2) {\ensuremath{\operationalfont #2}} +(-0.4*#1-0.15, -1) rectangle + (0.4*#1+0.15, 1); \path ($(#3)+(XYshift)+ (-0.4*#1+0.4,-1)$) coordinate (bottoml #2); \path ($(#3)+(XYshift)+(-0.4*#1+0.4, +1)$) coordinate (topl #2); \path (#2) coordinate (fontlocation);} % \opbox[hsize]{A1}{x,y} % % plots operation A1 at (x,y) - box empty. otherwise same as \Opbox (in which name and symbol were conflated for convenience) \newcommand{\opbox}[3][3]{\draw[thick] ($(#3)+(XYshift)$) node (#2) {{}} +(-0.4*#1-0.15, -1) rectangle + (+0.4*#1+0.15, 1); \path ($(#3)+(XYshift)+ (-0.4*#1+0.4,-1)$) coordinate (bottoml #2); \path ($(#3) +(XYshift)+(-0.4*#1+0.4, +1)$) coordinate (topl #2);\path ($(#3)+(XYshift)$) coordinate (fontlocation);} % \Duobox[vsize]{A}{x,y} % % plots rectangle at (x,y) with symbol A in regular math font. % optional argument is max( number inputs, number outputs) default is 3. % Also defines coordinates lefttA and righttA for reference links (for internal use}. \newcommand{\Duobox}[3][3]{\draw[thick] ($(#3)+(XYshift)$) node (#2) {\ensuremath{\duotensorfont #2}} +(-1, -0.4*#1-0.15) rectangle + (1, +0.4*#1+0.15); \path ($(#3)+(XYshift)+(-1, +0.4*#1-0.4)$) coordinate (leftt #2); \path ($(#3)+(XYshift)+(+1,+0.4*#1-0.4)$) coordinate (rightt #2); \path ($(#3)+(XYshift)$) coordinate (fontlocation);} % \duobox[vsize]{A1}{x}{y}{A} % % Plots rectangle A1 at (x,y). Otherwise same as \Duobox \newcommand{\duobox}[3][3]{\draw[thick] ($(#3)+(XYshift)$) node (#2) {{}} +(-1, -0.4*#1-0.15) rectangle + (1, +0.4*#1+0.15); \path ($(#3)+(XYshift)+(-1, +0.4*#1-0.4)$) coordinate (leftt #2); \path ($(#3)+(XYshift)+ (+1,+0.4*#1-0.4)$) coordinate (rightt #2);\path ($(#3)+(XYshift)$) coordinate (fontlocation);} % \Duoopbox{hsize}{vsize}{A}{x, y} % % Plots box A (in mathsf font) hsize by vsize at (x,y). % Also efines bottomlA, toplA, lefttA, righttA for internal use. \newcommand{\Opduobox}[4]{\draw[thick] ($(#4)+(XYshift)$) node (#3) {\ensuremath{\operationalfont #3}} +(-0.4*#1-0.15, -0.4*#2-0.15) rectangle + (+0.4*#1+0.15,+0.4*#2+0.15); \path ($(#4)+(XYshift)+ (-0.4*#1+0.4,-0.4*#2-0.15)$) coordinate (bottoml #3); \path ($(#4)+(XYshift)+(-0.4*#1+0.4,+0.4*#2+0.15)$) coordinate (topl #3); \path ($(#4)+(XYshift)+ (-0.4*#1-0.15, +0.4*#2-0.4)$) coordinate (leftt #3); \path ($(#4)+(XYshift)+(+0.4*#1+0.15,+0.4*#2-0.4)$) coordinate (rightt #3); \path ($(#4)+(XYshift)$) coordinate (fontlocation); } % \Opduobox{hsize}{vsize}{A}{x,y}{A} % % plots box A1 with the symbol A (in mathsf font). Otherwise same as \opduobox \newcommand{\opduobox}[4]{\draw[thick] ($(#4)+(XYshift)$) node (#3) {{}} +(-0.4*#1-0.15, -0.4*#2-0.15) rectangle + (+0.4*#1+0.15,+0.4*#2+0.15); \path ($(#4)+ (XYshift)+ (-0.4*#1+0.4,-0.4*#2-0.15)$) coordinate (bottoml #3); \path ($(#4)+(XYshift)+(-0.4*#1+0.4,+0.4*#2+0.15)$) coordinate (topl #3); \path ($(#4)+ (XYshift)+(-0.4*#1-0.15, +0.4*#2-0.4)$) coordinate (leftt #3); \path ($(#4)+ (XYshift)+(+0.4*#1+0.15,+0.4*#2-0.4)$) coordinate (rightt #3); \path ($(#4)+(XYshift)$) coordinate (fontlocation); } % \bbinsert[size]{g}{x,y} also \wwinsert, \wbinsert, \bwinsert. \newcommand{\bbinsert}[3][1]{ \draw[thin, -o] ($(#3)+(XYshift)$)+ (-1.5*#1*2,0) coordinate (leftt #2) -- + ( -0.9*#1*2, 0); \draw[thin, *-*] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \draw[thin, -o] ($(#3)+(XYshift)$)+ (1.5*#1*2,0) coordinate (rightt #2) -- + ( 0.9*#1*2, 0); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\wwinsert}[3][1]{ \draw[thin, -*] ($(#3)+(XYshift)$)+ (-1.5*#1*2,0) coordinate (leftt #2) -- + ( -0.9*#1*2, 0); \draw[thin, o-o] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \draw[thin, -*] ($(#3)+(XYshift)$)+ (1.5*#1*2,0) coordinate (rightt #2) -- + ( 0.9*#1*2, 0); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\bwinsert}[3][1]{ \draw[thin, -o] ($(#3)+(XYshift)$)+ (-1.5*#1*2,0) coordinate (leftt #2) -- + ( -0.9*#1*2, 0); \draw[thin, *-o] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \draw[thin, -*] ($(#3)+(XYshift)$)+ (1.5*#1*2,0) coordinate (rightt #2) -- + ( 0.9*#1*2, 0); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\wbinsert}[3][1]{ \draw[thin, -*] ($(#3)+(XYshift)$)+ (-1.5*#1*2,0) coordinate (leftt #2) -- + ( -0.9*#1*2, 0); \draw[thin, o-*] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \draw[thin, -o] ($(#3)+(XYshift)$)+ (1.5*#1*2,0) coordinate (rightt #2) -- + ( 0.9*#1*2, 0); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } % \bbmetric[size]{g}{x,y} \newcommand{\bbmetric}[3][1]{ \path ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) coordinate (leftt #2); \draw[thin, *-*] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \path ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$) coordinate (rightt #2); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\bwmetric}[3][1]{ \path ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) coordinate (leftt #2); \draw[thin, *-o] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \path ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$) coordinate (rightt #2); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\wbmetric}[3][1]{ \path ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) coordinate (leftt #2); \draw[thin, o-*] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \path ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$) coordinate (rightt #2); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } \newcommand{\wwmetric}[3][1]{ \path ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) coordinate (leftt #2); \draw[thin, o-o] ($(#3)+(XYshift)+(-0.9*#1*2 + 0.2 ,0)$) -- ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$); \path ($(#3)+(XYshift)+ (0.9*#1*2 -0.2,0)$) coordinate (rightt #2); \path ($(#3)+(XYshift)+(0, 16pt)$) coordinate (fontlocation); \path ($(#3)+(XYshift)+(0, -16pt)$) coordinate (fontlocationb); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%% connecting wires and links %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \wire[fine tune shape]{A}{B}{1}{3} default finetuneshape is 1. 0 should make wire straight. % % Plots wire from output 1 of A to input 3 of B. Option of puting "a" for wire type to left of wire \newcommand{\wire}[5][1]{\path (topl #2)+(#4*0.8-0.8, 0) coordinate (bottom); \path (bottoml #3)+ (#5*0.8-0.8, 0) coordinate (top); \path (bottom) +(0, #1*1) coordinate (bc); \path (top) + (0, -1*#1) coordinate (tc); \draw (bottom) .. controls (bc) and (tc) .. (top); \coordinate (middle) at ($0.5*(bottom) + 0.5*(top)$); \coordinate (fontlocation) at ($(middle)!14pt!90:(top)$); \coordinate (fontlocationb) at ($(middle)!-14pt!90:(top)$); } % \doublewire[finetuneshape]{A}{B}{1}{3} Also \thikwire \thinwire % % A double wire. Otherwise same as \wire \newcommand{\doublewire}[5][1]{\path (topl #2)+(#4*0.8-0.8, 0) coordinate (bottom); \path (bottoml #3)+ (#5*0.8-0.8, 0) coordinate (top); \path (bottom) +(0, #1*1) coordinate (bc); \path (top) + (0, -1*#1) coordinate (tc); \draw[thick, double distance=0.4pt] (bottom) .. controls (bc) and (tc) .. (top); \coordinate (middle) at ($0.5*(bottom) + 0.5*(top)$); \coordinate (fontlocation) at ($(middle)!16pt!90:(top)$); \coordinate (fontlocationb) at ($(middle)!-16pt!90:(top)$); } \newcommand{\thickwire}[5][1]{\path (topl #2)+(#4*0.8-0.8, 0) coordinate (bottom); \path (bottoml #3)+ (#5*0.8-0.8, 0) coordinate (top); \path (bottom) +(0, #1*1) coordinate (bc); \path (top) + (0, -1*#1) coordinate (tc); \draw[thick] (bottom) .. controls (bc) and (tc) .. (top); \coordinate (middle) at ($0.5*(bottom) + 0.5*(top)$); \coordinate (fontlocation) at ($(middle)!15pt!90:(top)$); \coordinate (fontlocationb) at ($(middle)!-15pt!90:(top)$); } \newcommand{\thinwire}[5][1]{\path (topl #2)+(#4*0.8-0.8, 0) coordinate (bottom); \path (bottoml #3)+ (#5*0.8-0.8, 0) coordinate (top); \path (bottom) +(0, #1*1) coordinate (bc); \path (top) + (0, -1*#1) coordinate (tc); \draw[very thin] (bottom) .. controls (bc) and (tc) .. (top); \coordinate (middle) at ($0.5*(bottom) + 0.5*(top)$); \coordinate (fontlocation) at ($(middle)!14pt!90:(top)$); \coordinate (fontlocationb) at ($(middle)!-14pt!90:(top)$); } % \link[fine tune shape]{A}{B}{2}{4} % % Draws link from output index 2 of A to input index 4 of B \newcommand{\link}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } % \doubleink[finetuneshape]{A}{B}{2}{4} % % Double link. Otherwise same as \link \newcommand{\doublelink}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[thick, double distance=0.4pt] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!23pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-22pt!90:(right)$); } \newcommand{\thicklink}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[thick] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!20pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-19pt!90:(right)$); } \newcommand{\thinlink}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[very thin] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\linkbw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \draw[-*] (left) .. controls (lc) .. ($(bmiddle)!-1.5pt!(middle)$) ; \draw[-o] (right) .. controls (rc) .. ($(bmiddle)!1.5pt!(middle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkwb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \draw[-o] (left) .. controls (lc) .. ($(bmiddle)!-1.5pt!(middle)$) ; \draw[-*] (right) .. controls (rc) .. ($(bmiddle)!1.5pt!(middle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkww}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \draw[-o] (left) .. controls (lc) .. ($(bmiddle)!-1.5pt!(middle)$) ; \draw[-o] (right) .. controls (rc) .. ($(bmiddle)!1.5pt!(middle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkbb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \draw[-*] (left) .. controls (lc) .. ($(bmiddle)!-1.5pt!(middle)$) ; \draw[-*] (right) .. controls (rc) .. ($(bmiddle)!1.5pt!(middle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } %%%%%% link with wbbw dots \newcommand{\linkwbbw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \path ($0.501*(right) + 0.499*(left)$) coordinate (amiddle); \draw[-o] (left) .. controls (lc) .. ($(bmiddle)!-1.5cm-1.5pt!(amiddle)$) ; \draw[*-*] ($(bmiddle)!-1.5cm+1.5pt!(amiddle)$) -- ($(bmiddle)!1.5cm-1.5pt!(amiddle)$); \draw[-o] (right) .. controls (rc) .. ($(bmiddle)!1.5cm+1.5pt!(amiddle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkbwwb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \path ($0.501*(right) + 0.499*(left)$) coordinate (amiddle); \draw[-*] (left) .. controls (lc) .. ($(bmiddle)!-1.5cm-1.5pt!(amiddle)$) ; \draw[o-o] ($(bmiddle)!-1.5cm+1.5pt!(amiddle)$) -- ($(bmiddle)!1.5cm-1.5pt!(amiddle)$); \draw[-*] (right) .. controls (rc) .. ($(bmiddle)!1.5cm+1.5pt!(amiddle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkwbwb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \path ($0.501*(right) + 0.499*(left)$) coordinate (amiddle); \draw[-o] (left) .. controls (lc) .. ($(bmiddle)!-1.5cm-1.5pt!(amiddle)$) ; \draw[*-o] ($(bmiddle)!-1.5cm+1.5pt!(amiddle)$) -- ($(bmiddle)!1.5cm-1.5pt!(amiddle)$); \draw[-*] (right) .. controls (rc) .. ($(bmiddle)!1.5cm+1.5pt!(amiddle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } \newcommand{\linkbwbw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(0.5*#1, 0) coordinate (lc); \path (right) + (-0.5*#1, 0) coordinate (rc); \path ($0.5*(left) + 0.5*(right)$) coordinate (middle); \path ($0.501*(left) + 0.499*(right)$) coordinate (bmiddle); \path ($0.501*(right) + 0.499*(left)$) coordinate (amiddle); \draw[-*] (left) .. controls (lc) .. ($(bmiddle)!-1.5cm-1.5pt!(amiddle)$) ; \draw[o-*] ($(bmiddle)!-1.5cm+1.5pt!(amiddle)$) -- ($(bmiddle)!1.5cm-1.5pt!(amiddle)$); \draw[-o] (right) .. controls (rc) .. ($(bmiddle)!1.5cm+1.5pt!(amiddle)$); \coordinate (fontlocation) at ($(middle)!24pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-23pt!90:(right)$); } %%%% links with a black or white dot on one end or both: \newcommand{\blink}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[*-] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\wlink}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[o-] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\linkb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[-*] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\linkw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[-o] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\blinkb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[*-*] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\blinkw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[*-o] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\wlinkb}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[o-*] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } \newcommand{\wlinkw}[5][1]{\path (rightt #2)+(0, 0.8-#4*0.8) coordinate (left); \path (leftt #3) + (0, 0.8-#5*0.8) coordinate (right); \path (left) +(1*#1, 0) coordinate (lc); \path (right) + (-1*#1, 0) coordinate (rc); \draw[o-o] (left) .. controls (lc) and (rc) .. (right); \coordinate (middle) at ($0.5*(left) + 0.5*(right)$); \coordinate (fontlocation) at ($(middle)!19pt!90:(right)$); \coordinate (fontlocationb) at ($(middle)!-18pt!90:(right)$); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% inputs and outputs %%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\outwire[bendyness]{A}{2} Also \inwire[bendyness]{A}{3} % % Draws an output wire from output 2 of operation A. Option of adding a (in san serif) just after wire. \newcommand{\outwire}[3][0]{\path (topl #2)+(#3*0.8-0.8, 0) coordinate (bottom); \path (bottom)+(#1*0.1, 1.5) coordinate (top); \path (bottom) +(0, 0.5) coordinate (bc); \draw (bottom) .. controls (bc) .. (top); \path[draw] (top) + (#1*0.06, 40pt) node (fontlocation) {{}}; } \newcommand{\inwire}[3][0]{\path (bottoml #2)+ (#3*0.8-0.8, 0) coordinate (top); \path (top)+ (#1*0.1, -1.5) coordinate (bottom); \path (top) +(0, -0.5) coordinate (tc); \draw (top) .. controls (tc) .. (bottom); \path[draw] (bottom) + (#1*0.06, 0pt) node (fontlocation) {{}}; } \newcommand{\closedoutwire}[3][0]{\path (topl #2)+(#3*0.8-0.8, 0) coordinate (bottom); \path (bottom)+(#1*0.1, 1.5) coordinate (top); \path (bottom) +(0, 0.5) coordinate (bc); \draw (bottom) .. controls (bc) .. (top); \path[draw,ultra thick] ($(top)!0.4cm!90:(bc)$) -- ($(top)!-0.4cm!90:(bc)$); \path[draw] (top) + (#1*0.06, 40pt) node (fontlocation) {{}}; } \newcommand{\closedinwire}[3][0]{\path (bottoml #2)+ (#3*0.8-0.8, 0) coordinate (top); \path (top)+ (#1*0.1, -1.5) coordinate (bottom); \path (top) +(0, -0.5) coordinate (tc); \draw (top) .. controls (tc) .. (bottom); \path[draw,ultra thick] ($(bottom)!0.4cm!90:(tc)$) -- ($(bottom)!-0.4cm!90:(tc)$); \path[draw] (bottom) + (#1*0.06, 0pt) node (fontlocation) {{}}; } %\outblack[bend]{A}{2} Also \outwhite, \inblack, \inwhite % % Draws an output wire with black dot from output 2 of A. Option bends wire down by bend. \newcommand{\outblack}[3][0]{\path (rightt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path (start) + (1.5, -#1*0.1) coordinate (end); \path (start) + (0.5, 0) coordinate (sc); \draw[ -* ] (start) .. controls (sc) .. (end); \path (end) + (25pt, -#1*0.06) node (fontlocation) {{}} ; } \newcommand{\outwhite}[3][0]{\path (rightt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path (start) + (1.5, -#1*0.1) coordinate (end); \path (start) + (0.5, 0) coordinate (sc); \draw[ -o ] (start) .. controls (sc) .. (end); \path (end) + (25pt, -#1*0.06) node (fontlocation) {{}} ; } \newcommand{\inblack}[3][0]{\path (leftt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path (start) + (-1.5, -#1*0.1) coordinate (end); \path (start) + (-0.5, 0) coordinate (sc); \draw[ -* ] (start) .. controls (sc) .. (end); \path (end) + (-5pt, -#1*0.06) node (fontlocation) {{}} ; } \newcommand{\inwhite}[3][0]{\path (leftt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path (start) + (-1.5, -#1*0.1) coordinate (end); \path (start) + (-0.5, 0) coordinate (sc); \draw[ -o ] (start) .. controls (sc) .. (end); \path (end) + (-5pt, -#1*0.06) node (fontlocation) {{}} ; } %%%% \linkedprep[size]{A}{3}{X}{absolute x}{rel y}, also \linkedeffect \newcommand{\linkedprep}[6][1]{\path (rightt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path ($(start)-(XYshift)$) coordinate (startraw); \path ($(0,0)!(startraw)!(0,1)$) coordinate (startycoord); \path[draw] (start) -- ($(startycoord)+(#5-#1*0.433012702, 0)+(XYshift)$) coordinate (end); \path[draw,thick] ($(end)+(30:#1*0.5)$) +(150:#1) -- +(30:#1)-- +(-90:#1) -- cycle; \path ($0.5*(start)+0.5*(end)+(0,16pt)$) coordinate (fontlocation); \path ($0.5*(start)+0.5*(end)-(0,16pt)$) coordinate (fontlocationb); \path ($(end)+(30:#1*0.5)+(90:#1*0.5)$) coordinate (topl #4); } \newcommand{\linkedeffect}[6][1]{\path (leftt #2)+(0, -#3*0.8 + 0.8) coordinate (start); \path ($(start)-(XYshift)$) coordinate (startraw); \path ($(0,0)!(startraw)!(0,1)$) coordinate (startycoord); \path[draw] (start) -- ($(startycoord)+(#5+#1*0.433012702, 0)+(XYshift)$) coordinate (end); \path[draw,thick] ($(end)+(-150:#1*0.5)$) +(90:#1) -- +(-30:#1)-- +(210:#1) -- cycle; \path ($0.5*(start)+0.5*(end)+(0,16pt)$) coordinate (fontlocation); \path ($0.5*(start)+0.5*(end)-(0,16pt)$) coordinate (fontlocationb); \path ($(end)+(-150:#1*0.5)+(-90:#1*0.5)$) coordinate (bottoml #4); } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%% type placement %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% \opsymbol[20pt, 10pt]{a_1} Also \duosymbol for regular font. Also \Opsymbol and \Duosymbol which justify font (good on inputs and outputs) % % %places a_2 in sans serif font at the (fontlocation) coordinate of the previous command (a guess as to what a good location is) but allows for fine %tuning (it can be moved by optional argument - in this case 20pt up and 10pt right \newcommand{\opsymbol}[2][0,0]{ \path ($0.0352777778*(#1)+(fontlocation)$) node {\ensuremath{\operationalfont{#2}}};} \newcommand{\duosymbol}[2][0,0]{\path ($0.0352777778*(#1)+(fontlocation)$) node {\ensuremath{\duotensorfont{#2}}};} \newcommand{\otherside}{\coordinate (fontlocation) at (fontlocationb);} \newcommand{\Opsymbol}[2][0,0]{ \path ($0.0352777778*(#1)+(fontlocation)$) node [text height = 1.7em,text depth=.25ex] {\ensuremath{\operationalfont{#2}}};} \newcommand{\Duosymbol}[2][0,0]{\path ($0.0352777778*(#1)+(fontlocation)$) node [text width = 1em] {\ensuremath{\duotensorfont{#2}}};} %% \putlatex[finetune]{Latex in here} puts it at the (fontlocation) of previous command. \newcommand{\putlatex}[2][0,0]{ \path ($0.0352777778*(#1)+(fontlocation)$) node {#2};} %% \placelatex[finetune]{x,y}{Latex in here} \newcommand{\placelatex}[3][0,0]{ \path ($(XYshift)+(#2)+0.0352777778*(#1)$) node {#3};} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% Fiducials and terminals %%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% \fidprep[size]{X1}{x,y} Also \fideffect (but with bottoml X1) % % Draws triangle for fiducial prep labeled by X1 and placed at (x,y) Has topl X1, leftt X1, rightt X1 defined for internal use. \newcommand{\fidprep}[3][1]{\path[draw, thick] ($(#3)+(XYshift)$) coordinate (fontlocation) +(150:#1) -- +(30:#1)-- +(-90:#1) -- cycle + (90:#1*0.5) coordinate (topl #2) +(-30:#1*0.5) coordinate (rightt #2) + (210: #1*0.5) coordinate (leftt #2) ;} \newcommand{\fideffect}[3][1]{\path[draw, thick] ($(#3)+(XYshift)$) coordinate (fontlocation) +(90:#1) -- +(-30:#1)-- +(210:#1) -- cycle + (-90:#1*0.5) coordinate (bottoml #2) +(30:#1*0.5) coordinate (rightt #2) + (150: #1*0.5) coordinate (leftt #2) ;} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%% Foliation lines %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newenvironment{foliation}[2]{\path (#1,0)++ (XYshift) coordinate (foliateleft); \path (#1,1) ++ (XYshift) coordinate (leftup); \path (#2,0)++ (XYshift) coordinate (foliateright); \path (#2,1)++ (XYshift) coordinate (rightup);}{} \newcommand{\startfoliate}[4]{\path[draw, dashed] ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) +(-1,0)$) coordinate (start) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(1,0)$) and} \newcommand{\continuefoliate}[4]{ ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(1,0)$) and} \newcommand{\finishfoliate}[4]{($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0)+(1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + (1,0)$) coordinate (end); \path[draw, dashed] (start) ++ (-13pt, 0) -- ($(foliateleft)!(start)!(leftup)$) coordinate (start); \path[draw, dashed] (end)++ (13pt, 0) -- ($(foliateright)!(end)!(rightup)$) coordinate (end); \path ($(start)+ (-21pt,0)$) coordinate (fontlocation); \path ($(end) + (21pt,0)$) coordinate (fontlocationb);} \newcommand{\Startfoliate}[5]{\path[draw, dashed] ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0) +(-1,0)$) coordinate (start) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(1,0)$) and} \newcommand{\Continuefoliate}[5]{ ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(1,0)$) and} \newcommand{\Finishfoliate}[5]{($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(-1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)$) .. controls ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0)+(1,0)$) .. ($0.5*(topl #1)+ 0.5*(#3*0.8-0.8, 0)- #5*(topl #1) - #5*(#3*0.8-0.8, 0) + 0.5*(bottoml #2)+ 0.5*(#4*0.8-0.8, 0) + #5*(bottoml #2)+ #5*(#4*0.8-0.8, 0) + (1,0)$) coordinate (end) ; \path[draw, dashed] (start) ++ (-13pt, 0)-- ($(foliateleft)!(start)!(leftup)$) coordinate (start); \path[draw, dashed] (end)++ (13pt, 0) -- ($(foliateright)!(end)!(rightup)$) coordinate (end); \path ($(start)+ (-21pt,0)$) coordinate (fontlocation); \path ($(end) + (21pt,0)$) coordinate (fontlocationb);} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% Abstract symbols %%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% \thispoint[dx,dy]{A}{x,y} \newcommand{\thispoint}[3][0,0]{\path ($(XYshift)+0.03528*(#1) +(#3)$) coordinate (#2) coordinate (leftt #2) coordinate (rightt #2) coordinate (topl #2) coordinate (bottoml #2) coordinate (fontlocation) coordinate (fontlocationb);} %% \boundingbox{coord1}{coord2} defines bounding box for diagram. \newcommand{\boundingbox}[2]{\useasboundingbox ($(#2)+(XYshift)$) rectangle ($(#2)+(XYshift)$);} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% In text symbols %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \ultrathickdash \newcommand{\ultrathickdash}{\tikz[baseline=-3pt]\path[draw, ultra thick] (0,0) -- (2mm,0);\xspace} % \bbdots also \bwdots, \wbdots, \wwdots, \nbdots, \nwdots, \bndots, \wndots, \bbleftjump, \bbrightjump, \bwleftjump, etc. \newcommand{\bbdots}{\tikz[baseline=-3pt]\path[draw, *-*] (0,0) -- (6mm,0);\xspace} \newcommand{\bwdots}{\tikz[baseline=-3pt]\path[draw, *-o] (0,0) -- (6mm,0);\xspace} \newcommand{\wbdots}{\tikz[baseline=-3pt]\path[draw, o-*] (0,0) -- (6mm,0);\xspace} \newcommand{\wwdots}{\tikz[baseline=-3pt]\path[draw, o-o] (0,0) -- (6mm,0);\xspace} \newcommand{\nbdots}{\tikz[baseline=-3pt]\path[draw, -*] (0,0) -- (6mm,0);\xspace} \newcommand{\nwdots}{\tikz[baseline=-3pt]\path[draw, -o] (0,0) -- (6mm,0);\xspace} \newcommand{\bndots}{\tikz[baseline=-3pt]\path[draw, *-] (0,0) -- (6mm,0);\xspace} \newcommand{\wndots}{\tikz[baseline=-3pt]\path[draw, o-] (0,0) -- (6mm,0);\xspace} \newcommand{\nndots}{\tikz[baseline=-3pt]\path[draw, -] (0,0) -- (6mm,0);\xspace} \newcommand{\nndotslong}{\tikz[baseline=-3pt]\path[draw, -] (0,0) -- (9mm,0);\xspace} \newcommand{\bbleftjump}{\tikz[scale=0.18, xscale=1, rotate=90, baseline=-3pt]\path[draw, *-*] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\bwleftjump}{\tikz[scale=0.18, xscale=1, rotate=90, baseline=-3pt]\path[draw, o-*] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\wbleftjump}{\tikz[scale=0.18, xscale=1, rotate=90, baseline=-3pt]\path[draw, *-o] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\wwleftjump}{\tikz[scale=0.18, xscale=1, rotate=90, baseline=-3pt]\path[draw, o-o] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\bbrightjump}{\tikz[scale=0.18, xscale=-1, rotate=90, baseline=-3pt]\path[draw, *-*] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\bwrightjump}{\tikz[scale=0.18, xscale=-1, rotate=90, baseline=-3pt]\path[draw, o-*] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\wbrightjump}{\tikz[scale=0.18, xscale=-1, rotate=90, baseline=-3pt]\path[draw, *-o] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace} \newcommand{\wwrightjump}{\tikz[scale=0.18, xscale=-1, rotate=90, baseline=-3pt]\path[draw, o-o] (-1,-0.8) -- (-1,0) .. controls (-1,0.555) and (-0.555,1) .. (0,1) .. controls (0.555,1) and (1,0.555) .. (1,0) -- (1,-0.8); \xspace}