从 l3prop 键展开列表

从 l3prop 键展开列表

我有一个键,它以逗号分隔的列表作为其值,其中的条目来自属性列表的键。我希望“默认”(未指定值)将键应用于属性列表的每个键。我不知道如何将属性键转换为可以传递给的扩展列表\clist_map_inline:nn。这是一个最小的非工作示例:

\documentclass{article}

\ExplSyntaxOn
\prop_new:N \g_mymodule_prop
\prop_set_from_keyval:Nn \g_mymodule_prop
  { A=1, B=2, C=3, D=4 }
\keys_define:nn { mymodule }
  { 
    print .code:n =
     {
       \clist_map_inline:nn { #1 }
         { \prop_item:Nn \g_mymodule_prop { ##1 } \par }
     },
    print .default:n = {  } % What to put here?
  }
\ExplSyntaxOff

\begin{document}

\SetKeys[mymodule]{print={A,C}}

\SetKeys[mymodule]{print}

\end{document}

就像是

print .default:n = { \prop_map_inline:Nn \g_mymodule_prop { ##1, } }

不起作用,因为\clist_map_inline:nn将其视为单项列表,并且当然没有具有该名称的属性键。我也尝试过使用onen变体,\clist_map_inline:nn\prop_map_inline:Nn不能扩展(我认为),所以这也不起作用。

有没有办法按照我的方法做到这一点?如果没有,是否有办法为不依赖于最初提供的密钥的“默认”版本提供完全独立的代码.code:n

答案1

在此处输入图片描述

我打算映射属性列表以创建一个 clist 来像在非默认情况下一样使用,但是由于您正在映射 prop 列表,因此您也可以直接使用值而不是收集键:

\documentclass{article}

\ExplSyntaxOn
\prop_new:N \g_mymodule_prop
\prop_set_from_keyval:Nn \g_mymodule_prop
  { A=1, B=2, C=3, D=4 }
\keys_define:nn { mymodule }
  { 
    print .code:n =
     {
%\showtokens{#1}
       \clist_if_empty:nTF { #1 }
         { \prop_map_inline:Nn \g_mymodule_prop {##2\par} }
         { \clist_map_inline:nn { #1 } {\prop_item:Nn \g_mymodule_prop { ##1 } \par }}
     },
   % print .default:n = {  } % What to put here?
  }

\ExplSyntaxOff

\begin{document}

\SetKeys[mymodule]{print={A,C}}

\bigskip

\SetKeys[mymodule]{print}
\end{document}

相关内容