X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tex%2Flilyponddefs.tex;h=880545417ff9cef62406c58d6b3dbf1ef032a038;hb=0a84151a3709fcf51b4b77f0e7e991db1a47eafc;hp=3a67da91836d9eb87c9ba9d02d920e10954b2c7c;hpb=eb195c4f69ee8574c9e79574b028f183790b5bb0;p=lilypond.git diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index 3a67da9183..880545417f 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -1,70 +1,202 @@ -%% -%% 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 - -% need to do some stuff to turn pagenumbering off -\ifundefined{documentclass} - \input lilypond-plaintex -\else - \input lilypond-latex -\fi +% This file defines various macros to acommodate lilypond output. +% +% 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} -% -\def\botalign#1{\vbox to 0pt{\vss #1}} -\def\leftalign#1{\hbox to 0pt{#1\hss}} +\long\gdef\lilypondsecond#1#2{#2} -\input feta20.tex +\gdef\lilypondifundefined#1{ + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\lilypondfirst + \else + \expandafter\lilypondsecond + \fi +} -% Attempt to keep lilypiecetitle together with the piece: -\def\myfilbreak{\par\vfil\penalty200\vfilneg} - -% stacked horizontal lines -\def\interscoreline{\vskip 16pt\myfilbreak} -\def\placebox#1#2#3{% - \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}}% - -% Are we using PDFTeX? If so, use pdf definitions to translate -% \embeddedps commands to embedded PDF. -\ifx\pdfoutput\undefined - \input lily-ps-defs -\else - \pdfoutput=1 - \input lily-pdf-defs -\fi - -\def\EndLilyPondOutput{% - \csname bye\endcsname +\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} + \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} +} + +\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 +} + +% this is an 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 +} + +% the following macro is executed 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\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\postheader{} -% need to do some stuff to turn pagenumbering off -% they seriously mess up your fragments. +\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 +} + +% 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}} -\ifx\csname nolilyfooter\endcsname\relax - \message{[footer defined]}% - \csname lilyfooter\texsuffix\endcsname% -\else - \message{[footer empty]} - \csname% - nolilyfooter\texsuffix\endcsname -\fi +\gdef\interscoreline{ + \vskip \lilypondpaperinterscoreline \lilypondpaperunit + plus \lilypondpaperinterscorelinefill fill +} -% fix chord.cc::banter_str before removing these -\input fetdefs +% 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