Ich arbeite wieder an meinem Liederbuch-Paket und habe ein Metadatensystem zur Verwendung von Metadaten in Kopf- und Fußzeilen entwickelt.
Ich verwende derzeit ::
als Listentrennzeichen, bin mir aber nicht sicher, ob es nicht eine bessere Option gibt. ,
und ;
sind unmöglich, weil sie in Metadaten erscheinen (z. B.: artist = Monty Burns, the evil-doer; Smithers
).
Ich neige derzeit dazu, &
oder |
anstelle von zu verwenden ::
.
Die Hauptfrage ist: Wird dieses Problem bereits irgendwo behandelt? Wenn ja, wie wird es dort gemacht? Wenn nein, verstoße ich gegen irgendwelche Stilregeln?
dh
\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}
Diese Werte kann ich in der Kopf- oder Fußzeile verwenden:
\LBHead{\textbf{\print{title}} \\ \print{artist} \hfill \print{lithographer}\par}
Antwort1
Sie können ::
als Trennzeichen mit verwenden expl3
, aber Sie benötigen ein paar Tricks. Angenommen, wir befinden uns unter ExplSyntaxOn
, können Sie Folgendes tun:
\tl_const:Nx \c_maestroglanz_doublecolon_tl { \tl_to_str:n {::} }
und wenn Sie die Eingabe am Doppelpunkt aufteilen müssen, können Sie etwas sagen wie
\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 }
wobei #1
das aufzuteilende Argument steht.
Dies liegt daran, dass sich unter \ExplSyntaxOn
dem Doppelpunkt ein Buchstabe befindet, diesen aber durch Speichern \tl_to_str:n
wieder in ein „anderes Zeichen“ umwandeln, so wie er im Dokument steht.
Dies funktioniert jedoch nicht, wenn Sie die Eingabe an übergeben müssen \keys_set:nn
, da hier Kommas als Trennzeichen erwartet werden.
In diesem Fall ist es wahrscheinlich besser, Kommas \comma{}
und den Doppelpunkt durch ein Komma zu ersetzen.
Konzeptioneller Beweiß.
\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 }