X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tex%2Flilyponddefs.tex;h=ff2fa55deccf5de0346cc2f12f07f6cec757bb59;hb=c730a0aab8ce3fd1785b5815122e061534e53d1c;hp=2851557010b9e6ae7f1acc6723425fa2428340e1;hpb=3132736f1b95477ac562eb94f3a8536423e55e1c;p=lilypond.git diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 2851557010..ff2fa55dec 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -1,281 +1,255 @@ +%%% lilyponddefs.tex -- TeX macros for LilyPond output. +%%% +%%% source file of the GNU LilyPond music typesetter +%%% +%%% (c) 1998--2004 Jan Nieuwenhuizen +%%% Han-Wen Nienhuys +%%% Mats Bengtsson +%%% +%% Avoid \par while reading this file. +\edef\lilyponddefsELC{\the\endlinechar}% +\endlinechar -1\relax + +%% This runs with plain TeX, LaTeX, pdftex, and texinfo. %% -%% include file for LilyPond +%% To avoid interferences, lilyponddefs.tex must be loaded within a group. +%% It is loaded only once, so the definitions must be global. %% -%% this file defines various macros to accomodate lilypond output - -\def\mdef#1#2{\def#1{\mchar{#2}}} -\def\mchar#1{\musicfnt\char#1} -\def\rationalmultiply#1*#2/#3{\multiply #1 by #2 \divide #1 by #3} -\def\maccentraise#1#2{\dimen0=\noteheight - \rationalmultiply\dimen0*#2% - \raise\dimen0\hbox{#1}} -\def\maccentdef#1#2#3{\def#1{\maccentraise{\mchar{#2}}{#3}}} -\def\vcenter#1{\vbox to 0pt{\vss #1\vss}} - -\def\mathdef#1#2{\def#1{\mathchar{#2}}} -\def\mathchar#1{\mathfont\char#1} - -\def\topalign#1{\vbox to 0pt{#1\vss}} -\def\botalign#1{\vbox to 0pt{\vss #1}} - -\def\centeralign#1{\hbox to 0pt{\hss#1\hss}} -\def\leftalign#1{\hbox to 0pt{#1\hss}} -\def\rightalign#1{\hbox to 0pt{\hss#1}} - - -%% musix defs -\parindent=0pt -\newdimen\smallspace -\newdimen\interlinedist - \newcount\n - \newdimen\balkhoog - \newdimen\notewidth - \newdimen\noteheight - \newdimen\notewidthhalf - \newdimen\notewidthdouble - \newdimen\staffrulethickness - \newdimen\interstaffrule -\newdimen\balkhalf -\def\musixtwentydefs{ - \font\textfont=cmr10 - \font\meterfont=cmbx12 - \font\slurufont=xslu20 - \font\slurdfont=xsld20 - \font\slurhfont=xslz20 - \font\hslurufont=xslhu20 - \font\hslurdfont=xslhd20 - \font\hslurhfont=xslhz20 - \font\musicfnt=musix20 - \font\musicdraw=musixsps - \font\italicfont=cmti10 - \font\dynfont=cmbxti10 scaled \magstep1 - \font\mathfont=cmsy10 - \balkhoog=20pt - \notewidth=6pt - \noteheight=5pt - \staffrulethickness=0.4pt - \musixcalc -} - - -\def\musixsixteendefs{ - \font\textfont=cmr8 - \font\meterfont=cmbx12 - \font\italicfont=cmti8 - \font\slurufont=xslu16 - \font\slurdfont=xsld16 - \font\slurhfont=xslz20 % sigh - \font\hslurufont=xslhu16 - \font\hslurdfont=xslhd16 - \font\hslurhfont=xslhz20 - \font\musicfnt=musix16 - \font\dynfont=cmbxti12 - \font\musicdraw=musixsps - \font\mathfont=cmsy8 - \balkhoog=16pt - \staffrulethickness=0.4pt - \notewidth=5pt - \noteheight=4pt - \musixcalc -} - -\def\musixcalc{ - \interlinedist=\fontdimen5\musicfnt - \smallspace=.3\interlinedist - \interstaffrule=\balkhoog - \advance\interstaffrule by-\staffrulethickness - \divide\interstaffrule by 4 - \advance\interstaffrule by -\staffrulethickness - \notewidthhalf=\notewidth - \notewidthdouble=\notewidth - \rationalmultiply \notewidthhalf*1/2 - \multiply \notewidthdouble by 2 - \balkhalf=\balkhoog - \rationalmultiply\balkhalf*1/2 -} -% \def\dyn{\italicfont} -\def\dyn{\dynfont} -\def\kdynf{\dynfont f\kern-.1ex} -\def\kdynm{\dynfont m\kern-.15ex} -\def\kdynp{\dynfont p\kern-.15ex} - -\def\dynppp{\dynfont\dynp\kdynp p} - -\def\dynpp{\dynfont p\kdynp} -\def\dynp{\dynfont p} -\def\dynmp{\dynfont m\kdynp} -\def\dynmf{\dynfont m\kdynf} -\def\dynf{\dynfont f} -\def\dynff{\dynfont f\kdynf} -\def\dynfff{\dynfont f\kdynf \kdynf} - -\def\slurcharh#1{{\slurhfont\char#1}} -\def\slurcharu#1{{\slurufont\char#1}} -\def\slurchard#1{{\slurdfont\char#1}} -\def\hslurcharh#1{{\hslurhfont\char#1}} -\def\hslurcharu#1{{\hslurufont\char#1}} -\def\hslurchard#1{{\hslurdfont\char#1}} - -\mdef\quartball{'007} -\mdef\halfball{'010} -\mdef\wholeball{'011} -\mdef\halfrest{'074} -\mdef\wholerest{'075} -\mdef\quartrest{62} -\mdef\eighthrest{63} -\mdef\sixteenthrest{64} -\mdef\thirtysecondrest{65} -\mdef\sharp{52} -\mdef\flat{50} -\mdef\natural{54} -\mdef\sharpsharp{53} -\mdef\flatflat{51} - -\mdef\singledot{'00} -\mdef\doubledot{'01} -\mdef\tripledot{'02} -\mdef\mussepline{155} - -\mdef\violinclef{71} -\mdef\bassclef{73} -\mdef\altoclef{75} -\mdef\cviolinclef{72} -\mdef\cbassclef{74} -\mdef\caltoclef{76} - -\mdef\deigthflag{45} -\mdef\dsixteenthflag{46} -\mdef\dthirtysecondflag{47} - -% pointing up -\mdef\ueigthflag{40} -\mdef\usixteenthflag{41} -\mdef\uthirtysecondflag{42} - -\maccentdef\repeatcolon{55}{2/1} -\def\emptybar{} - -\def\thinbar{\vrule height\balkhoog} -\def\thickbar{\vrule height\balkhoog width 2\smallspace} -\def\maatstreep{\thinbar} -%? what-s wrong with rightalign? -\def\finishbar{\rightalign{\thinbar\kern\smallspace\thickbar}} -%%% \def\finishbar{\hss\rightalign{\thinbar\kern\smallspace\thickbar}} -% \def\repeatstopbar{\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}} -\def\repeatstopbar{\hss\rightalign{\repeatcolon\hskip2\smallspace\thinbar\hskip\smallspace\thickbar}} -\def\repeatstartbar{\hbox{\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}} -\def\repeatstopstart{\hbox{\repeatcolon\kern2\smallspace\thinbar\kern\smallspace\thickbar\kern\smallspace\thickbar\kern\smallspace\thinbar\kern2\smallspace\repeatcolon}} -\def\doublebar{\hbox{\thinbar\hskip\smallspace\thinbar}} - -%compatability -\def\repeatbar{\repeatstopbar} -\def\startrepeat{\repeatstartbar} -\def\repeatbarstartrepeat{\repeatstopstart} - -\def\generalmeter#1#2{\botalign{\vbox to\balkhalf{\vss \meterfont#1}% - \nointerlineskip - \vbox to \balkhalf{\vss\meterfont #2}}} -\def\defaultlineseparator{\vbox{\mussepline\vskip -5pt\mussepline}} -\def\lineseparator{\defaultlineseparator} -\def\beauty{% - \par\vskip 10pt plus 30pt minus 10pt\par - \hskip -5pt\lineseparator - \par\vskip 10pt plus 30pt minus 10pt\par -} - -\def\interstaffline{% - \vskip 10pt -} -\def\ugly{\nointerlineskip\par -\vskip 40pt\par\vbox{\leftalign{\vrule width30pt height1pt}}\par\vskip 40pt -} -\def\interscoreline{\beauty} - - -\def\lines#1#2{% - \vbox{\kern-\interstaffrule - \n=0\nointerlineskip% - \loop\ifnum\n<#1\advance\n by1% - \kern\interstaffrule - \hrule height \staffrulethickness width#2 - \repeat - }} - -\def\toplines#1{ % why space needed here? - \topalign{\hbox{\kern-\notewidth\lines{#1}{\notewidthdouble}}}} -\def\botlines#1{ % idem ditto - \botalign{\hbox{\kern-\notewidth\lines{#1}{\notewidthdouble}}}} - -% -% a staffsymbol with #1 lines, width #2 -% bottom at baseline -\def\linestafsym#1#2{\leftalign{\botalign{\lines{#1}{#2}}}} - -\def\eigthflag{\topalign{\ueigthflag}} -\def\sixteenthflag{\topalign{\usixteenthflag}} -\def\thirtysecondflag{\topalign{\uthirtysecondflag}} - -\def\cquartrest{\vcenter\quartrest} -\def\ceighthrest{\vcenter\eighthrest} -\def\csixteenthrest{\vcenter\sixteenthrest} -\def\cthirtysecondrest{\vcenter\thirtysecondrest} - -\def\lsingledot{\kern-\notewidth\singledot} -\def\ldoubledot{\kern-\notewidth\doubledot} -\def\ltripledot{\kern-\notewidth\tripledot} - -\maccentdef\sforzato{30}{-3/2} -\maccentdef\marcato{20}{-1/1} -\maccentdef\imarcato{21}{1/1} -\maccentdef\staccato{24}{-1/1} -\maccentdef\istaccato{25}{1/1} -\maccentdef\staccatissimo{28}{-1/1} -\maccentdef\istaccatissimo{29}{1/1} -\maccentdef\portato{18}{-9/10} -\maccentdef\iportato{19}{9/10} -\maccentdef\tenuto{26}{0/1} -\maccentdef\itenuto{27}{0/1} -\maccentdef\fermata{80}{-1/1} -\maccentdef\ifermata{81}{1/1} - -\mdef\spicato{28} -\mdef\ispicato{29} -\mdef\upbow{23} -\mdef\downbow{22} -\mdef\portato{26} - -\mathdef\cup{91} % \cup -\mathdef\wedge{94} % \wedge -\mathdef\striepke{0} % heu? - -%% custom characters --- this should go: add to (meta!) font -\def\myheel{\kern-.5ex\vbox{\cup}\kern-.5ex} -\def\mytoe{\kern-.5ex\vbox{\wedge}\kern-.5ex} -\def\mystriepke{\kern-1.1ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.1ex} - -\def\heel{\vbox{\myheel}} -\def\toe{\vbox{\mytoe}} -\def\backorfront{\mystriepke} - -\def\bheel{\vbox{\myheel\mystriepke}} -\def\btoe{\vbox{\mytoe\mystriepke}} -\def\fheel{\vbox{\mystriepke\myheel}} -\def\ftoe{\vbox{\mystriepke\mytoe}} -\def\heeltoe{\vbox{\myheel\mytoe}} -\def\toeheel{\vbox{\mytoe\myheel}} +%% The overall structure of a file created by LilyPond is as follows: %% - -\def\stem#1#2{\vrule height#2 depth-#1} - -\def\placebox#1#2#3{% - \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}% +%% +%% +%% \ifx\lilypondstart \undefined +%% \input lilyponddefs +%% \fi +%% \lilypondstart +%% +%% \lilypondend + +\newdimen\lytempdim +\newdimen\outputscale + +%% Handy macros from the LaTeX manual. +\long\gdef\lilypondfirst#1#2{#1} +\long\gdef\lilypondsecond#1#2{#2} +\gdef\lilypondifundefined#1{ + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\lilypondfirst + \else + \expandafter\lilypondsecond + \fi } - -\def\beamslope#1#2{{\count0=#2\advance\count0 by#1\musicfnt\char\count0}} -\def\rulesym#1#2{\vrule height #1 width #2} -\def\crescendosym#1{\count0=84\advance\count0 by #1\musicdraw\char\count0} -\def\decrescendosym#1{\count0=116\advance\count0 by #1\musicdraw\char\count0} -\def\settext#1{\textfont #1} -\def\setitalic#1{\italicfont #1} -\def\setdynamic#1{\dynfont #1} +%% Urgh. Lilypond uses EC fonts, but texinfo is based on CM. We thus +%% have to handle T1 font encoding by ourselves. Note that the following +%% code only provides the texinfo interface, not complete access to all +%% EC glyphs. + +\begingroup +\catcode `\@=11\relax +\gdef\lilypondECencoding{ + \def\"##1{ + {\accent4 ##1}} + \def\'##1{ + {\accent1 ##1}} + \def\,##1{ + {\leavevmode + \setbox\z@\hbox{##1} + \ifdim\ht\z@=1ex + \accent11 ##1 + \else + {\ooalign{ + \unhbox\z@ + \crcr + \hidewidth + \char11 + \hidewidth}} + \fi}} + \def\=##1{ + {\accent9 ##1}} + \def\^##1{ + {\accent2 ##1}} + \def\`##1{ + {\accent0 ##1}} + \def\~##1{ + {\accent3 ##1}} + \def\dotaccent##1{ + {\accent10 ##1}} + \def\H##1{ + {\accent5 ##1}} + \def\ringaccent##1{ + {\accent6 ##1}} +% \def\tieaccent##1{} % unsupported: this is TS1 + \def\u##1{ + {\accent8 ##1}} + \def\ubaraccent##1{ + {\o@lign{ + \relax + ##1 + \crcr + \hidewidth + \sh@ft{29}\vbox to.2ex{ + \hbox{\char9} + \vss} + \hidewidth}}} + \def\udotaccent##1{ + {\o@lign{ + \relax + ##1 + \crcr + \hidewidth + \sh@ft{10}. + \hidewidth}}} + \def\v##1{ + {\accent7 ##1}} + + \chardef\exclamdown=189 + \chardef\questiondown=190 + + \def\aa{ + \ringaccent{a}} + \def\AA{ + \ringaccent{A}} + \chardef\AE=198 + \chardef\ae=230 + \chardef\ptexi=25 + \chardef\j=26 + \chardef\L=138 + \chardef\l=170 + \chardef\O=216 + \chardef\o=248 + \chardef\OE=215 + \chardef\oe=247 + \chardef\ss=255 +} +\endgroup + +\gdef\lilypondstart{ + \frenchspacing + \begingroup + \catcode `\@=11\relax + %% \@nodocument is defined as \relax after `\begin{document}' + \lilypondifundefined{@nodocument} + {%% either plain TeX or texinfo or not at the beginning of LaTeX input + \def\x{ + \endgroup + \def\lilypondfontencoding####1{ + \lilypondECencoding}}} + {%% FIXME: a4 + %% provide a proper LaTeX preamble (for A4 paper format) + \def\x{ + \endgroup + \def\lilyponddocument{} + \def\lilypondfontencoding####1{ + \fontencoding{####1} + \selectfont} + \documentclass[a4paper]{article} + %% safe-mode + \nofiles + \usepackage[\lilypondpaperinputencoding]{inputenc} + \pagestyle{empty} + \lilypondifundefined{lilypondclassic} + {%% Nullify [La]TeX page layout settings, page layout by LilyPond. + \topmargin-1in + \headheight0pt\headsep0pt + \oddsidemargin-1in + \evensidemargin\oddsidemargin} + {%% Center staves horizontally on page + \ifdim\lilypondpaperlinewidth\lilypondpaperunit > 0pt + \hsize\lilypondpaperlinewidth\lilypondpaperunit + \lytempdim \paperwidth + \advance\lytempdim -\the\hsize + \lytempdim 0.5\lytempdim + \advance\lytempdim -1in + \oddsidemargin \lytempdim + \evensidemargin \lytempdim + \fi} + \parindent 0pt + %% TEXINFO workaround: \begin is defined as \outer, use \csname. + \csname begin\endcsname{document}}} + \x} + +\gdef\lilypondend{ + \lilypondifundefined{lilypondbook} + {\lilypondifundefined{lilypondpaperlastpagefill} + {\vskip 0pt plus\lilypondpaperinterscorelinefill00 fill} + {}} + {} + \begingroup + \lilypondifundefined{lilyponddocument} + {\def\x{\endgroup}} + {\def\x{\endgroup\csname end\endcsname{document}}} + \x} + +%% Allow overriding of pagebreak +\lilypondifundefined{lilypondpagebreak} + {\lilypondifundefined{@nodocument} + {\gdef\lilypondpagebreak{\eject}} + {\gdef\lilypondpagebreak{\newpage}}} + {} + +%% Allow overriding of pagebreak +\lilypondifundefined{lilypondnopagebreak} +{\lilypondifundefined{@nodocument} + {\gdef\lilypondnopagebreak{}} + {\gdef\lilypondnopagebreak{\nopagebreak}}} +{} +%% Include \special only once. +\gdef\lilypondspecial{ + \special{header=music-drawing-routines.ps} + \gdef\lilypondspecial{}} + +%% The feta characters. +\input feta20 + +\global\font\fetasixteen = feta16 +\gdef\fetafont{\fetasixteen} +\gdef\fetachar#1{\hbox{\fetasixteen#1}} + +\gdef\topalign#1{\vbox to 0pt{\hbox{#1}\vss}} +\gdef\leftalign#1{\hbox to 0pt{#1\hss}} + +\gdef\lyitem#1#2#3{ + \topalign{\raise#2\outputscale\leftalign{\kern#1\outputscale#3}}} + +\gdef\lybox#1#2#3#4#5{ + \lytempdim\baselineskip + \advance\lytempdim-#4\outputscale + \raise\lytempdim + \vbox to#4\outputscale{ + \leftalign{\kern#1\outputscale\lower#2\outputscale\topalign{#5}} + \vss}} + +\gdef\lyvrule#1#2#3#4{ + \kern#1\outputscale + \vrule width #2\outputscale depth #3\outputscale height #4\outputscale} + +%% FIXME: 'interscoreline' and 'lilypondPAPERinterscoreline +\lilypondifundefined{lilypondpaperinterscorelinefill} + {\gdef\lilypondpaperinterscorelinefill{0}} + {\gdef\lilypondpaperinterscorelinefill{1}} + +%% Allow overriding of interscoreline, e.g. for lilypond.py's --preview +\lilypondifundefined{interscoreline} + {\lilypondifundefined{lilypondclassic} + {\gdef\interscoreline{}} + {\gdef\interscoreline{ + \vskip\lilypondpaperinterscoreline\lilypondpaperunit + plus \lilypondpaperinterscorelinefill fill}}} + {} + +%% Include postscript definitions unless using PDFTeX, +%% in that case use pdf definitions. +%% MiKTeX workaround: use \csname. +\lilypondifundefined{lilypondpostscript} + {\lilypondifundefined{pdfoutput} + {\input lily-ps-defs } + {\pdfoutput = 1 + \input lily-pdf-defs }} + {} + +%% Restore newline functionality (disabled to avoid \par). +\endlinechar \lilyponddefsELC +\endinput + +%% end lilyponddefs.tex