2
1

Ich möchte gerne ein Songbook erstellen. Dazu habe ich mir entsprechende Bereiche definiert für \begin{chorus}, \begin{verse} oder \begin{intro}. Akkorde füge ich per \makebox{} direkt im Text ein, bzw. habe mir den Befehl \c{AKKORD} dafür erstellt.

Nun habe ich in einem sehr fortgeschrittenen und komplizierten TeX-Songbook gesehen, dass dort per Batch-Datei das Songbook kompiliert und zusammengestellt wurde. Dabei konnte man auswählen, ob die Akkorde gar nicht angezeigt werden sollen, oder nur in der ersten Strophe/dem ersten Refrain, oder immer. Die Markierungen im TeX-File waren, glaube ich, einfach " ^ "-Zeichen, um die Position des Akkords zu signalisieren.

Leider habe ich nur sehr grundlegende Kenntnisse von LaTeX; das ist mein erstes größeres Projekt, und ich wüsste gar nicht, wonach ich bezüglich dieser Herausforderung googlen sollte. Darum bin ich für jeden Tipp dankbar! :-)

Ich hatte das bei golatex.de schon nachgefragt und wurde von dort hier her verwiesen.

Ich versuche mal ein Minimalbeispiel (wie angefragt) zu posten:


Open in writeLaTeX
\documentclass{article}
\usepackage[showframe]{geometry}

