% environment for unt's visualisation approach
\define@key{untVisualisation}{minmax}{\def\untVisualisation@minmax{#1}}
\define@key{untVisualisation}{scale}{\def\untVisualisation@scale{#1}}
\define@key{untVisualisation}{showlabels}{\def\untVisualisation@showlabels{#1}}
\newenvironment{untVisualisation}[1][]{
\setkeys{untVisualisation}{minmax={1,5}, scale=1, showlabels=false}
\setkeys{untVisualisation}{#1}
\toneVisualisationFontCmd
% mxn minmax
\pgfmathparse{{\untVisualisation@minmax}[0]}
\edef\xstart{\pgfmathresult}
\pgfmathparse{{\untVisualisation@minmax}[1]}
\edef\xend{\pgfmathresult}
\pgfmathparse{{\untVisualisation@minmax}[0]}
\edef\ystart{\pgfmathresult}
\pgfmathparse{{\untVisualisation@minmax}[1]}
\edef\yend{\pgfmathresult}
\tikzpicture[scale=\untVisualisation@scale]
\begin{scope}[rotate=45, scale=1.4142, line width=0.1em, gray]
\foreach \x in {\xstart,...,\xend}
\draw (\x,\ystart) -- (\x,\yend);
\foreach \y in {\ystart,...,\yend}
\draw (\xstart,\y) -- (\xend,\y);
\end{scope}
\begin{scope}[gray]
\expandafter\ifstrequal\expandafter{\untVisualisation@showlabels}{true}{
\node at (0,\ystart*2-0.5) {\large\bfseries\xstart};
\node at (-\xend+0.6767+\xstart-1,\yend+0.6767+\ystart-1) {\large\bfseries\xend};
\node at (\xend-0.6767-\xstart+1,\yend+0.6767+\ystart-1) {\large\bfseries\xend};
\node (xAxisArrowTip) at (-\xend+0.6767+\xstart-1+\xend/2-\xstart/2,\yend+0.6767+\ystart-1-\yend/2+\ystart/2) {};
\node[below left=1.25em of xAxisArrowTip] (xAxisArrowTail) {};
\draw[line width=0.125em, -angle 60] (xAxisArrowTail) -- (xAxisArrowTip);
\node (yAxisArrowTail) at (\xend-0.6767-\xstart+1-\xend/2+\xstart/2,\yend+0.6767+\ystart-1-\yend/2+\ystart/2) {};
\node[below right=1.25em of yAxisArrowTail] (yAxisArrowTip) {};
\draw[line width=0.125em, -angle 60] (yAxisArrowTail) -- (yAxisArrowTip);
}{}
\end{scope}
}{
\endtikzpicture
}
% draw a point
\newcommand{\drawuntpoint}[9][]{
% override tikz options, background color, coordinates, tone name, tone value in numbers, label position
\node[draw, shape=circle, scale=#9*0.75, inner sep=0.1em, fill, #2, text=white, #1, xshift=#7, yshift=#8]
({#5}{#4})
at ({#3}[0],{#3}[1])
{#4};
\node[#2, #6 = 0pt of {#5}{#4}] {\contour{white}{#5}};
}
\newcounter{sumOfPitchHeights}
% keys of options
\define@key{untpoint}{label}{\def\untpoint@label{#1}}
\define@key{untpoint}{tikzoptions}{\def\untpoint@tikzoptions{#1}}
\define@key{untpoint}{bgcolor}{\def\untpoint@bgcolor{#1}}
\define@key{untpoint}{xshift}{\def\untpoint@xshift{#1}}
\define@key{untpoint}{yshift}{\def\untpoint@yshift{#1}}
\define@key{untpoint}{scale}{\def\untpoint@scale{#1}}
\define@key{untpoint}{stem}{\def\untpoint@stem{#1}}
% drawing interface
\newcommand{\untpoint}[3][]{
% options, tone value in numbers, tone name
\setkeys{untpoint}{label=above, tikzoptions={}, bgcolor=black, xshift=0pt, yshift=0pt, scale=1, stem=false}
\setkeys{untpoint}{#1}
\ifnum0\len=1
\drawuntpoint[{\untpoint@tikzoptions}]{\untpoint@bgcolor}{0,{#2}[0]*2}{#3}{#2}
{\untpoint@label}{\untpoint@xshift}{\untpoint@yshift}{\untpoint@scale}
\else
\setcounter{sumOfPitchHeights}{0}
\pgfmathparse{\len-2}
% calculate the sum of pitch heights
\foreach \pitchHeightIndex in {0,...,{\pgfmathresult}} {
\pgfmathparse{{#2}[\pitchHeightIndex]}
\addtocounter{sumOfPitchHeights}{\pgfmathresult}
\pgfmathparse{{#2}[\pitchHeightIndex+1]}
\addtocounter{sumOfPitchHeights}{\pgfmathresult}
}
% draw the point
\drawuntpoint[\untpoint@tikzoptions]
{\untpoint@bgcolor}
{{-({#2}[0])+{#2}[\len-1]},{\thesumOfPitchHeights/(\len-1)}}
{#3}{#2}
{\untpoint@label}{\untpoint@xshift}{\untpoint@yshift}{\untpoint@scale}
% draw the stem
\expandafter\ifstrequal\expandafter{\untpoint@stem}{true}{
\draw[\untpoint@bgcolor, line width=0.1em] ({-({#2}[0])+{#2}[\len-1]},{#2}[0]+{#2}[\len-1]) -- ({#2}{#3});
}{}
\fi
}
% link points
\define@key{linkuntpoints}{color}{\def\linkuntpoints@color{#1}}
\define@key{linkuntpoints}{bend}{\def\linkuntpoints@bend{#1}}
\newcommand{\linkuntpoints}[3][]{
\setkeys{linkuntpoints}{color=black, bend={}}
\setkeys{linkuntpoints}{#1}
\begin{scope}[
decoration={
markings,
mark=at position 0.5 with {\arrow[scale=0.875]{angle 60}}}
]
\draw[postaction={decorate}, line width=0.15em, \linkuntpoints@color] (#2) to [\linkuntpoints@bend] (#3);
\end{scope}
}