# Defining operator symbols

I want to replace the circle in the symbol \circledast by a square. But i did not find the right command. It seems that the packages stmaryrd would help. But the package usually re-defines other basic symbols which is not desired.

The amssymb package seems not define such a symbol. Is there anyone know how to define some command like \boxdast or \squaredast? Or how to avoid other changes by introducing packages that already defines \boxdast or \squaredast?

-
you can use a package like savesym or noconflict to avoid unwanted redefining of symbols by stmaryrd – domenico Jul 3 '13 at 9:13
As far as I know, stmaryrd redefines no symbol in the standard stock. Can you show an example? – egreg Jul 3 '13 at 9:18
As egreg says stmaryrd does not clash with standard latex symbols nor amssymb. stmaryrd has \boxast already. Alternatively mathabx has \boxasterisk and \boxcoasterisk and \bigboxasterisk – Andrew Swann Jul 3 '13 at 9:24
@egreg I got one mistake; you are correct, stmaryrd does not casue any confusion. Thanks. – Richie Jul 3 '13 at 16:30

The following example composes \boxast from \Box and * and only needs package amssymb because of \Box:

\documentclass{article}
\usepackage{amssymb}

\makeatletter
\providecommand*{\boxast}{%
\mathbin{% as \boxplus and \boxtimes
\mathpalette\@boxit{*}%
}%
}
\newcommand*{\@boxit}[2]{%
% #1: math style (\displaystyle, \textstyle, ...)
% #2: symbol to be boxed that is centered around the math axis
\sbox0{$\m@th#1\Box$}%
% Manual correction for font bounding boxes:
\ifx#1\displaystyle \ht0=\dimexpr\ht0+.05ex\relax \fi
\ifx#1\textstyle \ht0=\dimexpr\ht0+.05ex\relax \fi
\ifx#1\scriptstyle \ht0=\dimexpr\ht0+.04ex\relax \fi
\ifx#1\scriptscriptstyle \ht0=\dimexpr\ht0+.065ex\relax \fi
\sbox2{$#1\vcenter{}$}% \ht2 is positionn of math axis
\rlap{%
\hbox to \wd0{%
\hfill
\raisebox{%
\dimexpr.5\dimexpr\ht0+\dp0\relax-\ht2\relax
}{$\m@th#1#2$}%
\hfill
}%
}%
\Box
}
\makeatother

\begin{document}
$A \boxplus B \boxast C^{D \boxast E^{F \boxast G}}$
\end{document}


Remarks:

• Macro \@boxit assumes that the symbol to be boxed is centered around the math axis as some of the typical boxed symbols are (plus, minus, times, ast). Then the symbol is placed in the middle of the box. (There might be tiny deviations because glyph side bearings are not taken into account.)

• The reason for \mathpalette is to get the actual math style in order to match the size of the symbol according to the current math style.

• \m@th removes \mathsurround, because it should add space around the formula, not within, if \mathsurround is set.

• Update: The font bounding box of \Box is a little too small in the height, therefore I have added a manual correction.

The following file shows the font bounding boxes for \Box, first the unmodified font bounding box (red), then the corrected bounding box (green). (The larger width of the font bounding box does not matter, because the white space left and right seems to be the same and the symbol remains centered.)

\documentclass{article}
\usepackage{amssymb}
\usepackage{color}

\begin{document}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{.1pt}
\newcommand*{\test}[2]{%
\fbox{\color{red}$\csname #1style\endcsname\Box$}%
\fbox{\color{green}%
$\csname #1style\endcsname\Box$%
\vphantom{\raisebox{#2}{$\csname #1style\endcsname\Box$}}%
}%
}
\newcommand*{\test}[1]{%
\fbox{\color{blue}$\csname #1style\endcsname\Box$}%
}
\test{display}
\test{text}
\test{script}
\test{scriptscript}
\end{document}


-
It appears to me that the asterisks in the last box is not centered, i.e. in F \boxast G. Any idea what is causing that? A very nice solution though :-) – Mythio Jul 3 '13 at 11:15
@Mythio: There was an calculation error: -\dp0 instead of +\dp0, but \dp0 is 0.0pt, thus this had no impact on the result. The font bounding boxes however, are not entirely correct, see the updated answer. – Heiko Oberdiek Jul 3 '13 at 19:24

You could use Tikz to accomplish this.

Something like the following, which declares the command \boxast.

\documentclass{article}
\usepackage{amsmath,tikz}

\newcommand*\boxast{
\begin{tikzpicture}
\node [rectangle,scale=1,draw] {$\ast$};
\end{tikzpicture}
}
\begin{document}
And it looks like: $\boxast$
\end{document}


Which gives this as result:

I left the scale option in there, because you can use that the tweak the size a bit. For instance, try scale=0.7 to make it approximately the same height as the text. It depends a bit on how you want to use the symbol exactly.

-
Why \ensuremath in the command? Also it doesn't take an argument. And you don't need PGF package if you have TikZ and you don't need positioning for this too :) – percusse Jul 3 '13 at 9:09
@percusse; Thank you :-) The trouble of reusing code that I reused myself before for other commands. I've changed it. – Mythio Jul 3 '13 at 9:12

Here's a way (without tikz) that is quite brief (shown with super- and supersuperscript). The size of the box symbol will be scaled to the current size of a capital "B", regardless of what script mode you are in.

To explain the use of the packages, the asterisk is inset into the box via the stackengine package. The bottom (dead zone) of the box is clipped with \addvbuffer of the verbatimbox package, and the resulting symbol is scaled to the size of a capital B by way of the scalerel package.

\documentclass{article}
\usepackage{stackengine}
\usepackage{scalerel}
\usepackage{verbatimbox}
\usepackage{amssymb}
\newsavebox\boxastcontent
\sbox\boxastcontent{\addvbuffer[0ex -.4ex]{\topinset{*}{$\Box$}{.25ex}{}}}
\def\boxast{\scalerel*{\usebox{\boxastcontent}}{B}}
\begin{document}
$$A\boxast B^{A\boxast B^{A \boxast B}}$$
\end{document}


-