ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Henning Hraban Ramm <hraban@fiee.net>
Subject: Re: LilyPond module for LilyPond 2.9.x
Date: Wed, 4 Oct 2006 02:18:07 +0200	[thread overview]
Message-ID: <0A36AB5D-B304-457F-84E5-4A4A103215A8@fiee.net> (raw)
In-Reply-To: <6faad9f00610031459u632f7ccaq48281b340750d0ce@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2770 bytes --]

Am 2006-10-03 um 23:59 schrieb Mojca Miklavec:

> I cannot test since lilypond is not working properly on my computer,
> but I get the proper numbers.
>
> Here's an excerpt from the log file (I changed lilypond to echo):
>
> systems         : begin file test1 at line 2
> <test1-lilypond-1.tmp>
> system(echo test1-lilypond-1.tmp)...executed.
>
> system(epstopdf test1-lilypond-1.eps)...executed.
>
>  (C:\Programi\MikTeX\tex\context\base\pdfr-ec.tex)
> figures         : figure test1-lilypond-1 can not be found
> color           : mpcmyk color space is supported
> color           : mpspot color space is supported
> color           : system rgb is local activated
> <test1-lilypond-2.tmp>
> system(echo test1-lilypond-2.tmp)...executed.
>
> system(epstopdf test1-lilypond-2.eps)...executed.

I just updated my whole installation, but it's still the same:

structure       : begin of sectionblock bodymatter
systems         : begin file c_weihgeist at line 32
(./c_weihgeist.tex
Titel           : - Kom|m| nun|,| weihnachtlicher Geis|t.|
<prd_winternacht-lilypond-1.tmp>
figures         : figure prd_winternacht-lilypond-1.pdf can not be found
<prd_winternacht-lilypond-2.tmp>
figures         : figure prd_winternacht-lilypond-2.pdf can not be found
)
systems         : end file c_weihgeist at line 32
systems         : begin file c_ansingen at line 33
(./c_ansingen.tex [3.1]
Titel           : - Winteransingen
<prd_winternacht-lilypond-3.tmp>
figures         : figure prd_winternacht-lilypond-3.pdf can not be found
)

...

