Songpaket: Wie speichere ich Gtab-Definitionen in einer externen Datei?

Songpaket: Wie speichere ich Gtab-Definitionen in einer externen Datei?

Ich verwende dieLiederLatex-Paket. Ich definiere derzeit die Gitarrenbunddiagramme eines Akkords für jedes Lied, aber ich möchte sie in einer externen Datei definieren, um sie in jedes Lied einzubinden (um mich nicht zu wiederholen).

Wie kann ich das machen?

Die Diagramme und der Befehl \gtab werden hier erklärt: http://songs.sourceforge.net/songsdoc/songs.html#sec6

aber ich konnte keine nützlichen Informationen finden.

Antwort1

Ich verstehe, dass Sie eine „Datenbank“ mit Registerkartendiagrammen erstellen möchten.

Sie könnten eine Datenbank mit zwei Spalten erstellen, die erste für die Namen der Akkorde und die zweite für die Tab-Beschreibung (dies werden die ersten und zweiten Argumente des \gtabBefehls).

\begin{filecontents*}{tabs.txt}
A,X02220:001230
C#sus4,4:XX3341
B&,X13331
\end{filecontents*}

\documentclass{book}
\usepackage{xparse}
\usepackage{songs}
\ExplSyntaxOn
\ior_new:N \g_fedelibre_get_tabs_ior
\prop_new:N \g_fedelibre_tabs_prop

\cs_new_protected:Npn \fedelibre_add_to_prop:w #1,#2!!
 {
  \prop_gput:Nnn \g_fedelibre_tabs_prop {#1} {#2}
 }
\ior_open:Nn \g_fedelibre_get_tabs_ior {tabs.txt} 
\ior_str_map_inline:Nn \g_fedelibre_get_tabs_ior
 {
  \fedelibre_add_to_prop:w #1!!
 } 
\DeclareDocumentCommand{ \fedetab }{ v }
 {
  \prop_get:NnNTF \g_fedelibre_tabs_prop {#1} \l_tmpa_tl
   {
    \fedelibre_gtab:nV {#1} \l_tmpa_tl
   }
   {
    \msg_term:n {Maybe~ you~ have~ mispelled~ your~ tab!}
   }
 }
\cs_set_eq:NN \fedelibre_gtab:nn \gtab
\cs_generate_variant:Nn \fedelibre_gtab:nn { nV }
\ExplSyntaxOff
\begin{document}
\begin{songs}{}
\beginsong{Song}
\beginverse
\fedetab{A}  \fedetab{C#sus4} \fedetab{B&}
 \[C]  \[D]  \[C] 
\endverse
\endsong
\end{songs}
\end{document}

Dieser Code liest Deine Datenbank aus und speichert Deine Einträge in einer Eigenschaftenliste. Mit dem \fedetab{something}Befehl druckst Du die Registerkarte für den somethingAkkord aus. Wenn dieser Akkordname nicht existiert, erhältst Du eine Meldung.

Dank an@egregfür die Lösung eines Erweiterungsproblems, das den Code unbrauchbar machte.

verwandte Informationen