30. Mai 2021

Integration von LilyPond in LaTeX

LilyPond ist für sehr guten Notensatz bekannt, LaTeX für ebenso guten Text- und Formelsatz. Wer mithilfe von OpenSource-Tools druckreife musikwissenschaftliche Aufsätze, Analysen oder Lehrmaterialien herstellen will, hat sich sicher schon einmal den Kopf darüber zerbrochen ob man nicht beides kombinieren könnte. Hier wird erklärt, wie das geht.

von Winfried Hyronimus
None
Inhaltsverzeichnis

In die­sem Bei­trag möch­te ich die Mög­lich­keit vor­stel­len, den No­ten­satz von Li­ly­pond na­tiv in La­TeX-Do­ku­men­te zu in­te­grie­ren. Wer bei­de Sys­te­me be­reits ein­setzt, weiß um de­ren Vor­zü­ge und Not­wen­dig­kei­ten, so­dass ei­ne aus­führ­li­che Be­spre­chung die­ser hier nicht er­fol­gen soll.

Die­ser Bei­trag be­rück­sich­tigt so­wohl Win­dows- als auch Li­nux-Nut­zer.

Vor­aus­set­zun­gen

Ein wich­ti­ger Hin­weis: Die be­nö­tig­te Funk­ti­on, lilypond-book, ist nach Li­ly­pond-Ver­si­on 2.20 nicht als .exe mit­ge­lie­fert. Win­dows-Nut­zer soll­ten vor­erst ent­we­der bei Ver­si­on 2.20 – die durch­aus sta­bil ist – blei­ben, oder lilypond-book mit dem zu­sätz­li­chen Be­fehl python ak­ti­vie­ren.

Funk­ti­ons­wei­se

Pro­jekt­an­la­ge

Ein mi­ni­ma­les Bei­spiel lässt sich mit zwei Da­tei­en rea­li­sie­ren:

  1. ei­ne Li­ly­pond-Da­tei, En­dung .ly, in die der Li­ly­Pond Co­de ge­schrie­ben wird
  2. ei­ne La­TeX-Da­tei, En­dung .lytex – nicht .tex! – in die der La­TeX-Co­de ge­schrie­ben wird. Die in 1.) be­zeich­ne­te .ly-Da­tei wird mit­tels Mar­kup: \lilypondfile{} in die­se .lytex-Da­tei ein­ge­bun­den.

Es emp­fiehlt sich, für je­des Pro­jekt (La­TeX-Do­ku­ment mit Li­ly­Pond-In­te­gra­ti­on) einen ei­ge­nen Ord­ner an­zu­le­gen.

Kom­pi­la­ti­on

Sind bei­de Da­tei­en ein­satz­be­reit, er­folgt die Kom­pi­la­ti­on in zwei Schrit­ten.

Der ers­te Schritt er­folgt durch die Über­ga­be der .ly­tex-Da­tei an die lilypond-book-Op­ti­on des Li­ly­Pond-Com­pi­lers. Die­ser er­zeugt nun fol­gen­de neue Da­tei­en:

  • aus den .ly-Da­tei­en ent­ste­hen No­ten­satz-Gra­fi­ken, pro .ly-Da­tei ei­ne EPS- oder PDF-Da­tei
  • aus der .lytex-Da­tei ent­steht ei­ne gleich­na­mi­ge .tex-Da­tei, die den La­TeX-Co­de un­ver­än­dert bei­be­hält, je­doch an­statt des Über­ga­be­be­fehls \lilypondfile{} für die .ly-Da­tei­en nun die In­te­gra­ti­on der aus den .ly-Da­tei­en er­zeug­ten No­ten­satz-Gra­fi­ken.

Der zwei­te Schritt ist die Kom­pi­la­ti­on der er­zeug­ten .tex-Da­tei in ei­ne PDF-Da­tei, die un­se­re end­gül­ti­ge Aus­ga­be­da­tei dar­stellt. Dies er­folgt, wie üb­lich durch Auf­ruf des pd­fla­tex-Com­pi­lers.

