在我的文档中,我必须输入包含上标字母的表达式,并用括号括起来,例如
a^{(k,i)}, b^{(k,i)}, \gamma^{(k,i)}
过了一段时间,每次输入那些括号‘(’和‘)’对我来说变得非常烦人。
我定义了新变量
\newcommand{\ca}[2]{a^{(#1, #2)}}
\newcommand{\cb}[2]{b^{(#1, #2)}}
\newcommand{\cgamma}[2]{\gamma^{(#1, #2)}}
并使用\ca k i
或\cgamma k i
。这确实让我更容易输入方程式,但它缺乏灵活性。首先,我必须为每个字母定义一个新变量。此外,如果我想使用下标并输入\c_3{k,i}
,那么它就坏了。
我的问题是,实现此功能的正确方法是什么?
编辑:在网上搜索了一段时间后,我找到了一个解决方案
\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\makeatletter
\newcommand{\removeabs}[1]{%
\ifcat\relax\noexpand#1%
\expandafter\expandafter\expandafter\@gobble\expandafter\string
\fi
#1%
}
\makeatother
\newcommand{\doublesupscr}[1]{\expandafter\newcommand\csname c\removeabs{#1}\endcsname[2]{#1^{(##1, ##2)}}}
\newcommand{\singlesupscr}[1]{\expandafter\newcommand\csname c\removeabs{#1}\endcsname[1]{#1^{(##1)}}}
\forcsvlist{\doublesupscr}{a,b,c}
\forcsvlist{\singlesupscr}{\eta, \gamma}
\begin{document}
\begin{equation*}
\ca k i, \cb k i, \cc k i, \ceta i, \cgamma i
\end{equation*}
\end{document}
这将产生以下输出
但是,我想输入类似的内容\ca_3 k i
并仍然获得正确的输出。 有没有办法让 newcommand 忽略下标作为参数?
答案1
答案2
这是一个简单的解决方案:
\newcommand{\ps}[1]{^{(#1)}} % parenthesized superscript
现在您可以编写类似的内容$a_3\ps{k,i}$
,它类似于不带括号的版本$a_3^{k,i}$
。