X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tex%2Flilyponddefs.tex;h=466cf12a75be7351bc339679aa92ba89c676a47c;hb=994afd57a52e53c175df1e0298ffc0e58187761a;hp=49e60c567ead3f24be729c0617c91e847f93f771;hpb=b7042c07d1f9d96b5f53e3be5261603d7dc38a91;p=lilypond.git diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 49e60c567e..466cf12a75 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -1,240 +1,177 @@ +%%% 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 - -% TeXbook ex 7.7 -\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax} - -% skip if included already -\def\SkipLilydefs{\endinput} -\ifundefined{EndLilyPondOutput} - \def\EndLilyPondOutput{\csname bye\endcsname} - \def\SkipLilydefs{} -\fi -\SkipLilydefs - -\ifundefined{mudelacopyright} - \def\mudelacopyright{\copyright\ \number\year} -\fi -\ifundefined{LilyIdString} - \def\LilyIdString{Lily was here} -\fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% macros to shorten other definitions -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\musicdef#1#2{\def#1{\musicchar{#2}}} -\def\musicchar#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{\musicchar{#2}}{#3}}} -\def\vertcenter#1{\vbox to 0pt{\vss #1\vss}} - -\def\musicmathdef#1#2{\def#1{\musicmathchar{#2}}} -\def\musicmathchar#1{\musicmathfont\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}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% set up dimensions -\parindent=0pt -\newdimen\smallspace -\newdimen\interlinedist -\newcount\n -\newdimen\balkheight -\newdimen\notewidth -\newdimen\noteheight -\newdimen\staffrulethickness -\newdimen\interstaffrule - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% set fonts and primary dimensions -\def\musixtwentydefs{ - \balkheight=20pt - \notewidth=6pt - \noteheight=5pt - \staffrulethickness=0.4pt - \musixtwentyfonts - \musixcalc -} - -\def\musixsixteendefs{ - \balkheight=16pt - \staffrulethickness=0.4pt - \notewidth=5pt - \noteheight=4pt - \musixsixteenfonts - \musixcalc -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% do derivative calcs - -\def\musixcalc{ - \interlinedist=\fontdimen5\musicfnt - \smallspace=.3\interlinedist - \interstaffrule=\balkheight - \divide\interstaffrule by 4 -} - - -\input dyndefs - -\input taupindefs - -\musicmathdef\cup{91} % \cup -\musicmathdef\wedge{94} % \wedge -\musicmathdef\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\myheel{\vbox{\cup}} -\def\mytoe{\vbox{\wedge}} -% \def\mystriepke{\kern-1.1ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.1ex} -\def\mystriepke{\kern-1.8ex\vbox{\hbox{\kern-.05em\striepke}}\kern-1.8ex} - -\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}} -%% - -\def\emptybar{} - -\def\defaultthinbar{\thinbar{\balkheight}} -\def\defaultthickbar{\thickbar{\balkheight}} -%? what-s wrong with rightalign? -\def\repeatstopbar{\hss\rightalign{\repeatcolon\hskip2\smallspace\defaultthinbar\hskip\smallspace\defaultthickbar}} -\def\repeatstartbar{\hbox{\defaultthickbar\kern\smallspace\defaultthinbar\kern2\smallspace\repeatcolon}} -\def\repeatstopstart{\hbox{\repeatcolon\kern2\smallspace\defaultthinbar\kern\smallspace\defaultthickbar\kern\smallspace\defaultthickbar\kern\smallspace\defaultthinbar\kern2\smallspace\repeatcolon}} - -%compatibility -\def\repeatbar{\repeatstopbar} -\def\startrepeat{\repeatstartbar} -\def\repeatbarstartrepeat{\repeatstopstart} - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% parametric symbols -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def\doublebar#1{\hbox{\thinbar{#1}\hskip\smallspace\thinbar{#1}}} -\def\thinbar#1{\vrule height #1 width 1.6\staffrulethickness} % TODO parametric. -\def\thickbar#1{\vrule height #1 width 2\smallspace} -\def\maatstreep#1{\thinbar{#1}} -\def\startbar#1{\leftalign{\thickbar{#1}\kern\smallspace\thinbar{#1}}} -\def\finishbar#1{\rightalign{\thinbar{#1}\kern\smallspace\thickbar{#1}}} - -\def\pianobrace#1{{\musicdraw\char#1}} -\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}} -% stacked numbers -\def\generalmeter#1#2{\botalign{\vbox to0.5\balkheight{\vss \meterfont#1}% - \nointerlineskip - \vbox to 0.5\balkheight{\vss\meterfont #2}}} - -% stacked horizontal lines -\def\lines#1#2#3{% - \vbox{\kern-\interstaffrule - \n=0\nointerlineskip% - \loop\ifnum\n<#1\advance\n by1% - \kern\interstaffrule - \nointerlineskip - \vbox to 0pt{\hrule height #3 width#2% - \vss}\nointerlineskip - \repeat - }} - +%% The overall structure of a file created by LilyPond is as follows: %% -% Ugh. Need to redo this. Wish we had PS. -% -\def\toplines#1{ % why space needed here? - \topalign{\hbox{\kern-\notewidth\lines{#1}{1.6\notewidth}{1.6\staffrulethickness}}}} - -\def\botlines#1{ % idem ditto - \botalign{\hbox{\kern-\notewidth\lines{#1}{1.6\notewidth}{1.6\staffrulethickness}}}} - -% -% a staffsymbol with #1 lines, width #2 -% bottom at baseline -\def\linestafsym#1#2{\leftalign{\botalign{\lines{#1}{#2}{\staffrulethickness}}}} - -\def\stem#1#2{\vrule height#2 depth-#1} - -\def\placebox#1#2#3{% - \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}% -} - - -\def\beamslope#1#2{{\count0=#2\advance\count0 by#1\musicfnt\char\count0}} -\def\brace#1{\count0=148\advance\count0 by #1\musicdraw\char\count0} -\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\rulesym#1#2{\vrule height #1 width #2} -\def\settext#1{\normaltextfont #1} -\def\setitalic#1{\italicfont #1} -\def\setdynamic#1{\dynfont #1} - -% the interline symbol. Redefine to remove it. -\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 +%% +%% +%% \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\interscoreline{\vskip 16pt} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% big fat marks, if errors are detected. -\def\columnerrormark{\placebox{-5pt}{0pt}{\bf C!}} -\def\scorelineerrormark{\placebox{0pt}{-10pt}{\bf L!}} -\def\unknown{{\bf u}} - -\def\postheader{} -\ifundefined{documentclass} - \footline={\ifnum\pageno=1 - {\smalltextfont\mudelacopyright\hfil \LilyIdString - }\else{\hfil\the\pageno\hfil}\fi -}\else - %% FIXME - \def\ps@plain{ - \renewcommand{\@oddhead}{}% - \renewcommand{\@evenfoot}{}% - \renewcommand{\@evenhead}{}% - \renewcommand{\@oddfoot}{\ifnum\thepage=1 - {\hfil \LilyIdString - }\else{foo\hfil\the\pageno\hfil}\fi}} - \def\ps@empty{ - \renewcommand{\@oddhead}{}% - \renewcommand{\@evenfoot}{}% - \renewcommand{\@evenhead}{}% - \renewcommand{\@oddfoot}{\ifnum\thepage=1 - {\hfil \LilyIdString - }\else{foo\hfil\the\pageno\hfil}\fi}} -\fi +\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{}}} + {%% 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} + +%% Inversed \loop ... \repeat macro +\def\lilypondloop#1\lilypondrepeat{ + \def\lilypondbody{#1} + \lilyponditerate} + +\def\lilyponditerate{ + % \if ... + \lilypondbody + \let\lilypondnext \relax + \else + \let\lilypondnext \lilyponditerate + \fi + \lilypondnext} + +%% Allow overriding of pagebreak +\lilypondifundefined{lilypondpagebreak} +{\lilypondifundefined{@nodocument} + {\gdef\lilypondpagebreak{\eject}} + {\gdef\lilypondpagebreak{\newpage}}} +{} + +%% 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