Transpor uma matriz e parênteses

Transpor uma matriz e parênteses

Gostaria de definir um comando transptendo eventualmente um argumento: o nome da matriz e finalmente duas saídas.

  1. \transp{A}é a matriz A ^ T entre parênteses,
  2. \transp Aé apenas a matriz A ^ T.

Eu tentei este comando:

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

mas para imprimir o símbolo de transposição tenho que escrever \transp{}. Posso modificar o comando anterior para apenas escrever \transp(conforme mencionado em 2.)?

Responder1

De acordo com a sintaxe padrão do TeX, \transp{A}e \transp Asão completamente equivalentes.

Vocêpoderfaça da seguinte maneira:

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

mas eu evitaria, porque é confuso.

insira a descrição da imagem aqui

Acho o seguinte muito melhor. Você marca explicitamente onde deseja os parênteses adicionando *.

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

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

\begin{document}

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

\end{document}

Responder2

O seguinte parece funcionar, mas duvido que seja uma boa ideia em geral. Normalmente \foo Ae \foo {A}fornece o mesmo resultado para macros com um argumento e os colchetes são necessários caso o argumento consista em mais de um token. Na verdade, eu diria que é uma boa prática usar colchetes para argumentos obrigatórios, mesmo que incluam apenas um token.

Observe que \transpsem colchetes só pode aceitar um token como argumento, assim \transp A+Bcomo \transp Aand +B. Em particular então, \transp \mathbf{A}morre horrivelmente.

\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

Uma variante estrelada seria mais comum (veja também a resposta do 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}

mas você também pode usar um argumento opcional ( ppara parênteses, bpara colchetes)

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

informação relacionada