我从另一个用户那里继承了下面的命令
\newcommand{\den}[2][]{%
\mbox{$\llbracket$\bfseries #2$\rrbracket^{#1}$}%
}
这样就可以使用\den
带有可选上标的 。因此, 或 都\den{word}
可以\den[1]{word}
使用。
我如何才能为下标添加参数,以便可以省略所有参数或包含两个参数?例如,这些都应该是合法的:
\den{word}
\den[][i]{word}
\den[a][i]{word}
答案1
可以xparse
轻松添加几个可选参数。
\documentclass{article}
\usepackage{xparse} % for the main command
\usepackage{stmaryrd} % for the brackets
\NewDocumentCommand{\den}{oom}{%
$\llbracket
\mbox{\bfseries#3}
\rrbracket
\IfValueT{#2}{_{#2}}
\IfValueT{#1}{^{#1}}$%
}
\begin{document}
\den{word}
\den[a]{word}
\den[a][i]{word}
\den[][i]{word}
\end{document}
使用键值语法的不同实现:
\documentclass{article}
\usepackage{xparse} % for the main command
\usepackage{stmaryrd} % for the brackets
\ExplSyntaxOn
\NewDocumentCommand{\den}{O{}m}
{
$
\keys_set:nn { adamg/den } { #1 }
\llbracket
\mbox{\bfseries#2}
\rrbracket
\tl_if_empty:NF \l_adamg_den_sub_tl
{
\tl_if_empty:NT \l_adamg_den_sup_tl { \sp{} }
\sb{\l_adamg_den_sub_tl}
}
\tl_if_empty:NF \l_adamg_den_sup_tl
{
\sp{\l_adamg_den_sup_tl}
}
$
}
\keys_define:nn { adamg/den }
{
sup .tl_set:N = \l_adamg_den_sup_tl,
sub .tl_set:N = \l_adamg_den_sub_tl,
}
\ExplSyntaxOff
\begin{document}
\den{word}
\den[sup=a]{word}
\den[sup=a,sub=i]{word}
\den[sub=i]{word}
\end{document}