我想将一个数学符号叠加在另一个数学符号上——不是叠加,而是真正地重叠。用老式打字机的语言来说(!):输入一个字符,向后移动一个字符,然后在同一位置重新输入另一个字符。以下
\subseteq + \circ 作为单个符号(“开子集”)
我想出了以下最小工作示例:
\documentclass{amsart}
\begin{document}
$
\mathrel{\ooalign{\hss\circ\hss\cr\times}}
$
\end{document}
符号按我想要的方式叠加,但我也收到重复的错误消息
Missing $ inserted.
我很困惑...非常感谢您的帮助和评论!
(注意:上面的例子只是为了展示我想要做的事情;我知道我可以通过其他方式获得这个特定的符号组合)
答案1
\ooalign
\halign
是基于\hbox
让你退出数学模式,这样你就可以使用
\documentclass{amsart}
\begin{document}
$
\mathrel{\ooalign{\hss$\circ$\hss\cr$\times$}}
$
\end{document}
尽管通常你会使用\mathchoice
构造来适应上标等。
\documentclass{amsart}
\newcommand\zza{\mathrel{\ooalign{\hss$\circ$\hss\cr$\times$}}}
\newcommand\zzb{\mathrel{\mathpalette\zzbb{}}}
\newcommand\zzbb[1]{\ooalign{\hss$#1\circ$\hss\cr$#1\times$}}
\begin{document}
$
1 \zza -2 + x^{1 \zza 2}
$
$
3 \zzb -4 + x^{3 \zzb 4}
$
\end{document}
答案2
如果你查看链接答案中的代码,你会看到它\subseteq
被符号包围$
:
\newcommand{\opncls}[2]{%
\ooalign{$#1\subseteq$\cr
\hidewidth\raisefix{#1}\hbox{$#1#2\mkern.5mu$}\cr}}
这些是必要的,因为的内容\ooalign
是在文本模式下排版的。
您的符号可能应该是\mathbin
,因为它由两个二进制运算符号组成(链接答案的符号而是二元关系)。
此外,该答案跳过了将来某一天我会提到的一些更细节的方面。
因此你应该这样做
\makeatletter
\newcommand{\circtimes}{\mathbin{\vphantom{\times}\mathpalette\circtimes@\relax}}
\newcommand{\circtimes@}[2]{%
\ooalign{$\m@th#1\times$\cr\hidewidth$\m@th#1\circ$\hidewidth\cr}%
}
\makeatother
完整示例:
\documentclass{article}
\usepackage{amsmath} % not really required for this example
\makeatletter
\newcommand{\circtimes}{\mathbin{\vphantom{\times}\mathpalette\circtimes@\relax}}
\newcommand{\circtimes@}[2]{%
\ooalign{$\m@th#1\times$\cr\hidewidth$\m@th#1\circ$\hidewidth\cr}%
}
\makeatother
\begin{document}
\begin{gather*}
A \circtimes B^{\circtimes} \\
A \times B^{times} % for comparison
\end{gather*}
\end{document}
\vphantom{\times}
对于获取正确的边界框是必要的。\m@th
有必要抵消参数可能出现的正值\mathsurround
。