如果参数有下标,则添加括号

如果参数有下标,则添加括号

我正在寻找创建新命令的方法

\newcommand{\transpose}[1]{#1^T}.

但这里重要的是,我希望命令检查参数是否有上标或下标,并在必要时添加括号。所以它应该这样做

#1 == D => \newcommand{\transpose}[1]{#1^T}
#1 == D_1 => \newcommand{\transpose}[1]{\left(#1\right)^T}

我希望你理解清楚了。你有什么想法吗?

答案1

这将参数读取为项目列表,并使用^_作为项目分隔符(解析分隔符)。如果存在其中一个或两个,则列表长度将超过 1。然后我使用列表长度来决定是否添加括号。

\documentclass{article}  
\usepackage{listofitems}
\newcommand\transpose[1]{%
  \setsepchar{_||^}%
  \readlist\mymat{#1}%
  \ifnum\mymatlen>1\left(#1\right)^T\else#1^T\fi%
}
\begin{document}  
\[
\transpose{D}
\]
\[
\transpose{D_1}
\]
\[
\transpose{D^x}
\]
\end{document}

在此处输入图片描述

对论点的一个扩展,形式为

\newcommand\transpose[1]{%
  \setsepchar{_||^}%
  \expandafter\readlist\expandafter\mymat\expandafter{#1}%
  \ifnum\mymatlen>1\left(#1\right)^T\else#1^T\fi%
}

可以让一些嵌入的案例得到适当的消化,例如,

\def\myvar{A_x}
\[
\transpose{\myvar}
\]

在此处输入图片描述

相关内容