Hin­wei­se zur Ver­wen­dung von lilypond-book fin­den sich in der Do­ku­men­ta­ti­on.

Hin­wei­se

Al­le Be­ar­bei­tun­gen fin­den aus­schließ­lich in der .ly-Da­tei und der .ly­tex-Da­tei statt. Die er­zeug­te .tex-Da­tei ist ein Zwi­schen­pro­dukt. Än­de­run­gen an die­ser wür­den bei der Wie­der­ho­lung des ers­ten Kom­pi­la­ti­ons­schritts von .lytex + .ly nach .tex über­schrie­ben.

Bei der Kom­pi­la­ti­on ent­ste­hen vie­le tem­po­rä­re Da­tei­en, die je­doch spä­ter nicht mehr be­nö­tigt wer­den. Grund­sätz­lich stö­ren sie nicht, kön­nen je­doch nach vie­len Kom­pi­la­ti­ons­vor­gän­gen Un­ord­nung im Ver­zeich­nis be­wir­ken. Hilf­reich ist da­her, die­se re­gel­mä­ßig oder au­to­ma­ti­siert zu lö­schen.

Kon­fi­gu­ra­ti­on

Set­zen der PATH-Va­ria­ble

Da­mit lilypond-book di­rekt auf­ge­ru­fen wer­den kann, muss der In­stal­la­ti­ons­pfad zur .exe / Bi­na­ry-Da­tei in der Sys­tem­va­ria­ble PATH hin­ter­legt wer­den. Un­ter Win­dows lässt sich die­se durch An­zei­ge der „Er­wei­ter­ten Sys­te­mein­stel­lun­gen“ → „Um­ge­bungs­va­ria­blen“ set­zen. Ein neu­er Ein­trag mit dem ent­spre­chen­den Pfad wird an­ge­legt, aus­se­hen soll­te dies nach dem Ab­spei­chern et­wa so:

Ob der ge­setz­te Wert rich­tig über­nom­men ist, kann durch Ein­ga­be des Be­fehls li­ly­pond-book in der Ein­ga­be­auf­for­de­rung über­prüft wer­den. Un­ter Li­nux soll­ten die Li­ly­pond-Bi­na­ri­es bei der In­stal­la­ti­on be­reits im Ver­zeich­nis /usr/bin ge­spei­chert wer­den; ist dem nicht so, kann man durch Be­ar­bei­ten der Da­tei .bashrc (im Nut­zer­ver­zeich­nis) den ent­spre­chen­den In­stal­la­ti­ons­pfad hin­ter­le­gen:

ex­port PATH="$PATH:/Li­ly­pond-Ver­zeich­nis"

Ein­rich­ten ei­nes Be­fehls in TeX­Stu­dio

Grund­sätz­lich ist ei­ne Kom­pi­la­ti­on von .lytex-Da­tei­en nach dem Set­zen der PATH-Va­ria­ble mit Auf­ruf zwei­er Kon­so­len­be­feh­le mög­lich, im ein­fachs­ten Fall:

~$ lilypond-book beispielprojekt.lytex
~$ pdflatex beispielprojekt.tex

Um je­doch bei­de Kom­pi­la­ti­ons­schrit­te ef­fi­zi­ent und leicht zu­gäng­lich zu ma­chen, emp­fiehlt es sich, die­se in ein Mar­kup bzw. einen sog. Nut­zer­be­fehl ei­nes Edi­tors wie TeX­Stu­dio zu in­te­grie­ren.

Um in TeX­Stu­dio das Kom­pi­lie­ren mit lilypond-book zu er­mög­li­chen, öff­nen wir die Kon­fi­gu­ra­ti­on und dann de­ren Un­ter­punkt „Er­zeu­gen“. Hier kann ein Nut­zer­be­fehl an­ge­legt wer­den, den wir „Li­ly­pond:Li­ly­pond“ nen­nen.

