\boxed
我正在使用纯 TeX,并且从 TeXbook 中提取了一个宏(它在那里被调用\cstok
并且略有不同)以在数学模式下将事物放在框周围:
\def\boxed#1{\hbox{\vrule\vtop{\vbox{\hrule\kern 1pt\hbox{$#1$}}
\kern 1pt\hrule}\vrule}}
我使用这样的宏来制作盒装运算符:
\def\bplus{\mathbin{\boxed+}}
\def\bminus{\mathbin{\boxed-}}
\def\btimes{\mathbin{\boxed\times}}
\def\bdiv{\mathbin{\boxed\div}}
我也想有一个类似的盒装\circ
,但显而易见的方法\def\bcirc{\mathbin{\boxed\circ}}
会导致在 周围画出一个令人不快的小盒子\circ
。有没有一种通用的方法可以让盒子像里面一样大+
,但垂直和水平居中\circ
?
答案1
我保持\boxed
宏不变,并添加了\bboxed
宏,它尊重固定框架尺寸,例如左右+
。\mahthpalette
如果您需要以正确的大小打印索引和索引的索引,则将宏添加到定义中。
\def\boxed#1{\hbox{\vrule\vtop{\vbox{\hrule\kern 1pt\hbox{$#1$}}
\kern 1pt\hrule}\vrule}}
\def\bboxed#1#2{\boxed{\ooalign{$#1\phantom{+}\vphantom{#2}$\cr
\hss$#1{#2}\vphantom{+}$\hss}}}
\def\bplus{\mathbin{\mathpalette\bboxed+}}
\def\bminus{\mathbin{\mathpalette\bboxed-}}
\def\btimes{\mathbin{\mathpalette\bboxed\times}}
\def\bdiv{\mathbin{\mathpalette\bboxed\div}}
\def\bcirc{\mathbin{\mathpalette\bboxed\circ}}
答案2
您还可以使用 使符号按比例缩放下标和上标\mathpalette
。我还添加了尺寸检查,因此框至少与 + 号一样大。
\def\boxedopinner#1#2{%
\vcenter{%
\hbox{%
\kern0.4pt\vrule
\vtop{%
\vbox{%
\hrule
\kern 1pt
\setbox0=\hbox{$#1#2$}%
\setbox2=\hbox{$#1+$}%
\ifdim\wd0<\wd2 \dimen0=\wd2 \else\dimen0=\wd0 \fi
\ifdim\ht0<\ht2 \ht0=\ht2\fi
\ifdim\dp0<\dp2 \dp0=\dp2\fi
\hbox to\dimen0{\hss\box0\hss}%
\kern 1pt
\hrule
}%
}%
\vrule\kern0.4pt
}%
}%
}
\def\defineboxedsymbol#1#2#3{%
\def#1{#2{\mathpalette\boxedopinner#3}}%
}
\defineboxedsymbol\bplus\mathbin+
\defineboxedsymbol\bminus\mathbin-
\defineboxedsymbol\btimes\mathbin\times
\defineboxedsymbol\bdiv\mathbin\div
\defineboxedsymbol\bcirc\mathbin\circ
$a \bplus b + c_{d\bplus e+f}$
$a\bcirc b$
$a\bminus b\btimes c\bdiv d$
\bye
答案3
你可以尝试一下。
\setbox0\hbox{+}
\def\boxed#1{\hbox{\vrule\vtop{\vbox{\hrule\kern 1pt\hbox to%
\wd0{\hfil$#1\vphantom+$\hfil}}\kern 1pt\hrule}\vrule}}
\hss
可能比上面的 def 更好\hfil
,但我还不够专业,无法确定。此方法实际上定义了boxed
宏的宽度和最小高度,我可能更喜欢调用它opbox
而不是boxed
。