Gostaria de definir um comando transp
tendo eventualmente um argumento: o nome da matriz e finalmente duas saídas.
\transp{A}
é a matriz A ^ T entre parênteses,\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 A
sã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.
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 A
e \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 \transp
sem colchetes só pode aceitar um token como argumento, assim \transp A+B
como \transp A
and +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}
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 ( p
para parênteses, b
para 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}