
Я используюПесниПакет latex. В настоящее время я определяю диаграммы ладов гитары для аккорда для каждой песни, но я хотел бы определить их во внешнем файле, чтобы включить их в каждую песню (чтобы не повторяться).
Как я могу это сделать?
Диаграммы и команда \gtab объясняются здесь: http://songs.sourceforge.net/songsdoc/songs.html#sec6
но я не смог найти никакой полезной информации.
решение1
Я понимаю, что вы хотите создать «базу данных» диаграмм вкладок.
Вы можете создать базу данных с двумя столбцами: первый для названий аккордов, а второй для описания табулатуры (они станут первым и вторым аргументами команды \gtab
).
\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}
Этот код считывает вашу базу данных и сохраняет ваши записи в списке свойств. С помощью \fedetab{something}
команды вы печатаете табулатуру для something
аккорда. Если имя этого аккорда не существует, вы получаете сообщение.
Благодаря@egregза решение проблемы расширения, которая делала код бесполезным.