transp
最終的に 1 つの引数 (マトリックスの名前と 2 つの出力) を持つコマンドを定義したいと思います。
\transp{A}
括弧内の行列A^Tは、\transp A
単なる行列 A^T です。
このコマンドを試しました:
\newcommand{\transp}[1]{
\ifstrempty{#1}{{}^{\text{\tbf{T}}} }{{}^{\text{\tbf{T}}} \left( #1 \right)}}
しかし、転置記号を印刷するには、 と記述する必要があります。 前のコマンドを変更して、 (2. で述べたように) と\transp{}
記述するだけでよいでしょうか?\transp
答え1
標準の TeX 構文によれば、\transp{A}
と は\transp A
完全に同等です。
あなたかもしれない次のようにします。
\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}
しかし、混乱を招くので避けた方が良いでしょう。
次の方がはるかに良いと思います。 を追加して、括弧が必要な場所を明示的にマークします*
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\transp}{sm}{%
\IfBooleanTF{#1}{(#2)^{T}}{#2^{T}}%
}
\begin{document}
$\transp{A}+\transp*{B+C}$
\end{document}
答え2
以下は機能しているように見えますが、一般的に良いアイデアかどうかは疑問です。通常\foo A
、 と は\foo {A}
1 つの引数を持つマクロに対して同じ結果をもたらし、引数が複数のトークンで構成される場合は中括弧が必要です。実際、必須の引数には、たとえ 1 つのトークンしか囲んでいない場合でも中括弧を使用するのが良い習慣だと思います。
\transp
中括弧がない場合、 は引数として 1 つのトークンしか受け入れることができず、 とも同様\transp A+B
であることに注意してください。特に、はひどい結果になります。\transp A
+B
\transp \mathbf{A}
\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}
星付きのバリエーションの方が一般的です(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}
ただし、オプションの引数(p
括弧の場合は 、b
角括弧の場合は )を使用することもできます。
\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}