Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: Cattleya am Montag, 5. Juli 2021, 16:50

Titel: lilypond-book mit LaTeX - lilypond-Funktionen Umgebungs-übergreifend definieren?
Beitrag von: Cattleya am Montag, 5. Juli 2021, 16:50
Ich denke darüber nach, Noten mit lilypond-book und pdfLaTeX zu setzen.

Wenn ich es richtig verstanden habe, bastelt das Programm lilypond-book anhand meiner Eingabedatei eine neue Datei mit der Endung.tex, die der (pdf)(La)TeX-compiler "zu fressen" kriegt.

In der .tex-Datei sind alle in meiner Eingabedatei vorkommenden lilypond-Umgebungen ersetzt durch entsprechende \includegraphics-Befehle bzw durch enrsprechende \input-Befehle, die kleine .tex-Dateien laden, die ihrerseits die \includegraphics-Befehle beinhalten.

Das Programm lilypond-book extrahiert also aus meiner Eingabedatei die Inhalte der \begin{lilypond}..\end{lilypond}-Umgebungen und ruft seinerseits für jede extrahierte Umgebung das Programm lilypond auf, um aus dem Inhalt dieser Umgebung eine Grafikdatei/.pdf-Datei mit dem entsprechenden Notensatz zu generieren. Außerdem bastelt es eine .tex-Datei mit dem Inhalt meiner Eingabedatei, die aber statt \begin{lilypond}..\end{lilypond}-Umgebungen Befehle enthält, um diese Grafikdateien/.pdf-Dateien einzubinden.

Meine Frage ist:

Wie kann ich in meiner Eingabedatei für das Programm lilypond-book Funktionen (diese #(define-music-function...-Dinger) definieren, die dann während der weiteren Ausführung diees Programmes bei jedem Aufruf des Programmes lilypond definiert werden und so gesehen in jeder folgenden \begin{lilypond}..\end{lilypond}-Umgebung dem Programm lilypond zur Verfügung stehen, ohne dass ich sie wieder und wieder in jede dieser folgenden Umgebungen hineinschreiben muss?

(Laut Dokumentation unter https://lilypond.org/doc/v2.22/Documentation/usage/latex.de.html (https://lilypond.org/doc/v2.22/Documentation/usage/latex.de.html) bringt der Befehl \preLilyPondExample dabei nichts, denn bei diesem Befehl handelt es sich um ein LaTeX-Makro, also etwas, was nichts mit dem Ausführen von lilypond zu tun hat, sondern mit dem Ausführen des (pdf)(La)TeX-compilers, was ja erst erfolgt wenn lilypond seinen Job bereits gemacht hat.)
Titel: Antw:lilypond-book mit LaTeX - lilypond-Funktionen Umgebungs-übergreifend definieren?
Beitrag von: Cattleya am Freitag, 9. Juli 2021, 16:26
Jetzt hatte ich die fulminante Erleuchtung, alle Funktionen, die ich immer wieder in lilypond-Umgebungen benutzen will, in eine eigene Datei mit Endung .ly auszulagern und diese Datei dann in jeder lilypond-Umgebung mittels des LilyPond-Befehls \include zu laden.


Das könte zB so aussehen:

Datei MeinZeug.ly mit ausgelagertem Zeug:

\version "2.18.2"
MeinZeug_WieHineinSoHeraus = #(define-music-function
                             (parser location ReinUndRaus)
                             (ly:music?)
#{
  #ReinUndRaus
#})


Datei test.lytex, die von LilyPond-book gelesen wird, um Bilddateien mit Notensatz und eine Datei test.tex für den (pdf)LaTeX-compiler zu erzeugen:

\documentclass{article}

\begin{document}

\noindent Der Quelltext

\begin{verbatim}
\begin{lilypond}
% =============================================
\include "./MeinZeug.ly"
% LilyPond-code, in dem ich alle in MeinZeug.ly
% definierten Funktionen benutzen kann:
% =============================================
\language "deutsch"
\MeinZeug_WieHineinSoHeraus {%
  \relative c'' {
    c4 a8 d,2
  }
}
\end{lilypond}
\end{verbatim}

\noindent ergibt dies:

\begin{lilypond}
% =============================================
\include "./MeinZeug.ly"
% LilyPond-code, in dem ich alle in MeinZeug.ly
% definierten Funktionen benutzen kann:
% =============================================
\language "deutsch"
\MeinZeug_WieHineinSoHeraus {%
  \relative c'' {
    c4 a8 d,2
  }
}
\end{lilypond}

\noindent Der Quelltext

\begin{verbatim}
\begin{lilypond}
% =============================================
\include "./MeinZeug.ly"
% LilyPond-code, in dem ich alle in MeinZeug.ly
% definierten Funktionen benutzen kann:
% =============================================
\language "deutsch"
\MeinZeug_WieHineinSoHeraus {%
  \relative c'' {
    d4 h8 e,2
  }
}
\end{lilypond}
\end{verbatim}

\noindent ergibt dies:

\begin{lilypond}
% =============================================
\include "./MeinZeug.ly"
% LilyPond-code, in dem ich alle in MeinZeug.ly
% definierten Funktionen benutzen kann:
% =============================================
\language "deutsch"
\MeinZeug_WieHineinSoHeraus {%
  \relative c'' {
    d4 h8 e,2
  }
}
\end{lilypond}

\end{document}


Hier das Ergebnis, das man erhält wenn man die von LilyPond-book aus der Datei test.lytex erzeugte Datei test.tex mit pdfLaTeX zur Datei test.pdf compiliert:

(https://i.stack.imgur.com/mljHE.png)

Hat jemand eine Idee, wie ich jetzt noch die .ly-Datei und die .lytex-Datei in einer einzigen Datei vereinigen könnte ohne für die Erzeugung der .pdf-Datei mehr Zwischenschritte zu brauchen?
Titel: Antw:lilypond-book mit LaTeX - lilypond-Funktionen Umgebungs-übergreifend definieren?
Beitrag von: C_E am Samstag, 18. September 2021, 21:05
ähh, also, ich bin jetzt ziemlich spät dran, aber Hallo Cattleya!

falls es noch aktuell ist, kennst du luaLatex? Damit habe ich schon mal gearbeitet. Das ist ein LaTex-Package, dass das ganze basteln für dich übernimmt. Eine Alternative zu Lilypond-book. Für mich war es angenehm, weil ich nicht mit der Kommandozeile arbeite (n kann), ich habe die beiden Möglichkeiten nie wirklich verglichen.

Ich kann deinen Arbeitsweg nur bedingt nachvollziehen, verstehe aber nicht richtig, warum du alles in einer Datei haben willst, anstatt mehrere zu benutzen. Vielleicht habe ich das Problem aber auch nicht verstanden.

Liebe Grüße,
Caspar