From 94a3ec7f333b2bc7b4d29565c2b4a57ae04c5180 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Mon, 21 Aug 2017 20:46:20 +0000
Subject: octave (21aug17)

git-svn-id: svn://tug.org/texlive/trunk@45089 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/octave/octave.sty | 157 ++++++++++++++++++++++++++
 1 file changed, 157 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/octave/octave.sty

(limited to 'Master/texmf-dist/tex/latex/octave/octave.sty')

diff --git a/Master/texmf-dist/tex/latex/octave/octave.sty b/Master/texmf-dist/tex/latex/octave/octave.sty
new file mode 100644
index 00000000000..7bd575e4118
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/octave/octave.sty
@@ -0,0 +1,157 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{octave}
+[2017/08/21 Octave designations in Helmoltz or traditional style]
+
+% Copyright 2017 Andrew A. Cashner, andrewacashner@gmail.com
+
+% This work may be distributed and/or modified under the 
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any 
+% later version.
+% The latest version of this license is in 
+%    http://www.latex-project.org/lppl.txt
+% 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 Andrew A. Cashner.
+% This work consists of the package file octave.sty
+% and the documentation file octave.tex.
+
+% CHANGE LOG
+% 2017-08-21 First version on CTAN
+
+\newif\if@OctaveNumber
+\@OctaveNumbertrue % Use Helmholtz numbers by default
+
+\DeclareOption{prime}  {\@OctaveNumberfalse}
+\DeclareOption{number} {\@OctaveNumbertrue}
+
+\ProcessOptions\relax
+
+\RequirePackage{xparse}
+
+% Allow user to switch styles mid-document
+\NewDocumentCommand{\octaveprimes}  {}{\@OctaveNumberfalse}
+\NewDocumentCommand{\octavenumbers} {}{\@OctaveNumbertrue}
+
+%****************************************************************************
+% Main user command to enter pitch
+% example: middle C is \pitch{c}{4}, semitone up is \pitch{C}[\sh]{4}
+% #1 Pitch letter (can be lower or uppercase)
+% #2 Optional accidental (e.g., $\flat$, or \fl{} from semantic-markup package)
+% #3 Octave number (Helmholtz numbers, middle C = 4)
+\NewDocumentCommand{\pitch}{ m o m }{%
+    \if@OctaveNumber
+        {\pitchfont{\MakeUppercase{#1}%
+        \IfValueTF{#2}{#2}{}\textsubscript{#3}}}%
+    \else
+        {\pitchfont{%
+            \@GetOctaveTick{#1}[#2]{#3}%
+        }}%
+    \fi
+}
+
+% Font for pitch and octave designation, default italics for prime style
+% User can change with \renewcommand
+\NewDocumentCommand{\pitchfont}{}{%
+    \if@OctaveNumber\mdseries%
+    \else\itshape%
+    \fi
+}
+
+%***************************************************************************
+% If using ticks, determine the right letter and octave symbols to print
+%
+% Octave  Designation
+%      0  C''
+%      1  C'
+%      2  C
+%      3  c
+%      4  c'
+%      5  c''
+% 
+% The input octave number can be less than zero or more than 5; this will just
+% produce a lot of tick marks (e.g., \pitch{c}{8} => c'''''
+
+% Mnemonic for selecting upper or lowercase letters, 
+% used as argument to \@PrintLetter
+\NewDocumentCommand{\@OctaveUpper}{}{1}
+\NewDocumentCommand{\@OctaveLower}{}{0}
+
+% Get the letter of the proper case and the right number of ticks.
+% #1 Pitch letter
+% #2 Optional accidental
+% #3 Pitch number in Helmholtz notation
+\newcount\@OctaveNum
+\NewDocumentCommand{\@GetOctaveTick}{ m o m }{%
+    \@OctaveNum = #3
+    \ifnum\@OctaveNum < 3 
+    % Octave < 3: Letter lowercase + (-OctaveNum + 2)ticks
+        \@PrintLetter{\@OctaveUpper}{#1}%
+        \multiply\@OctaveNum by -1 
+        \advance\@OctaveNum by 2 
+    \else
+    % Octave >= 3: Letter uppercase + (OctaveNum - 3)ticks
+        \ifnum\@OctaveNum > 2
+            \@PrintLetter{\@OctaveLower}{#1}%
+            \advance\@OctaveNum by -3
+        \fi
+    \fi
+    % Print accidental if there is one
+    \IfValueTF{#2}{\@SpacedAccidental{#2}}{}%
+    % Print ticks; No need to do so if octave 2 or 3
+    \ifnum\@OctaveNum > 0
+        \kern1pt\@PrintTicks{\@OctaveNum}%
+    \fi
+}
+
+% Accidental with spacing around it
+%  #1 accidental symbol code
+\NewDocumentCommand{\@SpacedAccidental}{ m }{%
+    \kern0.4pt#1\kern-0.4pt%
+}
+% Print letter in proper case
+% #1 \@OctaveUpper (=1) or \@OctaveLower (=0)
+% #2 Character to print
+\NewDocumentCommand{\@PrintLetter}{ m m }{%
+    \ifnum #1 = \@OctaveLower
+        \MakeLowercase{#2}%
+    \else
+        \MakeUppercase{#2}%
+    \fi
+}
+        
+% Print sequence of tick marks
+\newcount\@TickNum
+\NewDocumentCommand{\@PrintTicks}{ m }{%
+   \@TickNum = #1%
+   \loop
+        \@Tick{}%
+    \advance\@TickNum by -1
+    \ifnum\@TickNum > 0
+    \repeat
+}
+\NewDocumentCommand{\@Tick}{}{\ensuremath{'}}
+
+%*******************************************
+% Octave comparison table for demonstration
+\newcounter{@TableOctave}
+\NewDocumentCommand{\octavetable}{}{%
+    \def\@TablePitchNames{}%
+    \loop
+    \edef\@TablePitchNames{%
+        \@TablePitchNames
+        {\octaveprimes \pitch{C}{\the@TableOctave}} & 
+        {\octavenumbers \pitch{C}{\the@TableOctave}}\tabularnewline
+    }%
+    \stepcounter{@TableOctave}%
+    \ifnum\value{@TableOctave} < 8
+    \repeat
+    %
+    \begin{tabular}{ll}
+        \@TablePitchNames
+    \end{tabular}%
+}
+
+\endinput
-- 
cgit v1.2.3