Un­ter Win­dows muss die­ser wie folgt de­fi­niert wer­den:

cmd /c lilypond-book --format=latex --pdf ?me

Die An­wei­sung cmd öff­net die be­kann­te Win­dows-Ein­ga­be­auf­for­de­rung, mit /c wird der Be­fehl für lilypond-book über­ge­ben. Die Pa­ra­me­ter kön­nen frei an­ge­passt wer­den. Durch die TeX­Stu­dio-spe­zi­fi­sche Va­ria­ble ?me wird der Da­teiname, so­wie die pas­sen­de En­dung über­ge­ben. Ei­ne Über­sicht der Va­ria­blen, die TeX­Stu­dio ver­wen­det, fin­det sich un­ter „Be­feh­le“.

Un­ter Li­nux muss der Auf­ruf fol­gen­der­ma­ßen lau­ten:

lilypond-book %.lytex --latex-program=pdflatex --pdf

(Wir über­ge­ben in bei­den Fäl­len noch die Pa­ra­me­ter für La­TeX, und die Aus­ga­be als PDF.) Es emp­fiehlt sich, für den an­ge­leg­ten Be­nut­zer­be­fehl ei­ne Tas­ten­kom­bi­na­ti­on fest­zu­le­gen. Für mich hat sich die Kom­bi­na­ti­on ALT + SHIFT + F1 für die Li­ly­pond-Kom­pi­la­ti­on und STRG + F1 für die La­TeX-Kom­pi­la­ti­on be­währt.

Bei­spiel­pro­jekt

Wir le­gen zu Test­zwe­cken einen Ord­ner für das Bei­spiel­pro­jekt an. Dort spei­chern wir, wie er­läu­tert, zwei (sehr ein­fach ge­hal­te­ne) Da­tei­en:

Li­ly­pond-Da­tei

\version "2.20.0"
\language "deutsch"

\relative c' {
  c d e f g a h c
}

Un­se­re Li­ly­pond-Da­tei mit dem Na­men no­ten­bei­spiel.ly ent­hält ne­ben dem Ver­si­ons­hin­weis und der An­ga­be zur Ein­ga­be­spra­che – die­se wird für die Schreib­wei­se h statt b be­nö­tigt – ei­ne ein­fa­che C-Dur-Ton­lei­ter.

Zur Kon­trol­le kann man die Da­tei kom­pi­lie­ren, das Re­sul­tat ist we­nig über­ra­schend:

La­TeX-Da­tei

Un­se­re La­TeX-Da­tei – beispielprojekt.lytex – sieht fol­gen­der­ma­ßen aus:

\documentclass[a4paper,10pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lipsum}

\title{Lorem Ipsum}
\author{Winfried Hyronimus}

\begin{document}
    
    \maketitle
    
    \lipsum[1]
    
    \begin{figure}[h]
    \lilypondfile{notenbeispiel.ly}        
    \end{figure}    
    
    \lipsum[2]
\end{document}

Der in­ter­essan­te Teil ist der Be­fehl \lilypondfile{}, mit dem das No­ten­bei­spiel über­ge­ben wird. Das lip­sum-Pa­ket er­mög­licht die Aus­ga­be von Dum­my-Text, in den wir un­ser No­ten­bei­spiel dar­stel­lungs­hal­ber ein­bin­den. Es emp­fiehlt sich, No­ten­bei­spie­le eben­so wie an­de­re Dar­stel­lun­gen mit­tels figure-Um­ge­bung ein­zu­ar­bei­ten.

Kom­pi­la­ti­on

Wir kom­pi­lie­ren zu­nächst per CLI-Auf­ruf.

Schritt 1:

lilypond-book --format=latex --pdf beispielprojekt.lytex

