带有上标和下标的 LaTeX 命令

带有上标和下标的 LaTeX 命令

我从另一个用户那里继承了下面的命令

\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}

相关内容