-
Notifications
You must be signed in to change notification settings - Fork 0
/
chords_ukulele.tex
70 lines (63 loc) · 2 KB
/
chords_ukulele.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
% Ukulele Chords section
\newcommand\drawukulelechord[2][]{%
\edef\chord{#2}%
\begin{tikzpicture}[x=1.3ex,y=1.3ex,line cap=round,line width=.4pt,
baseline=(current bounding box.center),#1]
\draw[line width=.6pt] (1,0) -- (4,0);
\foreach \d in {1,...,4}{\draw (1,-\d) -- (4,-\d);}
\foreach \d[count=\p] in \chord {
\draw (\p,0) -- (\p,-4.5);
\ifdefstring{\d}{-1}{
\draw (\p,.25) +(-.125,-.125) -- +(.125,.125)
+(-.125,.125) -- +(.125,-.125);
}{
\ifdefstring{\d}{0}{
\draw (\p,.25) circle(.125); % opened string
}{
\fill (\p,.5-1*\d) circle(.25);
}
}
}
\path[use as bounding box] (0.5,.5) rectangle (4.5,-5);
\end{tikzpicture}%
}
\makeatletter
\newcommand\defineukulelechord[2]{%
\csdef{@ukulelechord@#1}{\drawukulelechord{#2}}%
}
\newcommand\ukulelechord[1]{%
\ifcsdef{@ukulelechord@#1}{%
\csuse{@ukulelechord@#1}%
}{%
\GenericError{}{Undefined ukulele chord '#1'}{}{}%
}%
}
\makeatother
\defineukulelechord{A maj}{2,1,0,0}
\defineukulelechord{A 6}{2,1,2,0}
\defineukulelechord{G sharp maj}{5,3,4,3}
\defineukulelechord{A flat maj}{5,3,4,3}
\defineukulelechord{G sharp 6}{1,3,1,3}
\defineukulelechord{Am}{2,0,0,0}
\defineukulelechord{A 7}{0,1,0,0}
\defineukulelechord{C}{0,0,0,3}
\defineukulelechord{G}{0,2,3,2}
\defineukulelechord{G7}{0,2,1,2}
\defineukulelechord{Em}{0,4,3,2}
\defineukulelechord{D}{2,2,2,0}
\defineukulelechord{D 7}{2,0,2,0} % this is an approximation, it's actually F#dim but works well
\defineukulelechord{Dm}{2,2,1,0}
\defineukulelechord{As7}{1,3,2,3}
\defineukulelechord{F}{2,0,1,0}
\defineukulelechord{Fmaj7}{2,4,1,3}
\defineukulelechord{D/F+}{0,2,5,2} % needs checking
\defineukulelechord{A}{2,1,0,0} % needs checking
\defineukulelechord{E}{1,4,0,2} % needs checking
\defineukulelechord{Ami}{2,0,0,0} % needs checking
\defineukulelechord{Emi}{0,4,3,2} % needs checking
\defineukulelechord{Bm}{4,2,2,2}
\defineukulelechord{B}{4,3,2,2}
\defineukulelechord{Gb}{3,1,2,1}
\defineukulelechord{C9}{0,0,0,1}
\defineukulelechord{D7}{2,0,2,0}
\defineukulelechord{A7}{0,1,0,0}