答案1
当你这样做时,\boxstar \boxstar \boxtimes \boxtimes
你会得到以下原子序列,因为你的\boxstar
是由一个普通符号(O)后面跟着一个二进制运算(B)组成的:
O (米) B (米) O (米) B (米) B (0) B
TeX 将在指定的位置插入一个中等空格(m),但在最后两个 B 之间插入零空格,因为它们与二进制运算不兼容,所以它们被视为 O。
您如何解决这个问题?通过说明新符号的行为方式并使用括号\boxtimes
使其有效地变成普通符号:
\newcommand{\boxstar}{\mathbin{\mathrlap{\boxplus}{\boxtimes}}}
这里实际上不需要括号,因为由 OB 组成的子公式将变成 OO(根据上面提到的相同规则),但从概念上讲,最好有括号。
这是因为\boxplus
和\boxtimes
的宽度相同。为了叠加不同宽度的符号,最简单的方法是利用\ooalign
,参见https://tex.stackexchange.com/a/22375/4427进行快速学习。
你的例子
\[
\boxstar \boxstar \boxtimes \boxtimes \boxtimes \boxtimes \boxtimes
\]
现在将成为
大嘴巴
转化为
O (米) B (米) O (米) B (米) O (米) B (米) O
因为 BB 序列不兼容。
答案2
您必须将两个符号组合在一起。在这里我使用 来\mathbin
向 TeX 表明这\boxstar
是一个二元运算符。如果您没有这样做,周围的间距\boxtimes
会受到其后跟随着的符号的影响,从而导致\boxplus
偏离中心。
\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\newcommand{\boxstar}{\mathbin{\mathrlap{\boxplus}\boxtimes}}
\begin{document}
\[ \boxstar \boxstar \boxtimes \boxtimes \boxtimes \boxtimes \boxtimes \]
\end{document}
我建议使用 来覆盖符号\ooalign
,因为这会相对于中心覆盖它们(\mathrlap
相对于左边界覆盖)。
\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\makeatletter
\newcommand*\boxstar{\mathpalette\@boxstar\relax}
\newcommand*\@boxstar[2]{%
\mathbin{%
\ooalign{%
$\m@th#1\boxplus$\cr
\hidewidth$\m@th#1\boxtimes$\hidewidth\cr
}%
}%
}
\makeatother
\begin{document}
\[ \boxstar \boxstar \boxtimes \boxtimes \boxtimes \boxtimes \boxtimes \]
\end{document}