diff options
author | Karl Berry <karl@freefriends.org> | 2021-07-25 20:45:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-07-25 20:45:28 +0000 |
commit | fb77744bf774df8597d3f14eb633aebc4589e738 (patch) | |
tree | 0d86fa6cadea660c1a101aab67c822aa76bb63e5 /Master/texmf-dist/tex | |
parent | 368728d968dd75b237fd69bc3e4d21b6503e96dc (diff) |
tonevalue (25jul21)
git-svn-id: svn://tug.org/texlive/trunk@60058 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tonevalue/tonevalue.sty | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tonevalue/tonevalue.sty b/Master/texmf-dist/tex/latex/tonevalue/tonevalue.sty new file mode 100644 index 00000000000..cfc01a7a00b --- /dev/null +++ b/Master/texmf-dist/tex/latex/tonevalue/tonevalue.sty @@ -0,0 +1,160 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tonevalue} + [2021/07/25 v1.0 LaTeX Package (Tone value: visualising tone value patterns)] + +\RequirePackage{etoolbox} +\RequirePackage{listofitems} +\RequirePackage{xstring} +\RequirePackage{xkeyval} +\RequirePackage{xcolor} +\RequirePackage{tikz} + \usetikzlibrary{positioning,decorations.markings,arrows} +\RequirePackage{contour} + +% package options + % font command + \DeclareOptionX{fontcmd}[\sffamily]{\def\toneVisualisationFontCmd{#1}} + % colors + \DeclareOptionX{defaultcolors}{ + \definecolor{1}{HTML}{7E2639} + \definecolor{2}{HTML}{FF98AF} + \definecolor{3}{HTML}{AD724A} + \definecolor{4}{HTML}{DE6A1C} + \definecolor{5}{HTML}{426579} + \definecolor{6}{HTML}{86B8F3} + \definecolor{7}{HTML}{769164} + \definecolor{8}{HTML}{ACC551} + } + % contour around numbers + \DeclareOptionX{draft}{\contournumber{50}} + \DeclareOptionX{contourlength}[0.075em]{\contourlength{#1}} + \DeclareOptionX{contournumber}[1000]{\contournumber{#1}} +\ExecuteOptionsX{ + contourlength=0.075em, + contournumber=1000, + fontcmd=\sffamily, +} +\ProcessOptionsX*\relax +\ProcessOptionsX\relax + +\def\xjoinbycomma<#1#2>{% + \ifx\relax#1 + \else + #1,\xjoinbycomma<#2>% + \fi +} +\def\sendiauToListStr#1{\xjoinbycomma<#1\relax>} + +% 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} + + \StrGobbleRight{\sendiauToListStr{#2}}{2}[\sendiaulistStr] % readlist cannot parse trailing comma + \readlist\sendiaulist{\sendiaulistStr} + \edef\len{\listlen\sendiaulist[]} + + \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} +} + +\endinput |