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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% This file is part of the 'lilyglyphs' LaTeX package. %
% ========== %
% %
% https://github.com/openlilylib/lilyglyphs %
% http://www.openlilylib.org/lilyglyphs %
% %
% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
% %
% 'lilyglyphs' is free software: you can redistribute it and/or modify %
% it under the terms of the LaTeX Project Public License, either %
% version 1.3 of this license or (at your option) any later version. %
% You may find the latest version of this license at %
% http://www.latex-project.org/lppl.txt %
% more information on %
% http://latex-project.org/lppl/ %
% and version 1.3 or later is part of all distributions of LaTeX %
% version 2005/12/01 or later. %
% %
% This work has the LPPL maintenance status 'maintained'. %
% The Current Maintainer of this work is Urs Liska (see above). %
% %
% This work consists of the files listed in the file 'manifest.txt' %
% which can be found in the 'license' directory. %
% %
% This program is distributed in the hope that it will be useful, %
% but WITHOUT ANY WARRANTY; without even the implied warranty of %
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This file is part of the lilyglyphs package %
% and defines one subset of glyphs %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% logic for dotted glyphs %
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Dot, e.g. necessary to create dotted notes
\newcommand*{\lilyDot}[1][]{%
\setkeys{lilyDesignOptions}{scale=1.5,raise=0}%
\lilyPrint[#1]{\lilyGetGlyph{dots.dot}}%
}
\makeatletter
% Calculate the space between a glyph and a dot
% based on the 2nd order function
% f(x) = (1/n * x^2) - 1/n + (m * x) - m + o
% where
% #1: scaling factor x
% #2: curve factor n
% #4 line steepness m
% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).
% The result is supposed to be taken as ex and stored in \lilyDotSpaceF
% which is used by \lilyDotSpace
\newcommand*{\lilyCalcDotSpace}[4]{%
\pgfmathsetmacro{\lilyDotSpaceF}{%
#1 * #1% x^2
* #2 - #2%
+ #1 * #3 - #3 + #4}%
}
% Interpret the different options to be used for printing a dot
% The optional arguments (passed as #1)given by the user are taken into account,
% then the scaling and raise are calculated using the design options
% from the calling predefined command.
% Finally the space between the glyph and the dot is calculated using the
% 2nd order function \lilyCalcDotSpace:
% (1/n * scale^2) - 1/n + (1/m * scale) - 1/m + o
% #2: curve factor n
% #4 line steepness m
% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).
\newcommand*{\lilySetDotOptions}[4][]{%
% Initialize the user's command option in case he didn't provide them
\setkeys{lilyCmdOptions}{scale=1,raise=0}%
% process the optional argument to access the values
\setkeys{lilyCmdOptions}{#1}%
% calculate optional arguments for the dot,
% based on "design options" and the given arguments
\pgfmathsetmacro{\lilyDotScale}{\lilyCmdOptions@scale * \lilyDesignOptions@scale}%
\pgfmathsetmacro{\lilyDotRaise}{\lilyCmdOptions@raise + \lilyDesignOptions@raise}%
% calculate the space between the rest and the dot
\lilyCalcDotSpace{\lilyCmdOptions@scale}{#2}{#3}{#4}%
}
\makeatother
% Insert a space between a glyph and a dot
% \lilyCalcDotSpace or better \lilySetDotOptions should have been called
% immediately before \lilyDotSpace,
% otherwise the result could be undefined
\newcommand*{\lilyDotSpace}{\hspace*{\lilyDotSpaceF ex}}
% Print the actual dot,
% use the settings defined in \lilySetDotOptions
\newcommand*{\lilyPrintDot}{\lilyDot[raise=\lilyDotRaise,scale=\lilyDotScale]}
% Print another dot, for multiply dotted symbols.
% It uses the dot settings from the previous command.
% So if you encounter strange settings, make sure you have called
% a predefined command of a dotted symbol immediately before.
% If no predefined command has been called at all
% you will see an error message because the key-value pairs
% haven't been initialized yet.
% It uses a different way to determine the space between dots.
% It defaults to 0.25 ex, but you can optionally pass it
% a number that is interpreted as ex.
\newcommand*{\lilyPrintMoreDots}[1][0.25]{%
\hspace*{#1 ex}\lilyPrintDot%
}
|