노래 패키지: gtab 정의를 외부 파일에 저장하는 방법은 무엇입니까?

노래 패키지: gtab 정의를 외부 파일에 저장하는 방법은 무엇입니까?

나는노래라텍스 패키지. 현재 각 노래에 대한 코드의 기타 프렛 다이어그램을 정의하고 있지만 각 노래에 포함되도록 외부 파일에 정의하고 싶습니다(반복하지 않기 위해).

어떻게 해야 하나요?

다이어그램과 \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코드를 쓸모없게 만든 확장 문제를 해결해 주셔서 감사합니다.

관련 정보