8

Looking for a way to draw a slightly tidier version of the following, as a math operator akin to $\otimes$:

enter image description here

\documentclass{article}

\begin{document}
\center Like this only with upper and lower quadrants removed: \\
\center \Huge$\otimes$
\end{document}

enter image description here

For the record:

enter image description here

8

I too, like @egreg, am inclined toward a solution that draws the required symbol by hand. With the help of the subroutines provided by the halloweenmath package (which is entirely concerned with drawing math symbols using pict2e facilities), we can provide a full answer that features:

  • a binary operator named \curvetie;

  • a corresponding “large” operator named \bigcurvetie;

  • support for the bold math version.

This answer can also serve as an example of how to augment the halloweenmath package with the addition of custom symbols.

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

% The "halloweenmath" package supplies some useful suroutines and also loads 
% the "amsmath" package:
\usepackage{halloweenmath}

\makeatletter

\newcommand*\@Roly@large@curvetie[1]{%
  \begin{@HwM@bigop@picture}\displaystyle \textfont {6}{-3}%
    \linethickness{#1\@HwM@thickness@units@for \textfont}%
    \moveto(0,0)
    \circlearc{0}{0}{3}{135}{225}%
    \circlearc{0}{0}{3}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@bigop@picture}%
}
\newcommand*\@Roly@Large@Curvetie{%
  \@HwM@choose@thicknesses \@Roly@large@curvetie
        {{}}%
        {{1.8}}%
}
\newcommand*\@Roly@small@curvetie[3]{%
  \begin{@HwM@bigop@picture}#1#2{4}{-2}%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \moveto(0,0)
    \circlearc{0}{0}{2}{135}{225}%
    \circlearc{0}{0}{2}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@bigop@picture}%
}
\newcommand*\@Roly@Small@Curvetie[2]{%
  \@HwM@choose@thicknesses{\@Roly@small@curvetie #1#2}%
        {{}}%
        {{1.6}}%
}
\newcommand*\@Roly@binop@curvetie[3]{%
  \begin{@HwM@oplus@picture}#1#2{2.8284271}{-1.4142135}%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \moveto(0,0)
    \circlearc{0}{0}{1.4142135}{135}{225}%
    \circlearc{0}{0}{1.4142135}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@oplus@picture}%
}
\newcommand*\@Roly@Binop@Curvetie[2]{%
  \@HwM@choose@thicknesses{\@Roly@binop@curvetie #1#2}%
        {{}}%
        {{1.5}}%
}
\newcommand*\curvetie{%
  \DOTSB
  \@HwM@general@binary@operation \@Roly@Binop@Curvetie
}
\newcommand*\bigcurvetie{%
  \DOTSB
  \@HwM@general@large@operator \@Roly@Large@Curvetie \@Roly@Small@Curvetie
}

\makeatother



\begin{document}

In-line:
\( \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \).
And in display:
\[ \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \]

Now repeat in boldface type.

\begingroup

\bfseries\boldmath

In-line:
\( \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \).
And in display:
\[ \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \]

\endgroup

\end{document}

Here is the output:

Output of the code


Edit: I’d like to add a different version of the same code, with theonly difference that the thickness of the strokes has been adjusted to mimic more closely that of the \[big]otimes symbols.

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

% The "halloweenmath" package supplies some useful suroutines and also loads 
% the "amsmath" package:
\usepackage{halloweenmath}

\makeatletter

\newcommand*\@Roly@large@curvetie[1]{%
  \begin{@HwM@bigop@picture}\displaystyle \textfont {6}{-3}%
    \linethickness{#1\@HwM@thickness@units@for \textfont}%
    \moveto(0,0)
    \circlearc{0}{0}{3}{135}{225}%
    \circlearc{0}{0}{3}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@bigop@picture}%
}
\newcommand*\@Roly@Large@Curvetie{%
  \@HwM@choose@thicknesses \@Roly@large@curvetie
        {{2.2}}% governs thickness for "normal" math version
        {{3}}%   governs thickness for "bold" math version
}
\newcommand*\@Roly@small@curvetie[3]{%
  \begin{@HwM@bigop@picture}#1#2{4}{-2}%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \moveto(0,0)
    \circlearc{0}{0}{2}{135}{225}%
    \circlearc{0}{0}{2}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@bigop@picture}%
}
\newcommand*\@Roly@Small@Curvetie[2]{%
  \@HwM@choose@thicknesses{\@Roly@small@curvetie #1#2}%
        {{1,8}}% normal
        {{2.2}}% bold
}
\newcommand*\@Roly@binop@curvetie[3]{%
  \begin{@HwM@oplus@picture}#1#2{2.8284271}{-1.4142135}%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \moveto(0,0)
    \circlearc{0}{0}{1.4142135}{135}{225}%
    \circlearc{0}{0}{1.4142135}{45}{-45}
    \closepath
    \strokepath
  \end{@HwM@oplus@picture}%
}
\newcommand*\@Roly@Binop@Curvetie[2]{%
  \@HwM@choose@thicknesses{\@Roly@binop@curvetie #1#2}%
        {{.8}}%  normal
        {{1.3}}% bold
}
\newcommand*\curvetie{%
  \DOTSB
  \@HwM@general@binary@operation \@Roly@Binop@Curvetie
}
\newcommand*\bigcurvetie{%
  \DOTSB
  \@HwM@general@large@operator \@Roly@Large@Curvetie \@Roly@Small@Curvetie
}

\makeatother



\begin{document}

In-line:
\( \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \).
And in display:
\[ \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \]

Now repeat in boldface type.

\begingroup

\bfseries\boldmath

In-line:
\( \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \).
And in display:
\[ \bigcurvetie_{i=1}^{n} X_{i} = X_{1}\curvetie\dots\curvetie X_{n} \]

\endgroup

Let us compare the thickness of the strokes:
\( {\bigotimes}{\bigcurvetie} \),
and \( {\otimes}{\curvetie} \).
{\bfseries\boldmath And in bold:
\( {\bigotimes}{\bigcurvetie}\ {\otimes}{\curvetie} \).}
Displayed:
\[ {\bigotimes}{\bigcurvetie} \]

\end{document}

The corresponding output follows:

Output with thicker strokes

  • Wow. Love the support for bold math. Will try it today. – Roly May 24 '17 at 5:29
  • I've accepted this answer. Rendering-wise, it's a slight improvement over @egreg's (otherwise excellent) solution, and \bigcurvetie is a useful complement. Thanks. (I ended up having to scale by 0.8, but I can live with that.) – Roly May 24 '17 at 9:24
  • @Roly: It’s very simple (if you know which parameter you have to tweak, of course!) to adjust the size of the symbols and/or the thickness of the strokes. Would you prefer a slightly smaller symbol? Or heavier strokes? Please ask… :-) P.S. I’ll see if I can add some explanation during the next weekend. – GuM May 24 '17 at 20:00
6

With pict2e; perhaps not perfect at large sizes.

\documentclass{article}
\usepackage{pict2e}

\makeatletter
\DeclareRobustCommand{\arcbowtie}{\mathbin{\mathpalette\arc@bow@tie\relax}}
\newcommand{\arc@bow@tie}[2]{%
  \vcenter{\hbox{%
    \sbox\z@{$\m@th#1\otimes$}%
    \sbox\tw@{$\m@th\mkern1mu$}%
    \setlength{\unitlength}{\wd\z@}%
    \linethickness{.4\wd\tw@}%
    \begin{picture}(1,1)
    \polyline(0.7878,0.7878)(0.2122,0.2122)
    \polyline(0.2122,0.7878)(0.7878,0.2122)
    \put(0.5,0.5){\arc[-46,46]{0.4}}
    \put(0.5,0.5){\arc[134,226]{0.4}}
    \end{picture}%
  }}%
}
\makeatother

\begin{document}

$A\arcbowtie B_{\arcbowtie}$

$A\otimes B_{\otimes}$

\end{document}

enter image description here

  • This is excellent, thanks. I'll try this out today, along with the solution based on halloweenmath. – Roly May 24 '17 at 5:27
3

This might suffice. I use \clipbox to truncate the top/bottom quadrants. I declare it a math operator* and scale it to the height of an X in the local math style.

\documentclass{article}
\usepackage{trimclip,amsmath,scalerel}
\DeclareMathOperator*\otimesop{\scalerel*{\clipbox{0pt 1.10pt 0pt 1.04pt}{$\otimes$}}{X}}
\begin{document}
\[
  \otimesop_{i=1}^n x_i = 42
\]
\[
  \otimesop \textstyle \otimesop \scriptstyle \otimesop \scriptscriptstyle \otimesop
\]
\end{document}

enter image description here

One drawback of the above approach is that it is always scaling a \textstyle version of \otimes to the required size. Thus, at the smaller math styles, the line width looks a bit thin. A more computationally intensive alternative is to use the \otimes from the proper math style (and scale it, as needed). Compare the below result to the above image.

Additionally, instead of scaling the operator to the size of X, I here scale it to the vertical size of \mathop{X}^a, to exaggerate the \displaystyle size.

\documentclass{article}
\usepackage{trimclip,amsmath,scalerel}
\DeclareMathOperator*\otimesop{\scalerel*{\clipbox{%
  0pt \dimexpr0.7\LMpt+0.4pt\relax{} 0pt \dimexpr0.64\LMpt+0.4pt\relax}{%
  $\SavedStyle\otimes$}}{\mathop{X}^a}}
\begin{document}
\[
  \otimesop_{i=1}^n x_i = 42
\]
\[
  \textstyle\otimesop_{i}^n x_i = 42
\]
\[
  \scriptstyle\otimesop_{i}^n x_i = 42
\]
\[
  \scriptscriptstyle\otimesop_{i}^n x_i = 42
\]
\end{document}

enter image description here

  • That's a good effort, thanks. Is there a way to do a fancier clipping to render the "corners" correctly, or would that require a whole different kind of solution? – Roly May 23 '17 at 20:00
  • @Roly Alas, with \clipbox, the clip will always be a horizontal or vertical cut across the whole glyph. But let me think to an alternative approach. – Steven B. Segletes May 23 '17 at 20:02
  • Wondering if there's something fancy you can do with rotation...but I know nothing. – Roly May 23 '17 at 20:02
  • 1
    @Roly In this case, no. That is because the \clipbox cuts across the whole glyph. If I cut at an angle (via rotation), it will adversely lop off the far side of the \oplus. – Steven B. Segletes May 23 '17 at 20:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.