.meta:n
以前にキーを設定していた場合
\keys_define:nn { module } { key .meta:n = { … } }
\kerys_define:nn
新しいオプションを指定して呼び出すことで、キーを新しい値に簡単に置き換えることができますmeta
。
しかし、キーの現在のメタ オプションに追加したい場合はどうすればよいでしょうか?
ムウェ
この MWE では、\setstyle
と のメタ オプションをのメタ オプションに追加するようにstyle
置き換えたいです。どうすればいいでしょうか?\setstyle*
style
\documentclass{article}
\ExplSyntaxOn
\keys_define:nn { dcp }
{
keya .tl_set:N = \l__dcp_keya_tl ,
keyb .tl_set:N = \l__dcp_keyb_tl ,
keyc .tl_set:N = \l__dcp_keyc_tl ,
style .choice:
}
\NewDocumentCommand \setstyle { s m }
{
\bool_if:NTF #1
{
% how can I append to style?
}
{
% set style
\keys_define:nn { dcp } { style .meta:n = {#2} }
}
}
\NewDocumentCommand \showstyle { }
{
\keys_show:nn { dcp } { style }
}
\ExplSyntaxOff
\setstyle{keya=x,keyb=y}
\begin{document}
\showstyle
\setstyle{keya=x,keyb=yy}
\showstyle
\setstyle*{keyc=z}
\showstyle
\end{document}
答え1
公式のインターフェースがあるかどうかはわかりませんが、キーをclistとして保存すると機能するようです。\showstyle
私が定義した方法では\setstyle
、\keys_show:nn
単に表示するだけなので、コマンドを変更する必要がありました。
> code => \keys_set:nV {dcp}\l_dcp_style_clist
あまり役に立ちません。また、これがあなたの考えではなかったとしても、私は完全に理解します...
\documentclass{article}
\ExplSyntaxOn
\keys_define:nn { dcp }
{
keya .tl_set:N = \l__dcp_keya_tl ,
keyb .tl_set:N = \l__dcp_keyb_tl ,
keyc .tl_set:N = \l__dcp_keyc_tl ,
%style .choice:
}
\clist_new:N \l_dcp_style_clist
\NewDocumentCommand \setstyle { s m }
{
\bool_if:NTF #1
{
% append to style
\clist_put_right:Nn \l_dcp_style_clist { #2 }
}
{
% set style
\clist_set:Nn \l_dcp_style_clist { #2 }
}
\keys_define:nn { dcp }
{
style .code:n = \keys_set:nV { dcp } \l_dcp_style_clist
}
}
\NewDocumentCommand \showstyle { }
{
\keys_set:nn { dcp } { style }
\l__dcp_keya_tl
\l__dcp_keyb_tl
\l__dcp_keyc_tl
}
\ExplSyntaxOff
\begin{document}
\setstyle{keya=x,keyb=y}
\showstyle
\setstyle{keya=x,keyb=yy}
\showstyle
\setstyle*{keyc=z}
\showstyle
\end{document}
ベンチマークはしていませんが、プリコンパイルによって速度が向上する可能性があります。の定義を次のように変更します\setstyle
。
\cs_generate_variant:Nn \keys_precompile:nnN { nV }
\NewDocumentCommand \setstyle { s m }
{
\bool_if:NTF #1
{
% append to style
\clist_put_right:Nn \l_dcp_style_clist { #2 }
}
{
% set style
\clist_set:Nn \l_dcp_style_clist { #2 }
}
\keys_precompile:nVN { dcp } \l_dcp_style_clist \l_dcp_stylekeys_tl
\keys_define:nn { dcp }
{
style .code:n = \l_dcp_stylekeys_tl
}
}