Im Ver­zeich­nis soll­te sich – ne­ben ge­ne­ri­er­ten tem­po­rä­ren Da­tei­en – nun die bei­spiel­pro­jekt.tex be­fin­den.

Schritt 2:

pdflatex beispielprojekt.tex

Das Pro­jekt soll­te oh­ne Feh­ler­mel­dun­gen kom­pi­lie­ren:

Die glei­che Pro­ze­dur soll­te sich pro­blem­los im Edi­tor mit ent­spre­chen­dem Nut­zer­be­fehl – der le­dig­lich den Kon­so­len­be­fehl im Hin­ter­grund auf­ruft – durch­füh­ren las­sen. Der Com­pi­ler be­nö­tigt in je­dem Fall die Pa­ra­me­ter --for­mat=la­tex und --pdf, sonst taucht in der Ziel-PDF nur ei­ne lee­re Flä­che auf.

Für einen ef­fi­zi­en­ten Work­flow emp­fiehlt es sich, zu­erst das No­ten­bei­spiel ganz aus­zu­ar­bei­ten und dann die In­te­gra­ti­on in La­TeX vor­zu­neh­men. lilypond-book passt da­bei das No­ten­bei­spiel der Um­ge­bung an. Ein be­reits kom­pi­lier­tes und seit­dem nicht ge­än­der­tes No­ten­bei­spiel wird au­to­ma­tisch nicht neu kom­pi­liert, der Zwi­schen­schritt von .lytex nach .tex muss je­doch bei­be­hal­ten wer­den.

Ver­bes­se­run­gen am Bei­spiel­pro­jekt

Un­ser Pro­jekt sieht noch nicht sehr wis­sen­schaft­lich aus – was für den ers­ten Ver­such auch gar nicht stört. Wir fü­gen ei­ni­ge neue Mar­kups ein:

\documentclass[a4paper,10pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage{crimson}
\usepackage[font=scriptsize]{caption}
\captionsetup{justification=raggedright,singlelinecheck=false}

\title{Lorem Ipsum}
\author{Winfried Hyronimus}

\begin{document}
    
    \maketitle
    
    \lipsum[1]
    
    \begin{figure}[h]
    \lilypondfile[staffsize=14]{notenbeispiel.ly}    
    \caption{C-Dur-Tonleiter}    
    \end{figure}    
    
    \noindent\lipsum[2]
\end{document}

Der Be­fehl \lilypondfile er­hält den Pa­ra­me­ter staffsize=14. Hier­mit wird die Grö­ße der No­ten­zei­len ein­ge­stellt. Die \cap­ti­on in der figure-Um­ge­bung fügt einen Be­schrei­bungs­text hin­zu. Im Kopf­be­reich des .lytex-Do­ku­ments ak­ti­vie­ren wir wei­ter­hin das Pa­ket crimson, ein de­zen­ter und sach­li­cher Schrift­satz – Ge­schmacks­sa­che na­tür­lich. Mit dem Pa­ket cap­ti­on und dem dar­auf­fol­gen­den Mar­kup \captionsetup wird die Be­schrei­bung ei­ner figure nach links ver­setzt.

In der .ly-Da­tei neh­men wir fol­gen­de Än­de­run­gen vor:

\version "2.20.0"
\language "deutsch"

\paper  {
myStaffSize = #14
#(define fonts
    (make-pango-font-tree "Crimson"
                          "Nimbus Sans"
                          "Luxi Mono"
                           (/ myStaffSize 20)))
}

lyr = {
 \lyricmode { do re mi fa so la si do }
}

mus = \relative c' { \cadenzaOn
  c d e f g a h c
}

\score {
  <<
    \new Voice = "one" {
      \mus
    }
    \new Lyrics \lyricsto "one" {
      \lyr
    }
  >>
}

