Paquete de canciones: ¿cómo almacenar definiciones de gtab en un archivo externo?

Paquete de canciones: ¿cómo almacenar definiciones de gtab en un archivo externo?

estoy usando elCancionespaquete de látex. Actualmente estoy definiendo los diagramas de trastes de guitarra de un acorde para cada canción, pero me gustaría definirlos en un archivo externo para incluirlos en cada canción (para no repetirme).

¿Cómo puedo hacer esto?

Los diagramas y el comando \gtab se explican aquí: http://songs.sourceforge.net/songsdoc/songs.html#sec6

pero no pude encontrar ninguna información útil.

Respuesta1

Entiendo que deseas crear una "base de datos" de diagramas de pestañas.

Podrías crear una base de datos con dos columnas, la primera para los nombres de los acordes y la segunda para la descripción de la pestaña (se convertirán en el primer y segundo argumento del \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 lee su base de datos y almacena sus entradas en una lista de propiedades. Con el \fedetab{something}comando imprimes la tablatura del somethingacorde. Si ese nombre de acorde no existe, recibirá un mensaje.

Gracias a@egregpor haber solucionado un problema de expansión que inutilizaba el código.

información relacionada