Me gustaría definir un comando transp
que tenga eventualmente un argumento: el nombre de la matriz y finalmente dos salidas.
\transp{A}
es la matriz A^T entre paréntesis,\transp A
es 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 A
son completamente equivalentes.
Tú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.
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 A
y \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 \transp
sin llaves solo se puede aceptar un token como argumento, al igual \transp A+B
que \transp A
y +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}
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 ( p
para paréntesis, b
para 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}