\renewcommand\c[1]{
    \makebox[0pt]{\begin{tabular}[b]{l@{}@{}}#1\\\mbox{}\end{tabular}}}

\newcommand\capo[1]{
    \addvspace{15pt}[Capo] #1\newline}

\newenvironment{song}[1]
    {\section{#1}}
    {}

\renewenvironment{verse}
    {\par\noindent\addvspace{15pt}[Chorus]\newline}
    {\par\addvspace{\baselineskip}}

\newenvironment{intro}
{\par\noindent\addvspace{15pt}[Intro]\newline}
{\par\addvspace{15pt}}

\begin{document}

\tableofcontents

\begin{song}{Coldplay - Viva La Vida}

\capo{1}

\begin{intro}
C D G Em (x2)
\end{intro}

\begin{verse}
\c{(Em)}I used to \c{C}rule the \c{D}world\newline
Seas would \c{G}rise when I gave the \c{Em}word\newline
Now in the morning I \c{C}sleep al\c{D}one\newline
Sweep the \c{G}streets I used to \c{Em}own
\end{verse}

\begin{verse}
\c{(Em)}I used to \c{C}roll the \c{D}dice\newline
Feel the \c{G}fear in my enemy's \c{Em}eyes\newline
Listen as the \c{C}crowd would \c{D}sing:\newline
"Now the \c{G}old king is dead! \c{Em}Long live the king!"
\end{verse}

\begin{verse}
^One minute I ^held the ^key\newline
Next the ^walls were ^closed on me\newline
And I discovered that my ^castles ^stand\newline
Upon ^pillars of salt and ^pillars of sand
\end{verse}

\end{song}

\end{document}

gefragt 11 Jul '14, 17:52

Momro's gravatar image

Momro
23115
Akzeptiert-Rate: 0%

bearbeitet 12 Jul '14, 15:25

cgnieder's gravatar image

cgnieder
22.1k253463

@Ijon Tichy hihi, ich dachte nicht, dass du es gleich kompilieren willst. Sorry! Ich hab's geändert und es sollte so funktionieren.

Ich habe noch zwei Strophen angefügt, um besser zu illustrieren, was ich will: Ich würde LaTeX gerne sagen können, dass zum Beispiel alle Akkorde aus der zweiten und dritten Strophe ausgeblendet werden. Oder ich möchte gerne sagen können, dass die " ^ " in Strophe 3 durch die vorher definierten Akkorde ersetzt werden sollen. Da bräuchte man keine selbständige Zählung - aber wie man's sonst realisiert, das weiß ich nicht :-)

(11 Jul '14, 18:50) Momro

@Ijon Tichy Bei mir kompiliert es mit einigen kleinen Fehlermeldungen, die aber keine dramatischen Auswirkungen haben (ich nutze TeXnicCenter).

Bei newenvironment{verse} muss ein renew... hin (oben korrigiert).

Ich weiß nicht, warum das sonst nicht funktionieren sollte :-(

(11 Jul '14, 19:21) Momro

Du kannst Deine Songs gleich ins Dokument mit aufnehmen: http://texwelt.de/wissen/fragen/7890/ :()

(01 Aug '14, 18:32) cis

@cis Ich bevorzuge ja ein ausgedrucktes Dokument (Liederbuch), das ich zusammen mit meiner Gitarre mitnehmen kann. Da sind eingebundene Medien dann eher nutzlos :)

(01 Aug '14, 18:40) cgnieder

Touche - wohl aber als PDF in einem Smartphone / Tablett (also ich hab sowas nicht, aber viele schon).

(01 Aug '14, 18:42) cis

Ich habe mal Dein Beispiel genommen, alles rausgeworfen, was nicht funktioniert und dafür ein paar neue Befehle definiert, mit denen man die Abfolge der Akkorde festlegen bzw. einfach den nächsten Akkord in der Abfolge setzen lassen kann:

Open in writeLaTeX
\documentclass{article}
\usepackage[showframe]{geometry}

\renewcommand\c[1]{
    \makebox[0pt]{\begin{tabular}[b]{l@{}@{}}#1\\\mbox{}\end{tabular}}}

\newenvironment{song}[1]
    {\section{#1}\raggedright\activatenextchord}
    {}

\renewenvironment{verse}
    {\flushleft[Chorus]\newline}
    {\endflushleft}

\makeatletter
\newcommand*{\defchords}[2][verse]{%
  \@namedef{chords@#1}{#2}%
}
\newcommand*{\active@chords}{}
\newcommand*{\usechords}[1][verse]{%
  \edef\active@chords{\@nameuse{chords@#1}}%
}
\newcommand*{\nextchord}{%
  \def\reserved@a##1##2\@nil{%
    \if\relax\detokenize{##1}\relax
      \c{??}%
    \else
      \c{##1}%
    \fi
    \def\active@chords{##2}%
  }%
  \expandafter\reserved@a\active@chords\@nil
}
\newcommand*{\activatenextchord}{}% sozusagen den Befehl reservieren
{% bevor er nachfolgend wirklich definiert wird.
  \catcode`\^\active
  \gdef\activatenextchord{\catcode`\^\active
    \let^\nextchord%
  }
}
\makeatother

\begin{document}

\tableofcontents

\begin{song}{Coldplay - Viva La Vida}

\defchords{{(Em)}{C}{D}{G}{Em}{C}{D}{G}{Em}}
\usechords
\begin{verse}
^I used to ^rule the ^world\\
Seas would ^rise when I gave the ^word\\
Now in the morning I ^sleep al^one\\
Sweep the ^streets I used to ^own
\end{verse}

\begin{verse}
^I used to ^roll the ^dice\\
Feel the ^fear in my enemy's ^eyes\\
Listen as the ^crowd would ^sing:\\
"Now the ^old king is dead! ^Long live the king!"
\end{verse}

\begin{verse}
^One minute I ^held the ^key\\
Next the ^walls were ^closed on me\\
And I discovered that my ^castles ^stand\\
Upon ^pillars of salt and ^pillars of sand
\end{verse}

\end{song}

\end{document}

Über das optionale Argument von \defchords und \usechords kann man auch mehrere unterschiedliche Akkordfolgen definieren und diese zu den aktuell aktiven Akkorden machen.

^ ist innerhalb von song (und nur da) wunschgemäß als eine Art Abkürzung von \nextchord definiert.

Um auf die Akkorde ganz zu verzichten, müsste man theoretisch einfach \renewcommand*\nextchord{} einfügen. Ausprobiert habe ich das aber nicht.

Permanenter link

beantwortet 11 Jul '14, 19:32

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 11 Jul '14, 19:53

Wow, super! Vielen herzlichen Dank :-) Das ist ja schonmal der erste Schritt. Ich glaub, was ich sonst noch brauche, formuliere ich später in einem zweiten Beitrag. Erstmal muss ich mir das hier genau anschauen, ausprobieren und lernen, was die Befehle alle bedeuten ;-)

(11 Jul '14, 19:42) Momro

Es gibt für Liederbücher beispielsweise das Paket songbook. Bei dem Paket kann man per Option auch wählen, ob man nur die Worte oder Worte und Akkorde haben will. In der Anleitung gibt es auch ein ausführliches Beispiel. Leider hat das zwei kleine Fehler. Hier eine korrigierte Fassung:

Open in writeLaTeX
\documentclass[12pt]{book}
\usepackage[chordbk]{songbook}                %% Words & Chords edition.

%%
% C.C.L.I. license number definition; for copyright licensing info.
%%
\newcommand{\CCLInumber}{\#999999}
\newcommand{\CCLIed}{(CCLI \CCLInumber)}
\newcommand{\NotCCLIed}{}
\newcommand{\PGranted}{}
\newcommand{\PPending}{(Permission Pending)}

%%
% Turn on index and table of contents.
%%
\makeTitleIndex         %% Title and First Line Index.
\makeTitleContents      %% Table of Contents.
\makeKeyIndex           %% Song Key Index.
\makeArtistIndex        %% Index by Artist.

\begin{document}
%%
% Songbook begins.
%%
\begin{song}{What A Mighty God We Serve}{C}
  {\SBPubDom}
  {\SBUnknownTag}
  {Isaiah 9:6}
  {\NotCCLIed}

  \SBRef{Give Thanks}{Hosanna! Music Tape HM-7}
  \SBRef{Hosanna! Music Book~I}{\#93}

  \begin{SBOpGroup}
    \Ch{C}{What} a mighty God we serve,

    What a mighty God we \Ch{G7}{serve},

    \Ch{C}{An}gels bow before Him,

    \Ch{C}{Hea}ven and earth adore Him,

    \Ch{C}{What} a mighty \Ch{G7}{God} we \Ch{C}{serve!}\Ch{[}{}\Ch{F}{}
      \Ch{C}{}\Ch{]}{}
  \end{SBOpGroup}

  \begin{SBVerse}
    O \Ch{C}{Zion,} O \Ch{F}{Zion,} that \Ch{G7}{bring}est good \Ch{C}{tid}ings,

    Get thee \Ch{F}{up} into the \Ch{G7}{High} Moun\Ch{C}{tains}

    Je\Ch{C}{ru}salem, Je\Ch{F}{ru}salem, that \Ch{G7}{bring}est good \Ch{C}{tid}ings

    Lift up thy \Ch{F}{voice} with \Ch{G7}{all} thy \Ch{C}{strength}

    Lift it \Ch{F}{up,} be not afraid;

    Lift it \Ch{C}{up,} be not afraid

    Say \Ch{Am}{unto} the \Ch{C}{ci}ties of \Ch{G7}{Judah,}

    ``Behold your \Ch{C}{God,}\Ch{C7}{} Behold your \Ch{F}{God,}

    Be\Ch{C}{hold} \Ch{G7}{your} \Ch{C}{God!''}
  \end{SBVerse}

\CBPageBrk
  \begin{SBExtraKeys}{%
    \STitle{What A Mighty God We Serve}{D}

    \begin{SBOpGroup}
      \Ch{D}{What} a mighty God we serve,

      What a mighty God we \Ch{A7}{serve},

      \Ch{D}{An}gels bow before Him,

      \Ch{D}{Hea}ven and earth adore Him,

      \Ch{D}{What} a mighty \Ch{A7}{God} we \Ch{D}{serve!}\Ch{[}{}\Ch{G}{}
        \Ch{D}{}\Ch{]}{}
    \end{SBOpGroup}

    \begin{SBVerse}
      O \Ch{D}{Zion,} O \Ch{G}{Zion,} that \Ch{A7}{bring}est good \Ch{D}{tid}ings,

      Get thee \Ch{G}{up} to into the \Ch{A7}{High} Moun\Ch{D}{tains}

      Je\Ch{D}{ru}salem, Je\Ch{G}{ru}salem, that \Ch{A7}{bring}est good
        \Ch{D}{tid}ings

      Lift up thy \Ch{G}{voice} with \Ch{A7}{all} thy \Ch{D}{strength}

      Lift it \Ch{G}{up} be not afraid,

      Lift it \Ch{D}{up} be not afraid

      Say \Ch{Bm}{unto} the \Ch{D}{ci}ties of \Ch{A7}{Judah,}

      ``Behold your \Ch{D}{God,}\Ch{D7}{} Behold your \Ch{G}{God,}

      Be\Ch{D}{hold} \Ch{A7}{your} \Ch{D}{God!''}
    \end{SBVerse}
  }\end{SBExtraKeys}
\end{song}
\end{document}

Die erste Seite des Ergebnisses sieht dann so aus:

Beispielseite

Mit Option wordbk statt chordbk bekommt man dagegen eine Fassung, die nur den Text aber keine Akkorde enthält. Eine Erkennung für wiederkehrende Akkorde bietet dieses Paket allerdings nicht.

Es gibt eine Reihe weiterer Pakete für diesen Zweck. Selbst verwendet habe ich bisher aber nur dieses. Daher weiß ich auch nicht, ob eines der anderen Pakete, eine Erkennung für wiederkehrende Akkorde besitzt.

Permanenter link

beantwortet 11 Jul '14, 18:12

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 11 Jul '14, 18:21

Du hast höchstwahrscheinlich ein Beispiel der Verwendung des songs-Pakets gesehen. Das ist mir gerade aufgefallen, als ich aus Neugierde die Handbücher von songs und songbook überflogen habe...

Die grundlegende Benutzung scheint recht einfach zu sein. Der Trick mit der ^-Syntax läuft offenbar so: in einer vorigen Strophe setzt man am Beginn \memorize. In den folgenden Stropen kann man dann an den entsprechenden Stellen ^ einfügen. Grundsätzlich werden Akkorde zwischen \beginverse ... \endverse (und anderen ähnlichen Strukturen) mit \[<Akkord>] eingegeben und lassen sich beispielsweise mit \transpose{<zahl>} auch um <zahl> Halbtöne transponieren.

Mit der Paket-Option lyric lassen sich alle Akkorde unterdrücken, die (voreingestellte) Option chorded ist das Gegenteil davon. Das Verhalten lässt sich auch im Dokument mit \chordsoff und \chordson jederzeit umschalten.

Open in writeLaTeX
\documentclass{article}
\usepackage{songs}

\begin{document}

\begin{songs}{}
\beginsong{Viva La Vida}[by=Coldplay]

\capo{I}

\beginverse\noversenumbers
  \nolyrics Intro: \[C] \[D] \[G] \[Em] ($\times2$)
\endverse
\setcounter{versenum}{1}

\beginverse\memorize
  \[Em]I used to \[C]rule the \[D]world
  Seas would \[G]rise when I gave the \[Em]word
  Now in the morning I \[C]sleep al\[D]one
  Sweep the \[G]streets I used to \[Em]own
\endverse

\beginverse
  ^I used to ^roll the ^dice
  Feel the ^fear in my enemy's ^eyes
  Listen as the ^crowd would ^sing:
  ``Now the ^old king is dead! ^Long live the king!''
\endverse

\beginverse
  ^One minute I ^held the ^key
  Next the ^walls were ^closed on me
  And I discovered that my ^castles ^stand
  Upon ^pillars of salt and ^pillars of sand
\endverse
\endsong
\end{songs}

\end{document}

alt text

Permanenter link

beantwortet 12 Jul '14, 14:11

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 14 Jul '14, 12:09

@Clemens Wow, diese Lösung ist super! Ich werde mir das näher anschauen und damit rumprobieren. Vielen Dank!

(14 Jul '14, 10:40) Momro

@Ijon hab ich auch gedacht... :)

(14 Jul '14, 12:10) cgnieder

Die Frage hier hat mich dazu inspiriert, mein schon lange geplantes Paket leadsheets mal wieder ernsthaft zu verfolgen. In den letzten Wochen hat es einige Fortschritte gemacht. Ich warte noch auf Feedback (gerne auch von hier Interessierten!) zur Funktionalität (funktioniert was nicht wie beschrieben?, Bugs?, fehlende Features?) und werde es dann auf CTAN stellen. Update 7.2.2015: das Paket ist inzwischen auf CTAN und sowohl in TeX Live als auch MiKTeX verfügbar.

Das Paket hat die hier gefragte Funktionalität der automatischen Akkord-Einfügung. Das folgende Beispiel demonstriert außerdem noch ein paar andere Features:

Open in Online-Editor
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{leadsheets}

% Ein Template, das `\section' für die Überschriften verwendet und neben dem
% Namen des Songs auch die Band notiert, falls angegeben.
\definesongtitletemplate{custom}{%
  \ifsongmeasuring{}{
    \section{\songproperty{title}\ifsongproperty{band}{ (von \songproperty{band})}{}}
  }%
}
% Ein paar Voreinstellungen, unter anderem Verwendung des neuen Templates:
\setleadsheets{
  title-template=custom ,
  info/format = \itshape
}
\setchordnames{
  format = \sffamily
}

\begin{document}

\begin{song}[
    remember-chords = true ,
    verse/numbered = true ,
    transpose-capo = true % funktioniert nur mit gesetzer `key'-Eigenschaft!
                          % Damit werden dann die Akkordnamen geschrieben, die
                          % man spielen muss, damit die klingende Notation
                          % immer noch stimmt. Also: `Emi' statt `Fmi' mit
                          % `capo = 1' als Songeigenschaft.
  ]{
    title = Viva La Vida,
    band = Coldplay,
    capo = 1 ,
    key  = Fmi
  }
 \begin{info}
  \capo
\end{info}
\begin{intro}
  Intro: _{Db} _{Eb} _{Ab} _{Fmi} ($\times2$)
\end{intro}
\begin{verse}
  ^{Fmi}I used to ^{Db}rule the ^{Eb}world \\
  Seas would ^{Ab}rise when I gave the ^{Fmi}word \\
  Now in the morning I ^{Db}sleep al^{Eb}one \\
  Sweep the ^{Ab}streets I used to ^{Fmi}own
\end{verse}
\begin{verse}
  ^I used to ^roll the ^dice \\
  Feel the ^fear in my enemy's ^eyes \\
  Listen as the ^crowd would ^sing: \\
  ``Now the ^old king is dead! ^Long live the king!''
\end{verse}
\begin{verse}
  ^One minute I ^held the ^key \\
  Next the ^walls were ^closed on me \\
  And I discovered that my ^castles ^stand \\
  Upon ^pillars of salt and ^pillars of sand
\end{verse}
\end{song}

\end{document}

alt text

Permanenter link

beantwortet 01 Aug '14, 13:12

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 07 Feb '15, 18:00

@Ijon gute Idee! Das setze ich mal auf die TODO-Liste. Danke.

(01 Aug '14, 15:29) cgnieder

@Ijon Ich hab Deinen Vorschlag umgesetzt. Jetzt warte ich noch auf ein bisschen Feedback und dann kanns an die Veröffentlichung gehen.

(16 Aug '14, 19:17) cgnieder
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×5
×2
×1

gestellte Frage: 11 Jul '14, 17:52

Frage wurde gesehen: 16,103 Mal

zuletzt geändert: 07 Feb '15, 18:00