列表分隔符,沒有逗號,沒有分號

列表分隔符,沒有逗號,沒有分號

我正在再次開發 Liederbuch-Package,並且開發了一個元資料系統來在頁首和頁尾中使用元資料。

我目前用作::清單分隔符,但我不確定是否沒有更好的選擇。,並且;是不可能的,因為它們出現在元資料中(即artist = Monty Burns, the evil-doer; Smithers:)。

我目前傾向於使用&or|代替::.

主要問題是:這個問題是否已經在任何地方解決?如果是的話,那裡是怎麼做的。如果不是,我是否違反了任何風格規則?

IE

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

相關內容