l3keys多选的复杂使用

发布于 2026-01-16 18:05:23

l3keys我想写个多选:

共有L,R两个选项,需求预期:
1.0. 输入{ mode={ L, R } },得到{ L=true, R=true }
1.1. 输入{ mode=L },得到{ L=true } (R=false可有可无,下同);
1.2. 输入{ mode=R },得到{ R=true }
希望选项输入时mode=可以省略,即:
2.0. 输入{ L, R },得到{ L=true, R=true }
2.1. 输入{ L },得到{ L=true } (R=false可有可无,下同);
2.2. 输入{ R },得到{ R=true }
按此需求设计如下:

\keys_define:nn { mymodule }
  {
    mode .multichoices:nn = { L, R } { \prop_put:Nee \l_tmpa_prop \l_keys_choice_tl \c_true_bool },
    L    .meta:n          = { mode = L },
    R    .meta:n          = { mode = R },
  }

又增加需求预期:
0.0. 不输入,得到{ L=true, R=true }
使用.initial:n = { L, R }会妨碍单独输入{ (mode=)L/R }的功能,应该如何解决?


再增加需求预期:
3.1. 输入{ L=false },得到{ L=false, R=true }
3.2. 输入{ R=false },得到{ L=true , R=false }
应该如何解决?

查看更多

关注者
0
被浏览
85
1 个回答
Hydroxyl
Hydroxyl 15小时前
这家伙很懒,什么也没写!
\bool_new:N \l__L_bool
\bool_new:N \l__R_bool
\bool_set_true:N \l__L_bool
\bool_set_true:N \l__R_bool

\keys_define:nn { mymodule }{
    L .bool_set:N = \l__L_bool,
    L .default:n  = {true},
    R .bool_set:N = \l__R_bool,
    R .default:n  = {true},
}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览