行列と括弧を転置する

行列と括弧を転置する

transp最終的に 1 つの引数 (マトリックスの名前と 2 つの出力) を持つコマンドを定義したいと思います。

  1. \transp{A}括弧内の行列A^Tは、
  2. \transp A単なる行列 A^T です。

このコマンドを試しました:

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

しかし、転置記号を印刷するには、 と記述する必要があります。 前のコマンドを変更して、 (2. で述べたように) と\transp{}記述するだけでよいでしょうか?\transp

答え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}1 つの引数を持つマクロに対して同じ結果をもたらし、引数が複数のトークンで構成される場合は中括弧が必要です。実際、必須の引数には、たとえ 1 つのトークンしか囲んでいない場合でも中括弧を使用するのが良い習慣だと思います。

\transp中括弧がない場合、 は引数として 1 つのトークンしか受け入れることができず、 とも同様\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}

関連情報