% Needed for \lvert, \rVert, etc. and \operatorname.
\usepackage{amsmath}
+% Wasysym contains the \ocircle that we use in \directsumperp.
+\usepackage{wasysym}
+
+% Part of the adjustbox package; needed to clip the \perp sign.
+\usepackage{trimclip}
+
\input{mjo-common}
-% Absolute value (modulis) of a scalar.
+% Absolute value (modulus) of a scalar.
\newcommand*{\abs}[1]{\left\lvert{#1}\right\rvert}
% Norm of a vector.
% specialized to real matrices.
\newcommand*{\transpose}[1]{ #1^{T} }
+% The trace of an operator.
+\newcommand*{\trace}[1]{ \operatorname{trace}\of{{#1}} }
+
% The ``span of'' operator. The name \span is already taken.
\newcommand*{\spanof}[1]{ \operatorname{span}\of{{#1}} }
% The ``co-dimension of'' operator.
\newcommand*{\codim}{ \operatorname{codim} }
-% The trace of an operator.
-\newcommand*{\trace}[1]{ \operatorname{trace}\of{{#1}} }
-
% The orthogonal projection of its second argument onto the first.
\newcommand*{\proj}[2] { \operatorname{proj}\of{#1, #2} }
\fi
}
}
+
+
+%
+% Orthogonal direct sum.
+%
+% First declare my ``perp in a circle'' operator, which is meant to be
+% like an \obot or an \operp except has the correct weight circle. It's
+% achieved by overlaying an \ocircle with a \perp, but only after we
+% clip off the top half of the \perp sign and shift it up.
+\DeclareMathOperator{\oplusperp}{\mathbin{
+ \ooalign{
+ $\ocircle$\cr
+ \raisebox{0.625\height}{$\clipbox{0pt 0pt 0pt 0.5\height}{$\perp$}$}\cr
+ }
+}}
+
+% Now declare an orthogonal direct sum in terms of \oplusperp.
+\newcommand*{\directsumperp}[2]{ {#1}\oplusperp{#2} }