定义运算符号

定义运算符号

我想用正方形替换符号中的圆圈\circledast。但我找不到正确的命令。看来软件包stmaryrd会有所帮助。但软件包通常会重新定义其他基本符号,这是不希望的。

amssymb软件包似乎没有定义这样的符号。有人知道如何定义某些命令,如\boxdast或 吗\squaredast?或者如何通过引入已经定义\boxdast或 的软件包来避免其他更改\squaredast

答案1

下面的例子\boxast\Box和组成*,并且只需要包amssymb因为\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}

结果

评论:

  • \@boxit假设要加框的符号以数学轴为中心,就像一些典型的加框符号一样(加号、减号、乘号、ast)。然后将符号放在框的中间。(可能会有微小的偏差,因为没有考虑字形侧边距。)

  • 原因\mathpalette是获取实际的数学样式,以便根据当前数学样式匹配符号的大小。

  • \m@th删除\mathsurround,因为它应该在公式周围添加空格,而不是在公式内部,如果\mathsurround设置了。

  • 更新:的字体边界框\Box高度有点太小,因此我添加了手动校正。

    以下文件显示了 的字体边界框\Box,首先是未修改的字体边界框(红色),然后是更正后的边界框(绿色)。(字体边界框的较大宽度无关紧要,因为左右两侧的空白似乎相同,并且符号保持居中。)

    \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}
    

字体边界框

答案2

您可以使用 Tikz 来实现这一点。

类似下面的内容,声明了命令\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}

结果是:

在此处输入图片描述

我把scale选项留在那里,因为您可以使用它来稍微调整一下大小。例如,尝试scale=0.7使其高度与文本大致相同。这有点取决于您想如何使用符号。

答案3

这是一种非常简短的方法(不使用 tikz)(使用 super- 和 supersuperscript 显示)。无论您处于哪种脚本模式,方框符号的大小都将缩放到大写字母“B”的当前大小。

为了解释这些包的使用方法,星号通过包插入到框中stackengine。框的底部(死区)被包剪裁\addvbufferverbatimbox结果符号通过包缩放到大写字母 B 的大小scalerel

\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}

在此处输入图片描述

相关内容