我重新定义了\boxplus
和\boxminus
命令。但是由于某些原因,里面的 + 号\boxplus
太大,而里面的 - 号\boxminus
大小正确。我应该如何修改宏以使这两个符号大小正确?
请注意,我也在\boxdot
我的文档中使用,并且的框比的框\boxdot
小\boxplus
。
\documentclass{article}
\usepackage{amssymb,stmaryrd}
\makeatletter
\newcommand*{\b@xplus}[1][+]{\ooalign{%
$\m@th\vcenter{\hbox{$\m@th#1$}}$\cr%
\hidewidth$\m@th\boxempty$\hidewidth\cr}}
\renewcommand*{\boxplus}{\mathbin{\b@xplus}}
\renewcommand*{\boxminus}{\mathbin{\b@xplus[-]}}
\makeatother
\begin{document}
$a \boxplus b$ % incorrect size
$a \boxminus b$ % correct size
\end{document}
答案1
问题在于,加号超出了减号,而就 TeX 而言,两者的宽度相同。\boxempty
的符号stmaryrd
与两者的宽度相同。
您可以使用稍微小一点的加号来解决该问题,将其稍微增加一点,以便它仍然相对于公式轴很好地定位。
图片中的灰线表示公式轴(xcolor
仅用于此)。最后一行显示超调。
\documentclass{article}
\usepackage{amsmath,stmaryrd}
\usepackage{graphicx,xcolor}
\makeatletter
\newcommand{\reducedplus}{\mathpalette\reduced@plus\relax}
\newcommand{\reduced@plus}[2]{%
\sbox6{$\m@th#1+$}%
\sbox8{\scalebox{0.875}{\copy6}}%
\dimen@=\dimexpr(\wd6-\wd8)/3\relax
\raisebox{\dimen@}{\box8}%
}
\newcommand{\boxoperation}[2][\mathbin]{%
#1{\mathpalette\box@operation{#2}}%
}
\newcommand{\box@operation}[2]{%
\ooalign{$\m@th#1\boxempty$\cr\hidewidth$\m@th#1#2$\hidewidth\cr}%
}
\newcommand{\boxplus}{\boxoperation{\reducedplus}}
\newcommand{\boxminus}{\boxoperation{-}}
\begin{document}
\indent\rlap{\color{black!10}$\frac{\hspace{1cm}}{}$}%
$a\boxplus b\boxminus c$
\indent\rlap{\color{black!10}$\scriptstyle\frac{\hspace{1cm}}{}$}%
$\scriptstyle a\boxplus b\boxminus c$
\indent\rlap{\color{black!10}$\scriptscriptstyle\frac{\hspace{1cm}}{}$}%
$\scriptscriptstyle a\boxplus b\boxminus c$
\mbox{}%
{\ooalign{\textcolor{red}{$+$}\cr$-$\cr}}
{\ooalign{\textcolor{red}{$-$}\cr$+$\cr}}
{\ooalign{$+$\cr\textcolor{red}{$-$}\cr}}
\end{document}
另一方面,您可以更简单地使用提供的符号amssymb
,它本质上与 wipet 的答案相同,但更简单。
\documentclass{article}
\usepackage{amsmath,amssymb}
\let\amssymbboxplus\boxplus
\let\amssymbboxminus\boxminus
\renewcommand{\boxplus}{\mathbin{\mathop\amssymbboxplus}}
\renewcommand{\boxminus}{\mathbin{\mathop\amssymbboxminus}}
\begin{document}
$a+b-c$
$a\boxplus b\boxminus c$
\end{document}
答案2
正如我在评论中所说,您遇到了由其他人造成的两个错误。第一个错误出现在 CM 字体中,cmsy10 的减号形状小于 cmr10 的加号形状。第二个错误出现在 AMS 字体中,msam10 的符号 boxplus、boxminus 未居中于数学轴。如果您使用其他数学字体(例如 Unicode Latin Modern Math),则这两个错误都会得到纠正。
如果您坚持使用这些字体,那么您可以执行以下操作:
\mathchardef\xboxplus=\numexpr \boxplus-"2000\relax
\def\boxplus{\mathbin{\mathop{\xboxplus}}}
\mathchardef\xboxminus=\numexpr \boxminus-"2000\relax
\def\boxminus{\mathbin{\mathop{\xboxminus}}}
test: $a + b \boxplus c \boxminus d$
\boxplus
我从和的数学代码中减去“2000”\boxminus
以获得数学Ord字符(它们被声明为数学Bin)。我需要进行这种转换才能在以数学轴为中心的上下文中使用这些字符(附录G od TeXbook,第13段)。最后,我将和\mathop{Ord}
重新定义为数学Bin对象。\boxplus
\boxminus
如下面的代码和结果图所示,减法是必要的。
\mathchardef\xboxplus=\numexpr \boxplus-"2000\relax
\def\boxplusEgreg{\mathbin{\mathop{\boxplus}}}
\def\boxplusWipet{\mathbin{\mathop{\xboxplus}}}
$a + b \boxplusWipet c \boxplusEgreg d$