我正在尝试设置一个密钥对系列以用于\NewDocumentCommand
。目标是拥有一个具有两个密钥对的函数。我希望能够获取宏中两个键的值,类似于使用 #1、#2。
\documentclass{beamer}
\mode<presentation>
{ \usetheme{metropolis} }
\geometry{verbose,papersize={160mm,90mm}}
\usepackage{tikz,xkeyval}
\setlength{\parindent}{0pt}
\makeatletter
\define@key{mykeyset}{testingkey}{#1}
\presetkeys{mykeyset} {testingkey} {testingkey={testingkey~default~value}}
\define@key{mykeyset}{secondkey}{#1}
\presetkeys{mykeyset}{secondkey}{secondkey={secondkey~default~value}}
\makeatother
\ExplSyntaxOn
\NewDocumentCommand\ifelsetest{ m o }{
optional~parameter~:~#2
\par
\IfNoValueTF{#2}
{ \setkeys{mykeyset}{secondkey={secondkey~default~value~set~by~macro}} }
{ \setkeys{mykeyset}{#2} }
%here trying to print independently the values alone of the keys
\mykeyset@testingkey
\mykeyset@secondkey
}
\ExplSyntaxOff
\begin{document}
\begin{frame}
\ifelsetest{test} % #2 should be -NoValue-
\par
\ifelsetest{test}[]
\par
\ifelsetest{test}[testingkey=shouldtesttrue]
\par
\ifelsetest{test}[testingkey=]
\end{frame}
\end{document}
编辑:根据评论,这里尝试使用expl3
。我还在标题中将“ xkeyval
”更改为“expl3
键值对”。
键值最终以布尔值结束,将字符串yes
视为 True,并将其他任何内容(包括空字符串)视为False
。
实际上,我想添加很多可以通过密钥发出并最终以 或 结束的True
可能性False
。
例如True
:“是”、“好的”、“继续”......以及False
:“不”、“停止”、“不要这样做”......
虽然我可以\tl_if_in:NnTF
对每个单词发出一个,但有没有更短的选择?
编辑:根据建议,我添加了一个 clist 以允许几个选项将布尔值设置为True
我使用的\clist_if_in:NnTF
,但我需要一个 \clist_if_in:NNTF . Because
\clist_if_in:NnTF` 期望一个列表作为它的第二个参数,我必须使用 \tl_use:N。
它不起作用,并且 NiceTabular 中存在奇怪的东西(第一列内容开头的逗号)
\documentclass{beamer}
\mode<presentation>
{ \usetheme{metropolis} }
\geometry{verbose,papersize={160mm,90mm}}
\usepackage{nicematrix}
\ExplSyntaxOn
\keys_define:nn {groupetest/textbloc }
{
clef .tl_set:N = \l_groupetest_clef_tl
}
\bool_new:N \l_clef_bool
\clist_new:N \l_istrue_clist
\clist_set:Nn \l_istrue_clist { {yes} , {oui} , {ok} , {dac} , {go~head} , {yup} , {super} }
\NewDocumentCommand\textbloc{ O{} }{
\keys_set:nn { groupetest/textbloc } { #1 }
\tl_if_empty:NTF \l_groupetest_clef_tl
{
\bool_set_false:N \l_clef_bool
}
% here using \clist_if_in:NnTF, but why is there
% no \clist_if_in:NNTF ??
{
\clist_if_in:NnTF \l_istrue_clist
{ \tl_use:N \l_groupetest_clef_tl }
{
\bool_set_true:N \l_clef_bool
}
{
\bool_set_false:N \l_clef_bool
}
}
\bool_if:NTF \l_clef_bool
{
clé~'clef'~=~\l_groupetest_clef_tl & var.~bool~'clef'~: True \\
}
{
clé~'clef'~=~\l_groupetest_clef_tl & var.~bool~'clef'~: False \\
}
\keys_set:nn { groupetest/textbloc }
{ clef={} }
}
\ExplSyntaxOff
\setlength{\parindent}{0pt}
\begin{document}
\begin{frame}
\begin{NiceTabular}{ll}[hvlines]
\textbloc[clef=abc]
\textbloc[clef=yes]
\textbloc
\end{NiceTabular}
\end{frame}
\end{document}
这里是: