Listentrennzeichen, kein Komma, kein Semikolon

Listentrennzeichen, kein Komma, kein Semikolon

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 #1das aufzuteilende Argument steht.

Dies liegt daran, dass sich unter \ExplSyntaxOndem Doppelpunkt ein Buchstabe befindet, diesen aber durch Speichern \tl_to_str:nwieder 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 }

verwandte Informationen