X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tex%2Flilyponddefs.tex;h=5cc6d4ffcf95e3b7b6172efe765fad235816cfaa;hb=365965540333eb846c417f94c2a2c8a5578b2d52;hp=7a841241557419b1d30083f832a42621667ae395;hpb=6a1295eaacbc3e6b5a7ce19f7f942b23f8d7f2ff;p=lilypond.git diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 7a84124155..5cc6d4ffcf 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -1,274 +1,205 @@ -%% -%% include file for LilyPond -%% -%% this file defines various macros to accomodate lilypond output -%% -%% let's not make par before endinput +% lilyponddefs.tex % -% TeXbook ex 7.7 -\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax} +% Include file for LilyPond. % -% skip if included already -\def\SkipLilydefs{\endinput} -\ifundefined{EndLilyPondOutput} - \def\EndLilyPondOutput{\csname bye\endcsname} - \def\SkipLilydefs{} -\fi -\SkipLilydefs +% This file defines various macros to acommodate lilypond output. % -\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}} +% It should run with plain TeX, LaTeX, pdftex, and texinfo. +% +% To avoid interferences, lilyponddefs.tex should be loaded within a group. +% To load it only once, most of the definitions must be global. +% +% The overall structure of a file created by LilyPond is as follows: +% +% +% \ifx\lilypondstart \undefined +% \input lilyponddefs +% \fi +% \lilypondstart +% +% \lilypondend +% +% No footers and headers are provided for the stand-alone run (i.e., for +% directly saying `latex '. +% +% +% Avoid \par while reading this file. +\edef\lilyponddefsELC{\the\endlinechar}% +\endlinechar -1\relax +% the next three macros are taken from LaTeX +\long\gdef\lilypondfirst#1#2{#1} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% set up dimensions -\parindent=0pt -\newdimen\smallspace -\newdimen\interlinedist -\newdimen\stemthickness -\newcount\n -\newdimen\staffheight -\newdimen\notewidth -\newdimen\noteheight -\newdimen\staffrulethickness -\newdimen\interstaffrule -\newdimen\dist +\long\gdef\lilypondsecond#1#2{#2} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% set fonts and primary dimensions -% ugh -\def\musixtwentydefs{ - \twentyfonts - \musixcalc +\gdef\lilypondifundefined#1{ + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\lilypondfirst + \else + \expandafter\lilypondsecond + \fi } -\def\cmrtwenty{ - \font\meterfont=cmbx15 - \font\italicfont=cmti10 - \font\musicmathfont=cmsy10 - \font\normaltextfont=cmr10 %\textfont is a primitive - \font\smalltextfont=cmr8 - \font\boldfont=cmbx10 - \font\textmusic=cmmi12 -} -\def\cmrsixteen{ - \font\smalltextfont=cmr6 - \font\normaltextfont=cmr8 %\textfont is a primitive - \font\meterfont=cmbx12 - \font\italicfont=cmti8 - \font\textmusic=cmmi10 - \font\boldfont=cmbx8 -} -\def\cmreleven{ - \font\smalltextfont=cmr5 - \font\normaltextfont=cmr6 - \font\meterfont=cmbx8 - \font\italicfont=cmti6 - \font\textmusic=cmmi8 - \font\boldfont=cmbx6 +\gdef\lilypondstart{ + \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} + } + { + % provide a proper LaTeX preamble (for A4 paper format) + \def\x{ + \endgroup + \def\lilyponddocument{} + \documentclass[a4paper]{article} + \nofiles + \pagestyle{empty} + % \begin is defined as \outer in texinfo, thus we use \csname + \csname begin\endcsname{document} + % center staves horizontally on page + \ifdim\lilypondpaperlinewidth\lilypondpaperunit > 0pt + \hsize\lilypondpaperlinewidth\lilypondpaperunit + % we abuse \scoreshift temporarily + \scoreshift \paperwidth + \advance\scoreshift -\the\hsize + \scoreshift 0.5\scoreshift + \advance\scoreshift -1in + \oddsidemargin \scoreshift + \evensidemargin \scoreshift + \fi + \parindent 0pt + } + } + + \x + + \lilypondifundefined{mustmakelilypondtitle} + {} + {\makelilypondtitle} + + \lilypondifundefined{mustmakelilypondpiecetitle} + {} + {\makelilypondpiecetitle} } -\def\cmrthirteen{ - \font\smalltextfont=cmr6 - \font\normaltextfont=cmr7 - \font\meterfont=cmbx9 - \font\italicfont=cmti7 - \font\textmusic=cmmi9 - \font\boldfont=cmbx7 -} -\def\musixsixteendefs{ - \sixteenfonts - \musixcalc -} -\def\musixtwentysixdefs{ - \twentysixfonts - \musixcalc -} -\def\musixthirteendefs{ - \thirteenfonts - \musixcalc +\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 } -\def\musixelevendefs{ - \elevendefs - \musixcalc -} - -\def\textsharp{\raise.4ex\hbox{\textmusic\char"5D}} -\def\textnatural{\raise.4ex\hbox{\textmusic\char"5C}} -\def\textflat{\raise.2ex\hbox{\textmusic\char"5B}} - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% do derivative calcs - -% this has to be synced with the font definition -\def\musixcalc{ - \staffheight=\mudelapaperbarsize pt - \interlinedist=\staffheight - \divide\interlinedist by 4 - \notewidth=\mudelapapernotewidth pt - - \smallspace=.3\interlinedist - \interstaffrule=\staffheight - \divide\interstaffrule by 4 - \staffrulethickness=\mudelapaperrulethickness pt - \stemthickness=\staffrulethickness +% this is an inversed \loop ... \repeat macro +\def\lilypondloop#1\lilypondrepeat{ + \def\lilypondbody{#1} + \lilyponditerate } -% stacked numbers; may be overruled in fetdefs -\def\generalmeter#1#2{\vbox to 0pt{\vss\hbox{\meterfont - #1}\nointerlineskip - \hbox{\meterfont #2}\vss}} - -% stacked horizontal lines - -\input dyndefs -\input fetdefs - -%\input taupindefs -%\input eglerdefs - - -\def\emptybar{} - -\def\defaultthinbar{\thinbar{\staffheight}} -\def\defaultthickbar{\thickbar{\staffheight}} -%? 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\defaultthickbar\kern\smallspace\defaultthickbar\kern2\smallspace\repeatcolon}} - -%compatibility -\def\repeatbar{\repeatstopbar} -\def\startrepeat{\repeatstartbar} -\def\repeatbarstartrepeat{\repeatstopstart} - -\def\vruler#1{{% - \def\wid{\dimen0}% - \def\inc{\dimen1}% - \wid=#1pt - \inc=\wid - \divide\inc by #1 - \divide\wid by 2 - \here=-\wid - \loop\ifdim\here<\wid\advance\here by\inc - \hbox to0pt{\vbox to0pt{\vss\hrule width2pt height 0.05pt\kern\here}\hss}% - \repeat% -}} -\def\hruler#1#2{\hbox{% - \def\wid{\dimen0}% - \def\here{\dimen3}% - \wid=#1pt - \divide\wid by 2 - \here=-\wid - \loop\ifdim\here<\wid\advance\here by #2 - \hbox to0pt{\kern\here\vrule width0.05pt height 1pt depth 1pt\hss}% - \repeat% -}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% parametric symbols -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def\doublebar#1{\hbox{\thinbar{#1}\hskip\smallspace\thinbar{#1}}} -\def\thinbar#1{\dimen0=#1% - \vrule height .5\dimen0 depth .5\dimen0 width 1.6\staffrulethickness} % TODO parametric. -\def\thickbar#1{\dimen0=#1% - \vrule height .5\dimen0 depth .5\dimen0 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\stem#1#2{\hbox{\kern -.5\stemthickness - \vrule width\stemthickness height#2 depth-#1}} +\def\lilyponditerate{ + % \if ... + \lilypondbody + \let\lilypondnext \relax + \else + \let\lilypondnext \lilyponditerate + \fi + \lilypondnext +} -\def\placebox#1#2#3{% - \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}% +% the following macro is executed only once +\gdef\lilypondspecial{ + \special{header=music-drawing-routines.ps} + \gdef\lilypondspecial{} } +% the feta characters +\input feta20 -\def\rulesym#1#2{\dimen0=#1% - \vrule height .5\dimen0 depth .5\dimen0 width #2} -\def\settext#1{\normaltextfont #1} -\def\setitalic#1{\italicfont #1} -\def\setbold#1{\boldfont #1} -\def\setdynamic#1{\dynfont #1} -\def\setfinger#1{\fingerfont #1} +\global\font\fetasixteen = feta16 +\gdef\fetafont{\fetasixteen} +\gdef\fetachar#1{\hbox{\fetasixteen#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 +\gdef\botalign#1{ + \vbox to 0pt{\vss #1} +} +\gdef\leftalign#1{ + \hbox to 0pt{#1\hss} } +\gdef\lyitem#1#2#3{ + \botalign{ + \hbox{\raise #1\outputscale + \leftalign{\kern #2\outputscale #3}} + } +} -\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\errormark{{\bf E!}} -\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\lybox#1#2#3{ + \hbox to #1\outputscale { + \lower\scoreshift \vbox to #2\outputscale { + \hbox{#3} + \vss + } + \hss + } +} +\gdef\lyvrule#1#2#3#4{ + \kern #1\outputscale + \vrule width #2\outputscale depth #3\outputscale height #4\outputscale +} -% debugging stuff: -% \vbox to 0pt{\vskip .5cm \hruler{48}{3pt}\vss} +% Attempt to keep lilypiecetitle together with the piece: +% +% TODO: figure this out. +\gdef\myfilbreak{}%\par\vfil\penalty200\vfilneg} + +\lilypondifundefined{lilypondpaperinterscorelinefill} + {\gdef\lilypondpaperinterscorelinefill{0}} + {\gdef\lilypondpaperinterscorelinefill{1}} + +%% Allow overriding of interscoreline, eg for lilypond --preview +\lilypondifundefined{interscoreline} +{\gdef\interscoreline{ + \vskip \lilypondpaperinterscoreline \lilypondpaperunit + plus \lilypondpaperinterscorelinefill fill +}}{} + +% Are we using PDFTeX? If so, use pdf definitions. +% MiKTeX checks \pdfoutput the wrong way, thus we use \csname. +\lilypondifundefined{lilypondpostscript} + { + \lilypondifundefined{pdfoutput} + {\input lily-ps-defs } + { + \pdfoutput = 1 + \input lily-pdf-defs % + } + } + {} + +\newdimen\outputscale +\newdimen\scoreshift + +% Restore newline functionality (disabled to avoid \par). +\endlinechar \lilyponddefsELC +\endinput + +% EOF