
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 \gtab
comando).
\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 something
acorde. 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.