summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/xpiano
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-06-18 23:40:39 +0000
committerKarl Berry <karl@freefriends.org>2015-06-18 23:40:39 +0000
commit884e09c32a98aafda3afa999027b70ead7e66018 (patch)
tree358803f186b7140d85bf9896fb4ae0d3188e7172 /Master/texmf-dist/tex/latex/xpiano
parent4d946be07d8ab3d5e3bbc7ab689330eed44a5a14 (diff)
xpiano (23may15)
git-svn-id: svn://tug.org/texlive/trunk@37604 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/xpiano')
-rw-r--r--Master/texmf-dist/tex/latex/xpiano/xpiano.sty283
1 files changed, 283 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/xpiano/xpiano.sty b/Master/texmf-dist/tex/latex/xpiano/xpiano.sty
new file mode 100644
index 00000000000..e5bf0b613ef
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/xpiano/xpiano.sty
@@ -0,0 +1,283 @@
+%%
+%% This is file `xpiano.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xpiano.dtx (with options: `package')
+%% ---------------------------------------------------------------
+%% The xpiano package --- Extension of piano.sty by \'Emile Daneault
+%% Maintained by Enrico Gregorio
+%% Email: enrico DOT gregorio AT univr DOT it
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ---------------------------------------------------------------
+\RequirePackage{expl3,xparse}
+\ProvidesExplPackage {xpiano} {2015/05/22} {1.0}
+ {An extension of piano.sty by \'Emile Daneault}
+\@ifpackagelater { expl3 } { 2015/03/01 }
+ { }
+ {
+ \PackageError { xpiano } { Support~package~expl3~too~old }
+ {
+ You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
+ 'l3packages'.\MessageBreak
+ Loading~xpiano~will~abort!
+ }
+ \tex_endinput:D
+ }
+\RequirePackage{xcolor}
+\definecolor{pianodefault}{RGB}{255,127,0}
+\NewDocumentCommand{\keyboard}{ O{}m }
+ {
+ \xpiano_keyboard:nn { #1 } { #2 }
+ }
+\NewDocumentCommand{\keyboardsetup}{ m }
+ {
+ \keys_set:nn { piano } { #1 }
+ }
+\NewDocumentCommand{\Keyboard}{O{}O{}O{}O{}O{}}
+ {
+ \keyboard{#1,#2,#3,#4,#5}
+ }
+\keys_define:nn { piano }
+ {
+ font .tl_set:N = \l__xpiano_font_tl,
+ single .bool_set:N = \l__xpiano_single_bool,
+ ext .bool_set:N = \l__xpiano_ext_bool,
+ size .dim_set:N = \l__xpiano_size_dim,
+ height .tl_set:N = \l__xpiano_height_tl,
+ numbers .bool_set:N = \l__xpiano_numbers_bool,
+ color .tl_set:N = \l__xpiano_color_tl,
+ numbercolor .tl_set:N = \l__xpiano_numbercolor_tl,
+ 10 .tl_set:N = \l__xpiano_ten_tl,
+ 11 .tl_set:N = \l__xpiano_eleven_tl,
+ ratio .fp_set:N = \l__xpiano_ratio_fp,
+ font .initial:n = \tiny,
+ single .initial:n = false,
+ single .default:n = true,
+ ext .initial:n = false,
+ ext .default:n = true,
+ size .initial:n = 0.5cm,
+ height .initial:n = 4,
+ numbers .initial:n = false,
+ numbers .default:n = true,
+ color .initial:n = {pianodefault},
+ numbercolor .initial:n = black,
+ 10 .initial:n = 10,
+ 11 .initial:n = 11,
+ ratio .initial:n = 0.75,
+ }
+\tl_new:N \l__xpiano_width_tl
+\prop_new:N \g__xpiano_notes_prop
+\prop_gput:Nnn \g__xpiano_notes_prop { Co } { 0 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Cso } { 1 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Do } { 2 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Dso } { 3 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Eo } { 4 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fo } { 5 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fso } { 6 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Go } { 7 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gso } { 8 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ao } { 9 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Aso } { 10 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Bo } { 11 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ct } { 0' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Cst } { 1' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Dt } { 2' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Dst } { 3' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Et } { 4' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ft } { 5' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fst } { 6' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gt } { 7' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gst } { 8' }
+\prop_gput:Nnn \g__xpiano_notes_prop { At } { 9' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ast } { 10' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Bt } { 11' }
+\prop_gput:Nnn \g__xpiano_notes_prop { C } { 0 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ciss } { 1 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Dess } { 1 }
+\prop_gput:Nnn \g__xpiano_notes_prop { D } { 2 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Diss } { 3 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ess } { 3 }
+\prop_gput:Nnn \g__xpiano_notes_prop { E } { 4 }
+\prop_gput:Nnn \g__xpiano_notes_prop { F } { 5 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fiss } { 6 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gess } { 6 }
+\prop_gput:Nnn \g__xpiano_notes_prop { G } { 7 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Giss } { 8 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ass } { 8 }
+\prop_gput:Nnn \g__xpiano_notes_prop { A } { 9 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Aiss } { 10 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Bess } { 10 }
+\prop_gput:Nnn \g__xpiano_notes_prop { B } { 11 }
+\prop_gput:Nnn \g__xpiano_notes_prop { C' } { 0' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ciss' } { 1' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Dess' } { 1' }
+\prop_gput:Nnn \g__xpiano_notes_prop { D' } { 2' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Diss' } { 3' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ess' } { 3' }
+\prop_gput:Nnn \g__xpiano_notes_prop { E' } { 4' }
+\prop_gput:Nnn \g__xpiano_notes_prop { F' } { 5' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fiss' } { 6' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gess' } { 6' }
+\prop_gput:Nnn \g__xpiano_notes_prop { G' } { 7' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Giss' } { 8' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ass' } { 8' }
+\prop_gput:Nnn \g__xpiano_notes_prop { A' } { 9' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Aiss' } { 10' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Bess' } { 10' }
+\prop_gput:Nnn \g__xpiano_notes_prop { B' } { 11' }
+\prop_gput:Nnn \g__xpiano_notes_prop { C } { 0 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Cs } { 1 }
+\prop_gput:Nnn \g__xpiano_notes_prop { D } { 2 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ds } { 3 }
+\prop_gput:Nnn \g__xpiano_notes_prop { E } { 4 }
+\prop_gput:Nnn \g__xpiano_notes_prop { F } { 5 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fs } { 6 }
+\prop_gput:Nnn \g__xpiano_notes_prop { G } { 7 }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gs } { 8 }
+\prop_gput:Nnn \g__xpiano_notes_prop { A } { 9 }
+\prop_gput:Nnn \g__xpiano_notes_prop { As } { 10 }
+\prop_gput:Nnn \g__xpiano_notes_prop { B } { 11 }
+\prop_gput:Nnn \g__xpiano_notes_prop { C' } { 0' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Cs' } { 1' }
+\prop_gput:Nnn \g__xpiano_notes_prop { D' } { 2' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Ds' } { 3' }
+\prop_gput:Nnn \g__xpiano_notes_prop { E' } { 4' }
+\prop_gput:Nnn \g__xpiano_notes_prop { F' } { 5' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Fs' } { 6' }
+\prop_gput:Nnn \g__xpiano_notes_prop { G' } { 7' }
+\prop_gput:Nnn \g__xpiano_notes_prop { Gs' } { 8' }
+\prop_gput:Nnn \g__xpiano_notes_prop { A' } { 9' }
+\prop_gput:Nnn \g__xpiano_notes_prop { As' } { 10' }
+\prop_gput:Nnn \g__xpiano_notes_prop { B' } { 11' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 0 } { 0 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 1 } { 1 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 2 } { 2 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 3 } { 3 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 4 } { 4 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 5 } { 5 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 6 } { 6 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 7 } { 7 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 8 } { 8 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 9 } { 9 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 10 } { 10 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 11 } { 11 }
+\prop_gput:Nnn \g__xpiano_notes_prop { 0' } { 0' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 1' } { 1' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 2' } { 2' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 3' } { 3' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 4' } { 4' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 5' } { 5' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 6' } { 6' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 7' } { 7' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 8' } { 8' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 9' } { 9' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 10' } { 10' }
+\prop_gput:Nnn \g__xpiano_notes_prop { 11' } { 11' }
+\cs_new_protected:Npn \xpiano_keyboard:nn #1 #2
+ {
+ \group_begin:
+ \keys_set:nn { piano } { #1 }
+ \bool_if:NTF \l__xpiano_ext_bool
+ {
+ \tl_set:Nx \l__xpiano_width_tl
+ {
+ \bool_if:NTF \l__xpiano_single_bool { 8 } { 15 }
+ }
+ }
+ {
+ \tl_set:Nx \l__xpiano_width_tl
+ {
+ \bool_if:NTF \l__xpiano_single_bool { 7 } { 14 }
+ }
+ }
+ %% Draw the keyboard
+ \setlength{\unitlength}{\l__xpiano_size_dim}
+ \begin{picture}(\l__xpiano_width_tl,\l__xpiano_height_tl)
+ % White keys
+ \multiput(0,0)(1,0){\l__xpiano_width_tl}{\line(0,1){\l__xpiano_height_tl}}
+
+ % Boundary
+ \put(0,0){\line(0,1){\l__xpiano_height_tl}}
+ \put(0,0){\line(1,0){\l__xpiano_width_tl}}
+ \put(\l__xpiano_width_tl,0){\line(0,1){\l__xpiano_height_tl}}
+ \put(0,\l__xpiano_height_tl){\line(1,0){\l__xpiano_width_tl}}
+
+ % Black keys
+ \linethickness{.6\l__xpiano_size_dim}
+ \multiput(1,\l__xpiano_height_tl)(1,0){2}{\line(0,-1){\fp_eval:n {\l__xpiano_ratio_fp*\l__xpiano_height_tl}}}
+ \multiput(4,\l__xpiano_height_tl)(1,0){3}{\line(0,-1){\fp_eval:n {\l__xpiano_ratio_fp*\l__xpiano_height_tl}}}
+ \bool_if:NF \l__xpiano_single_bool
+ {
+ \multiput(8,\l__xpiano_height_tl)(1,0){2}{\line(0,-1){\fp_eval:n {\l__xpiano_ratio_fp*\l__xpiano_height_tl}}}
+ \multiput(11,\l__xpiano_height_tl)(1,0){3}{\line(0,-1){\fp_eval:n {\l__xpiano_ratio_fp*\l__xpiano_height_tl}}}
+ }
+ % The notes
+ \color{\l__xpiano_color_tl}
+ \clist_map_inline:nn { #2 }
+ {
+ \__xpiano_do_key:n { ##1 }
+ }
+ \end{picture}
+ \group_end:
+ }
+\cs_new_protected:Npn \__xpiano_add_note:nn #1 #2
+ {
+ \put(#2){\circle*{0.5}}
+ \bool_if:NT \l__xpiano_numbers_bool
+ {
+ \put(#2){\makebox(0,0){\normalfont\color{\l__xpiano_numbercolor_tl}\l__xpiano_font_tl #1}}
+ }
+ }
+
+\cs_new_protected:Npn \__xpiano_do_key:n #1
+ {
+ \str_case:fn { \prop_item:Nn \g__xpiano_notes_prop {#1} }
+ {
+ {0}{\__xpiano_add_note:nn {0}{0.5,0.5}}
+ {2}{\__xpiano_add_note:nn {2}{1.5,0.5}}
+ {4}{\__xpiano_add_note:nn {4}{2.5,0.5}}
+ {5}{\__xpiano_add_note:nn {5}{3.5,0.5}}
+ {7}{\__xpiano_add_note:nn {7}{4.5,0.5}}
+ {9}{\__xpiano_add_note:nn {9}{5.5,0.5}}
+ {11}{\__xpiano_add_note:nn {\l__xpiano_eleven_tl}{6.5,0.5}}
+ {0'}{\__xpiano_add_note:nn {0}{7.5,0.5}}
+ {2'}{\__xpiano_add_note:nn {2}{8.5,0.5}}
+ {4'}{\__xpiano_add_note:nn {4}{9.5,0.5}}
+ {5'}{\__xpiano_add_note:nn {5}{10.5,0.5}}
+ {7'}{\__xpiano_add_note:nn {7}{11.5,0.5}}
+ {9'}{\__xpiano_add_note:nn {9}{12.5,0.5}}
+ {11'}{\__xpiano_add_note:nn {\l__xpiano_eleven_tl}{13.5,0.5}}
+ {1}{\__xpiano_add_note:nn {1}{1,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {3}{\__xpiano_add_note:nn {3}{2,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {6}{\__xpiano_add_note:nn {6}{4,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {8}{\__xpiano_add_note:nn {8}{5,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {10}{\__xpiano_add_note:nn {\l__xpiano_ten_tl}{6,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {1'}{\__xpiano_add_note:nn {1}{8,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {3'}{\__xpiano_add_note:nn {3}{9,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {6'}{\__xpiano_add_note:nn {6}{11,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {8'}{\__xpiano_add_note:nn {8}{12,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ {10'}{\__xpiano_add_note:nn {\l__xpiano_ten_tl}{13,\fp_eval:n {0.5+(1-\l__xpiano_ratio_fp)*\l__xpiano_height_tl}}}
+ }
+ }
+\cs_generate_variant:Nn \str_case:nn {f}
+%% Copyright (C) 2015 by
+%% Enrico Gregorio <enrico DOT gregorio AT univr DOT it>
+%%
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version. The latest
+%% version of this license is in the file:
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Enrico Gregorio.
+%%
+%% This work consists of the file xpiano.dtx
+%% and the derived files xpiano.pdf,
+%% xpiano.sty and
+%% xpiano.ins.
+%%
+%% End of file `xpiano.sty'.