TeXUtil | running texmfstart --ifchanged=prd_winternacht- 
lilypond-1.tmp --exec bin:lilypond -b eps -dno-gs-load-fonts - 
dinclude-eps-fonts prd_winternacht-lilypond-1.tmp
GNU LilyPond 2.9.18
Processing `prd_winternacht-lilypond-1.tmp'
Parsing...
Interpreting music... [8][13]
Preprocessing graphical objects...
Writing prd_winternacht-lilypond-1-systems.tex...
Writing prd_winternacht-lilypond-1-systems.texi...
Layout output to `prd_winternacht-lilypond-1-1.eps'...
Converting to `prd_winternacht-lilypond-1-1.pdf'...
Layout output to `prd_winternacht-lilypond-1.eps'...
Converting to `prd_winternacht-lilypond-1.pdf'...
TeXUtil | running texmfstart --ifchanged=prd_winternacht- 
lilypond-1.tmp --exec bin:lilypond -b eps -dno-gs-load-fonts - 
dinclude-eps-fonts prd_winternacht-lilypond-1.tmp
TeXUtil | running texmfstart --ifchanged=prd_winternacht- 
lilypond-1.tmp --exec bin:lilypond -b eps -dno-gs-load-fonts - 
dinclude-eps-fonts prd_winternacht-lilypond-1.tmp
...


My songbook has 24 songs at the moment, but the counter stays at 1  
for the lilypond run (works with the tmp, as you can see).


Greetlings from Lake Constance!
Hraban
---
http://www.fiee.net/texnique/
http://contextgarden.net
http://www.cacert.org (I'm an assurer)

[-- Attachment #2: t-lilypond.tex --]
[-- Type: application/octet-stream, Size: 8472 bytes --]

%D \module
%D	[		 file=t-lilypond,
%D			version=2006.10.03,
%D			 title=\CONTEXT\ User Modules,
%D		 subtitle=Lilypond Connections (Music Typesetting),
%D			author=Christopher Creutzig \& Henning Hraban Ramm,
%D				date=\currentdate,
%D		copyright=Christopher Creutzig]

%M \usemodule[lilypond]

%D This module serves to include LilyPond music directly in the
%D \CONTEXT\ source, just as \METAPOST\ code can be.
%D It should work from LilyPond version 2.8.
%D Before starting with the implementation, one or two examples are in order.
%D
%D \startbuffer[sample]
%D \startlilypond
%D % Telemann, TWV 40:11
%D \version "2.9.18"
%D 
%D \relative c' {
%D \set Staff.instrumentName = flute
%D \key fis \minor
%D \time 3/4
%D \partial 4
%D 
%D	 r8 fis'8 | fis4. cis8 a cis | fis, a cis fis a fis |
%D	 b, d fis b d b | eis,, gis cis eis gis b, |
%D	 a fis' gis, fis' cis eis | fis,4 r8
%D	 a' gis fis | e gis, a e' fis cis |
%D	 d fis, gis b e d | cis4 \trill r8
%D	 cis b a | b dis e gis cis, b |
%D	 a e' dis fis b, a | gis4 \trill r8
%D }
%D \stoplilypond
%D \stopbuffer
%D
%D The input
%D
%D \typebuffer[sample]
%D
%D is typeset as
%D
%D \getbuffer[sample]
%D
%D \type{\startlilypond} accepts options, as in\crlf
%D \type{\startlilypond[staffsize=24, linewidth=14cm, indent=5cm, time=no]}:
%D 
%D \nobreak
%D \startlilypond[staffsize=24,linewidth=14cm,indent=5cm,time=no]
%D \version "2.9.18"
%D \relative c' {
%D \set Staff.instrumentName = flute
%D \key fis \minor
%D \time 3/4
%D \partial 4
%D	 r8 fis'8 | fis4. cis8 a cis | fis, a cis fis a fis |
%D	 b, d fis b d b | eis,, gis cis eis gis b, |
%D	 a fis' gis, fis' cis eis | fis,4 r8
%D	 a' gis fis | e gis, a e' fis cis |
%D	 d fis, gis b e d | cis4 \trill r8
%D	 cis b a | b dis e gis cis, b |
%D	 a e' dis fis b, a | gis4 \trill r8
%D }
%D \stoplilypond
%D
%D It is also possible to mix text and music:
%D \lower 8.2pt\hbox{\lilypond[fragment=true,staffsize=16,time=no]{g'}} is a g.
%D
%D TODO: Complete list of options.
%D
%D \startlines
%D	staffsize=20,
%D	indent=0pt,
%D	time=yes,
%D	align=?, % default depends on fragment=...
%D	fragment=no,
%D	barnumbers=no,
%D \stoplines
%D
%D TODO: The \type{\lower} in the example above should not be necessary.
%D
%D TODO: Switches to turn off the clef etc.
%D
%D TODO: Proper support for multipage results.
%D
%D TODO: lilypond -> \CONTEXT.
%D
%D TODO: enable LilyPond variables (Scheme code)
%D
%D \page
%D Now for the implementation.	As usual, we use a prefix for buffers,
%D \type{\getparameters} etc.:

\unprotect
\def\??lily{lilypond-}

%D Define the text snippets to be placed around fragments.
%D Since lilypond uses similar syntax to \TeX, we must do some catcode fiddling.
\bgroup
\catcode`\/=\@@escape
/catcode`/\=/@@other
/catcode`/#=/@@other
/catcode`/<=/@@begingroup
/catcode`/>=/@@endgroup
/catcode`/{=/@@other
/catcode`/}=/@@other
/catcode`/%=/@@other
/gdef/lily!fragmentprefix<
/string^^J
/string^^J
{/string^^J
% ly snippet contents follows:/string^^J
>

/gdef/lily!fragmentsuffix</string^^J
% end ly snippet/string^^J
}/string^^J
>

/gdef/lily!prefix</string^^J
%#(set! toplevel-score-handler print-score-with-defaults)/string^^J
%#(set! toplevel-music-handler 
	(lambda (p m) 
	(if (not (eq? (ly:music-property m 'void) #t)) 
			(print-score-with-defaults 
			p (scorify-music m p)))))/string^^J
/string^^J
#(ly:set-option (quote no-point-and-click))/string^^J
/string^^J
#(define version-seen #t)/string^^J
%\version "2.9.18"/string^^J
/iflily!time/else
% switch off time signature/string^^J
\layout {
	ragged-last = ##t
	\context {
		\Score
		 timing = ##f
	}/string^^J
	\context {
		\Staff
		 \remove "Time_signature_engraver"
	}
}/string^^J
/fi
/iflily!barnumbers/else
% switch off bar numbers/string^^J
\layout {
	\context {
		\Score
		\remove "Bar_number_engraver"
	}
}/string^^J
/fi
\paper {/string^^J
	#(define dump-extents #t)/string^^J
	ragged-right = /iflily!align ##f/else ##t/fi/string^^J
	indent = /withoutpt/the/lily!indent\pt/string^^J
	line-width = /withoutpt/the/lily!linewidth\pt/string^^J
	vsize = /withoutpt/the/lily!vsize\pt/string^^J
	printpagenumber = ##f/string^^J
	oddFooterMarkup=##f/string^^J
	oddHeaderMarkup=##f/string^^J
	bookTitleMarkup = ##f/string^^J
	scoreTitleMarkup = ##f/string^^J
}/string^^J
>

/gdef/lily!hash<#>
/egroup

\newdimen\lily!linewidth
\newdimen\lily!vsize
\newdimen\lily!indent
\newif\iflily!align
\newif\iflily!time
\newif\iflily!barnumbers

\newcount\lily!figures

%D Again, as usual, there is a \type{\setuplilypond} command
%D that accepts the same parameters as \type{\lilypond} and
%D \type{\startlilypond} do in their optional argument:
\def\setuplilypond{\dosingleempty\dosetuplilypond}

\def\dosetuplilypond[#1]{%
	\getparameters[\??lily][#1]%
}

%D We set the following defaults:
\setuplilypond
	[staffsize=20,
	indent=0pt,
	time=\v!yes,
	align=?,% default depends on fragment=...
	fragment=\v!no,
	barnumbers=\v!no,
	]

%D \type{\startlilypond} is a multistage implementation, because
%D end-of-line characters must be treated specially in the
%D \type{\startlilypond}\textellipsis\type{\stoplilypond} range.
\def\startlilypond{\dosingleempty\dostartlilypond}

\def\dostartlilypond[#1]{%
	\bgroup
	\obeylines
	\dodostartlilypond[{#1}]%
}

\long\def\dodostartlilypond[#1]#2\stoplilypond{%
	\egroup% from \dostartlilypond
	\bgroup%
%D The default of the \type{linewidth} parameter is the local
%D \type{\hsize}.
	\setlocalhsize
	\getparameters[\??lily][linewidth=\the\localhsize,height=\the\textheight,#1]%
	\lily!linewidth\dimexpr\getvalue{\??lily linewidth}\relax
	\lily!vsize\dimexpr\getvalue{\??lily height}\relax
	\lily!indent\dimexpr\getvalue{\??lily indent}\relax
%D The default of \type{align} depends on whether we typeset a fragment:
	\@EAEAEA\doifelse\getvalue{\??lily align}{\v!yes}%
		\lily!aligntrue\lily!alignfalse
	\@EAEAEA\doif\getvalue{\??lily fragment}{\v!no}{%
		\@EAEAEA\doif\getvalue{\??lily align}?
			\lily!aligntrue
	}%
	\@EAEAEA\doifelse\getvalue{\??lily time}\v!yes
		\lily!timetrue\lily!timefalse
%D We are using a counter to keep the different lilypond pieces
%D separate.	This allows to typeset them only once, during the
%D first run.
%D
%D TODO: This won't work any longer once we pass the remaining
%D vertical space to lilypond.
	\global\advance\lily!figures\plusone
	\edef\lily!filename{\bufferprefix lilypond-\the\lily!figures}
	%\startmode[*\v!first]% 
	\def\obeyedlines{\string^^J}%
	\convertargument#2\to\ascii
	\expanded{%
	\setbuffer[lilypond-\the\lily!figures]%
	\lily!prefix
	\lily!hash(set-global-staff-size \getvalue{\??lily staffsize})\string^^J%
	\ifundefined{\??lily fragment}\else\lily!fragmentprefix\fi
	%% TODO: Option "packed"
	\ascii%
	\ifundefined{\??lily fragment}\else\lily!fragmentsuffix\fi
	}% expanded
	\endbuffer%
%D Generating a pdf directly always creates a whole page, so we generate eps first.
%D If \type{\ifeof18} creates an error for you, your pdfetex is too old.
%D just change it to \iftrue then.	(\type{\ifeof18} checks whether \type{\write18}
%D is disabled.)
	
	%\def\LP{echo LILYPOND \lily!filename.tmp}
	%\def\PDF{echo PStoPDF \lily!filename.eps}
	\def\LP{texmfstart --ifchanged=\lily!filename.tmp --exec bin:lilypond -b eps -dno-gs-load-fonts -dinclude-eps-fonts \lily!filename.tmp}
	\def\PDF{texmfstart --ifchanged=\lily!filename.eps pstopdf \lily!filename.eps}
	\ifeof18
		\installprogram{\LP}%
		\doif\jobsuffix{pdf}{%
			\installprogram{\PDF}%
		}%
	\else
		\executesystemcommand{\LP}%
		\doif\jobsuffix{pdf}{%
			\executesystemcommand{\PDF}%
		}%
	\fi
	%\stopmode% only first run
	\doifelse\jobsuffix{pdf}
		{\edef\lily!img{\lily!filename.pdf}}%
		{\edef\lily!img{\lily!filename.eps}}%
%D
%D TODO: Get the relevant dimension directly from lilypond,
%D to place the instrument name into the left margin for
%D short snippets as well.
%D If we are not in the middle of some text, we have to check
%D whether lilypond created an image that is wider than requested:
%D It places the instrument names in the left margin.
%D
	\ifvmode
		\getfiguredimensions[\lily!filename.pdf]%
		\leavevmode%
		\newdimen\FigWidth
		\FigWidth=\figurewidth
		\ifdim\FigWidth>\localhsize
			\!!dimena=\localhsize
			\advance\!!dimena by-\FigWidth
			\noindent\hskip\!!dimena
		\fi
	\fi
	\externalfigure[\lily!img]%
	\egroup%
}%

%D For short snippets, we define an inline alternative to
%D our start/stop pair:
\def\lilypond{\dosingleempty\dolilypond}

\def\dolilypond[#1]#2{\startlilypond[#1]#2\stoplilypond}

\protect
%D End of file

[-- Attachment #3: Type: text/plain, Size: 1 bytes --]



[-- Attachment #4: Type: text/plain, Size: 139 bytes --]

_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

  reply	other threads:[~2006-10-04  0:18 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-26 18:34 Henning Hraban Ramm
2006-09-26 20:12 ` Henning Hraban Ramm
2006-09-26 20:23   ` Hans Hagen
2006-09-26 20:52     ` Henning Hraban Ramm
2006-09-27  7:55       ` Hans Hagen
2006-09-27 20:26         ` Henning Hraban Ramm
2006-09-27 22:22           ` Henning Hraban Ramm
2006-10-03 21:37             ` Henning Hraban Ramm
2006-10-03 21:59               ` Mojca Miklavec
2006-10-04  0:18                 ` Henning Hraban Ramm [this message]
2006-09-26 21:41 ` Willi Egger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0A36AB5D-B304-457F-84E5-4A4A103215A8@fiee.net \
    --to=hraban@fiee.net \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).