我想用正方形替换符号中的圆圈\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
。框的底部(死区)被包剪裁\addvbuffer
,verbatimbox
结果符号通过包缩放到大写字母 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}