Im No­ten­bei­spiel soll ein ein­fa­cher Text ein­ge­blen­det wer­den, der na­tür­lich die glei­che Schrift­art ver­wen­den soll wie das rest­li­che La­TeX-Do­ku­ment. Dies geht mit der De­kla­ra­ti­on der \paper-Um­ge­bung, wo­bei die ers­te my­staff­si­ze-An­wei­sung mit der im .lytex-Do­ku­ment an­ge­ge­be­nen staffsize des \lilypondfile{}-Mar­kups über­ein­stim­men muss. Der Re­set auf den Wert 20 am En­de der \paper-Um­ge­bung ist not­wen­dig – warum ist mir of­fen ge­stan­den nicht be­kannt.

Der No­ten­text so­wie der Ge­sangs­text wer­den nun in die Va­ria­blen mus und lyr ab­ge­spei­chert. Die bei­den Va­ria­blen wer­den in der \sco­re-Um­ge­bung wie­der auf­ge­ru­fen. Nä­he­res zum Set­zen von Tex­ten zur Li­ly­pond-No­ta­ti­on fin­det sich in der Do­ku­men­ta­ti­on. Der Be­fehl \ca­den­zaOn vor un­se­rer Ton­lei­ter setzt das Me­trum aus. Der No­ten­text kann völ­lig frei ge­setzt wer­den, was für man­che Dar­stel­lun­gen, spe­zi­ell für Ana­ly­se­zwe­cke sehr vor­teil­haft ist.

Wich­tig: Um OTF-Schrift­ar­ten in Li­ly­Pond zu in­te­grie­ren, müs­sen die­se – wenn sie nicht au­to­ma­tisch er­kannt wer­den – in das Ver­zeich­nis Lilypond-Installationsverzeichnis\usr\share\lilypond\current\fonts\otf, un­ter Li­nux /usr/share/lilypond/current/fonts ko­piert wer­den.

Das Er­geb­nis kann sich durch­aus se­hen las­sen:

So sim­pel der In­halt sein mag: Die Ele­ganz der Prä­sen­ta­ti­on be­sticht.

Schluss­be­mer­kung

Wer ein­mal da­mit an­ge­fan­gen hat, wird schnell be­grei­fen dass die ho­he Qua­li­tät des Schrift­bil­des und Sat­zes den meis­ten an­de­ren Lö­sun­gen über­le­gen ist, und da­her auch den u. U. hö­he­ren Ei­nar­bei­tungs­auf­wand lohnt. Die In­te­gra­ti­on des Li­ly­pond-No­ten­sat­zes in La­TeX er­mög­licht ei­ne Dar­stel­lung, die pro­fes­sio­nel­len An­sprü­chen ge­nügt. Wer je­doch zum ers­ten Mal ei­ne Haus­ar­beit da­mit ab­fas­sen möch­te, soll­te aus­rei­chen­den Vor­lauf ein­pla­nen – die Lern­kur­ve ver­trägt sich nicht mit je­der Ab­ga­be­frist. Un­ter Li­nux scheint die Be­die­nung we­ni­ger kom­pli­ziert, wenn­gleich bei­de Satz­sys­te­me platt­for­mu­n­ab­hän­gig funk­tio­nie­ren.

Wei­ter­füh­ren­des

  • Für die Dar­stel­lung von Har­mo­nie­fol­gen emp­fiehlt sich der For­melsatz von La­TeX, so­wie das Pa­ket cancel. Hier­mit lässt sich durch­ge­stri­che­ner Text für ver­kürz­te Ak­kor­de set­zen.
  • Mit lilypond-book lässt sich Li­ly­pond-No­ten­satz auch di­rekt im Fließ­text ein­bin­den.
  • Ge­eig­ne­te Schrift­sät­ze spe­zi­fisch für mu­sik­wis­sen­schaft­li­che Tex­te sind ne­ben Crim­son (crimson) Tex­Gy­re­Pa­gel­la (pxfonts), Uto­pia (fourier) so­wie auch Car­do (fbb).
Schlagworte:

Kommentare