.meta:n
이전에 다음을 사용 하여 키를 설정한 경우
\keys_define:nn { module } { key .meta:n = { … } }
\kerys_define:nn
그러면 새 옵션을 호출하여 키를 새 값으로 쉽게 바꿀 수 있습니다 meta
.
하지만 키에 대한 현재 메타 옵션에 추가하려면 어떻게 해야 합니까?
MWE
이 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
}
}