转置矩阵和括号

转置矩阵和括号

我想定义一个transp最终有一个参数的命令:矩阵的名称和最后两个输出。

  1. \transp{A}是括号内的矩阵 A^T,
  2. \transp A就是矩阵A^T。

我尝试了这个命令:

\newcommand{\transp}[1]{
\ifstrempty{#1}{{}^{\text{\tbf{T}}} }{{}^{\text{\tbf{T}}} \left( #1 \right)}}

但要打印转置符号,我必须写入\transp{}。我可以修改上一个命令以便只写入\transp(如2中所述)吗?

答案1

根据标准 TeX 语法,\transp{A}\transp A完全等价。

可能按下列方式进行:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\DeclareRobustCommand{\transp}{%
  \@ifnextchar\bgroup\transp@paren\transp@simple
}
\newcommand{\transp@paren}[1]{(#1)^{T}}
\newcommand{\transp@simple}[1]{#1^{T}}
\makeatother

\begin{document}

$\transp A+\transp{B+C}$

\end{document}

但我会避免这样做,因为它容易让人困惑。

在此处输入图片描述

我发现下面的方法好多了。你可以通过添加 来明确标记需要括号的位置*

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\transp}{sm}{%
  \IfBooleanTF{#1}{(#2)^{T}}{#2^{T}}%
}

\begin{document}

$\transp{A}+\transp*{B+C}$

\end{document}

答案2

以下方法似乎有效,但我怀疑这总体上不是一个好主意。通常\foo A\foo {A}对于只有一个参数的宏给出相同的结果,如果参数包含多个标记,则需要使用括号。事实上,我认为对强制参数使用括号是一种很好的做法,即使它们只包含一个标记。

请注意,\transp不带括号的 只能接受一个标记作为其参数,和 也是如此\transp A+B。特别是,会死得很惨。\transp A+B\transp \mathbf{A}

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand*{\transp@nb}[1]{#1^{T}}
\newcommand*{\transp@br}[1]{(#1)^{T}}
\newcommand{\transp}{}
\protected\def\transp{%
  \@ifnextchar\bgroup
    {\transp@br}
    {\transp@nb}}
\makeatother

\begin{document}
  \begin{align*}
    \transp A \\
    \transp{A}
  \end{align*}
\end{document}

A^T//(A)^T

带星号的变体会更常见(另见 egreg 的答案)

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand*{\transp@nb}[1]{#1^{T}}
\newcommand*{\transp@br}[1]{(#1)^{T}}
\newcommand{\transp}{}
\protected\def\transp{%
  \@ifstar
    {\transp@br}
    {\transp@nb}}
\makeatother

\begin{document}
  \begin{align*}
    \transp{A} \\
    \transp*{A}
  \end{align*}
\end{document}

但您也可以使用可选参数(p用于括号、b用于方括号)

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\transp}[2][]{%
  \if#1p
    (#2)
  \else
    \if#1b
      [A]
    \else
     A
    \fi
  \fi^{T}
}
\makeatother

\begin{document}
  \begin{align*}
    \transp{A} \\
    \transp[b]{A}
  \end{align*}
\end{document}

相关内容