разделитель списка, без запятой, без точки с запятой

разделитель списка, без запятой, без точки с запятой

Я снова работаю над своим пакетом Liederbuch и разработал систему метаданных для использования метаданных в верхних и нижних колонтитулах.

В настоящее время я использую ::в качестве разделителя списков, но не уверен, что нет лучшего варианта. ,и ;невозможны, поскольку они появляются в метаданных (например: artist = Monty Burns, the evil-doer; Smithers).

В настоящее время я предпочитаю использовать &или |вместо ::.

Главный вопрос: эта проблема уже где-то решена? Если да, то как там это делается. Если нет, то нарушаю ли я какие-то правила стиля?

то есть

\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}

Я могу использовать эти значения в верхнем или нижнем колонтитуле:

\LBHead{\textbf{\print{title}} \\ \print{artist} \hfill \print{lithographer}\par}

решение1

Вы можете использовать ::как разделитель с expl3, но вам нужно несколько трюков. Предполагая, что мы находимся под ExplSyntaxOn, вы можете сделать

\tl_const:Nx \c_maestroglanz_doublecolon_tl { \tl_to_str:n {::} }

и когда вам нужно разделить ввод по двойному двоеточию, вы можете сказать что-то вроде

\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 }

где #1обозначает аргумент о разделении.

Это происходит потому, что под \ExplSyntaxOnдвоеточием находится буква, но, сохраняя ее с помощью , \tl_to_str:nмы превращаем ее обратно в «другой символ», как в документе.

Однако это не сработает, если вам нужно передать входные данные в \keys_set:nn, поскольку в качестве разделителей здесь ожидаются запятые.

В этом случае, вероятно, лучше заменить запятые на \comma{}, а двойное двоеточие — на запятую.

Доказательство концепции.

\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 }

Связанный контент