Transponer una matriz y un paréntesis

Transponer una matriz y un paréntesis

Me gustaría definir un comando transpque tenga eventualmente un argumento: el nombre de la matriz y finalmente dos salidas.

  1. \transp{A}es la matriz A^T entre paréntesis,
  2. \transp Aes solo la matriz A^T.

Probé este comando:

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

pero para imprimir el símbolo de transposición tengo que escribir \transp{}. ¿Puedo modificar el comando anterior para simplemente escribir \transp(como se menciona en 2.)?

Respuesta1

Según la sintaxis estándar de TeX, \transp{A}y \transp Ason completamente equivalentes.

podríahazlo de la siguiente manera:

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

pero lo evitaría porque es confuso.

ingrese la descripción de la imagen aquí

Lo siguiente me parece mucho mejor. Marca explícitamente dónde desea paréntesis agregando *.

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

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

\begin{document}

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

\end{document}

Respuesta2

Lo siguiente parece funcionar, pero dudo que sea una buena idea en general. Por lo general, \foo Ay \foo {A}da el mismo resultado para macros con un argumento y las llaves son necesarias en caso de que el argumento consista en más de un token. De hecho, diría que es una buena práctica utilizar llaves para los argumentos obligatorios incluso si incluyen solo un token.

Tenga en cuenta que \transpsin llaves solo se puede aceptar un token como argumento, al igual \transp A+Bque \transp Ay +B. En particular entonces, \transp \mathbf{A}muere horriblemente.

\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

Una variante destacada sería más común (ver también la respuesta de 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}

pero también puedes usar un argumento opcional ( ppara paréntesis, bpara corchetes)

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

información relacionada