Estou trabalhando em meu Liederbuch-Package novamente e desenvolvi um sistema de metadados para usar metadados em cabeçalhos e rodapés.
Atualmente uso ::
como separador de lista, mas não tenho certeza se não existe uma opção melhor. ,
e ;
são impossíveis porque aparecem em metadados (ou seja artist = Monty Burns, the evil-doer; Smithers
:).
Atualmente, costumo usar &
ou |
em vez de ::
.
A questão principal é: esse problema já foi resolvido em algum lugar? Se sim, como é feito lá. Se não, violei alguma regra de estilo?
ou seja
\begin{Lied}
[title = Als noch Arkadiens gold'ne Tage ::
lithographer = lilypond ::
artist = Test: Test]
{nt}{5}
\includegraphics[width=\linewidth,page=1]{CVLB5-AlsNochArkadiensGoldeneTage}
\notentext{\nspace*{11}Als \ns noch \ns Ar \ns* ka \ns* \ns di \ns* ens \ns gold \ns* ne \nspace{15}}
\end{Lied}
Posso usar esses valores no cabeçalho ou rodapé:
\LBHead{\textbf{\print{title}} \\ \print{artist} \hfill \print{lithographer}\par}
Responder1
Você pode usar ::
como separador com expl3
, mas precisa de alguns truques. Supondo que estamos abaixo de ExplSyntaxOn
, você pode fazer
\tl_const:Nx \c_maestroglanz_doublecolon_tl { \tl_to_str:n {::} }
e quando você precisar dividir a entrada nos dois pontos duplos, você pode dizer algo como
\cs_generate_variant:Nn \seq_set_split:Nnn { NV } % needed just once
\seq_set_split:NVn \l_maestroglanz_whatever_seq \c_maestroglanz_doublecolon_tl { #1 }
onde #1
representa o argumento para dividir.
Isso ocorre porque sob \ExplSyntaxOn
os dois pontos há uma letra, mas ao salvá-la, \tl_to_str:n
a transformamos novamente em um “outro caractere”, como está no documento.
No entanto, isso não funcionará se você precisar passar a entrada para \keys_set:nn
, porque espera vírgulas como delimitadores.
Neste caso, provavelmente é melhor substituir vírgulas \comma{}
e dois pontos duplos por vírgula.
Prova de conceito.
\keys_define:nn { maestroglanz/lied }
{
title .tl_set:N = \l_maestroglanz_lied_title_tl,
lithographer .tl_set:N = \l_maestroglanz_lied_lithographer_tl,
artist .tl_set:N = \l_maestroglanz_lied_artist_tl,
}
\NewDocumentEnvironment{Lied}{O{}mm}
{
\tl_set:Nn \l_maestroglanz_lied_options_tl
\tl_replace_all:Nnn \l_maestroglanz_lied_options_tl { , } { \comma{} }
\tl_replace_all:NVn \l_maestroglanz_lied_options_tl \c_maestroglanz_doublecolon_tl { , }
\keys_set:nV { maestroglanz/lied } \l_maestroglanz_lied_options_tl
% other commands for the begin part
}
{
% commands for the end part
}
% the needed variants
\cs_generate_variant:Nn \tl_replace_all:Nnn { NV }
\cs_generate_variant:Nn \keys_set:nn { nV }