Pacote de músicas: como armazenar definições de gtab em um arquivo externo?

Pacote de músicas: como armazenar definições de gtab em um arquivo externo?

estou usando oMúsicaspacote de látex. Atualmente estou definindo os diagramas de trastes de guitarra de um acorde para cada música, mas gostaria de defini-los em um arquivo externo para incluí-los em cada música (para não me repetir).

Como posso fazer isso?

Os diagramas e o comando \gtab são explicados aqui: http://songs.sourceforge.net/songsdoc/songs.html#sec6

mas não consegui encontrar nenhuma informação útil.

Responder1

Entendo que você deseja criar um "banco de dados" de diagramas de abas.

Você poderia criar um banco de dados com duas colunas, a primeira para os nomes dos acordes e a segunda para a descrição da aba (elas se tornarão o primeiro e o segundo argumentos do \gtabcomando).

\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}

Este código lê seu banco de dados e armazena suas entradas em uma lista de propriedades. Com o \fedetab{something}comando você imprime a tablatura do somethingacorde. Se esse nome de acorde não existir, você receberá uma mensagem.

Graças a@egregpor ter resolvido um problema de expansão que inutilizou o código.

informação relacionada