Transponieren einer Matrix und Klammern

Transponieren einer Matrix und Klammern

Ich möchte einen Befehl definieren, transpder letztendlich ein Argument hat: den Namen der Matrix und schließlich zwei Ausgaben.

  1. \transp{A}ist die Matrix A^T in Klammern,
  2. \transp Aist einfach die Matrix A^T.

Ich habe diesen Befehl ausprobiert:

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

aber um das Transponierungssymbol zu drucken, muss ich schreiben \transp{}. Kann ich den vorherigen Befehl ändern, um nur zu schreiben \transp(wie in 2. erwähnt)?

Antwort1

Gemäß der Standard-TeX-Syntax sind \transp{A}und \transp Avöllig gleichwertig.

DukönnteGehen Sie dazu folgendermaßen vor:

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

aber ich würde es vermeiden, weil es verwirrend ist.

Bildbeschreibung hier eingeben

Ich finde Folgendes viel besser. Sie markieren explizit die Stellen, an denen Sie Klammern haben möchten, indem Sie hinzufügen *.

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

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

\begin{document}

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

\end{document}

Antwort2

Das Folgende scheint zu funktionieren, aber ich bezweifle, dass es im Allgemeinen eine gute Idee ist. Normalerweise ergibt \foo Aes \foo {A}dasselbe Ergebnis für Makros mit einem Argument und die Klammern sind erforderlich, wenn das Argument aus mehr als einem Token besteht. Tatsächlich würde ich sagen, dass es eine gute Praxis ist, Klammern für obligatorische Argumente zu verwenden, selbst wenn sie nur ein Token einschließen.

Beachten Sie, dass \transpohne Klammern nur ein Token als Argument akzeptiert werden kann, also \transp A+Bund \transp A. +BInsbesondere dann \transp \mathbf{A}stirbt auf schreckliche Weise.

\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

Eine mit Sternchen versehene Variante wäre häufiger (siehe auch egregs Antwort)

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

Sie können aber auch ein optionales Argument verwenden ( pfür Klammern, bfür eckige Klammern)

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

verwandte Informationen