X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tex%2Flilyponddefs.tex;h=a64e8e01efb210a42106a4d9dcc8704fdaec04b8;hb=3cf04887c55db04f8d90ca9f4b3226e84da3a630;hp=bc30d5403992e4508e9902a36b5b8c49ebc06ebd;hpb=5c2afd9ecbe4d91998a325f6323f05ea4d658d96;p=lilypond.git diff --git a/tex/lilyponddefs.tex b/tex/lilyponddefs.tex index bc30d54039..a64e8e01ef 100644 --- a/tex/lilyponddefs.tex +++ b/tex/lilyponddefs.tex @@ -1,88 +1,184 @@ +%%% 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 +%% The overall structure of a file created by LilyPond is as follows: %% -%% let's not make par before endinput - -% TeXbook ex 7.7 -\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax} - -% The feta characters -\input feta20.tex - -\font\fetasixteen=feta16 -\def\fetafont{\fetasixteen} -\def\fetachar#1{\hbox{\fetasixteen#1}} - -% If we must make titles, do so, before we're Skipped. -\ifx\mustmakelilypondtitle\undefined\else\makelilypondtitle\fi -\ifx\mustmakelilypondpiecetitle\undefined\else\makelilypondpiecetitle\fi -% -% 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 - -\def\botalign#1{\vbox to 0pt{\vss #1}} -\def\leftalign#1{\hbox to 0pt{#1\hss}} - -% Attempt to keep lilypiecetitle together with the piece: -\def\myfilbreak{\par\vfil\penalty200\vfilneg} - -% stacked horizontal lines -\ifundefined{lilypondpaperinterscoreline} - \def\lilypondpaperinterscoreline{16} -\fi -\ifundefined{lilypondpaperinterscorelinefill} - \def\lilypondpaperinterscorelinefill{0} -\fi - -\def\interscoreline{\vskip\lilypondpaperinterscoreline pt plus % - \lilypondpaperinterscorelinefill fill} - -\def\placebox#1#2#3{% - \botalign{\hbox{\raise #1\leftalign{\kern #2{}#3}}}}% - -% Are we using PDFTeX? If so, use pdf definitions. -% MiKTeX checks \pdfoutput the wrong way, makes our -% check more complicated. -\ifx\pdfoutput\undefined - \input lily-ps-defs -\else - \ifx\pdfoutput\relax - \input lily-ps-defs +%% +%% \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 - \pdfoutput=1 - \input lily-pdf-defs + \expandafter\lilypondsecond \fi -\fi +} + +\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}} + { + %% FIXME: a4 + %% provide a proper LaTeX preamble (for A4 paper format) + \def\x{ + \endgroup + \def\lilyponddocument{} + \documentclass[a4paper]{article} + %% safe-mode + \nofiles + \usepackage{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} -\def\EndLilyPondOutput{% - \vskip 0pt plus \lilypondpaperinterscorelinefill00 fill\csname bye\endcsname +%% Inversed \loop ... \repeat macro +\def\lilypondloop#1\lilypondrepeat{ + \def\lilypondbody{#1} + \lilyponditerate } -\def\postheader{} - -% need to do some stuff to turn pagenumbering off -% they seriously mess up your fragments. - -\ifx\csname nolilyfooter\endcsname\relax - \message{[footer defined]}% - \csname lilyfooter\texsuffix\endcsname% -\else - \message{[footer empty]} - \csname% - nolilyfooter\texsuffix\endcsname -\fi -\newdimen\outputscale + +\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