我希望\odot
使用 TikZ 定义一个类似于的数学符号。因此,该符号应根据其上下文(例如内联数学、脚注、图表等)适当缩放。作为模板,我遵循这个相关问题。但是,它似乎并非在所有情况下都能正确缩放。此外,符号周围的间距也存在细微错误。
这是一个最小的工作示例:
\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz-cd}
\newlength{\oh}
\newcommand{\ostar}{\mathbin{\vcenter{\hbox{\text{\settoheight{\oh}{$\odot$}\tikz[baseline=.45\oh]{\draw[line width=.06\oh](0,0)circle[radius=.57\oh]node[overlay,yshift=-.025\oh]{\ensuremath{*}};}}}}}}
\begin{document}
\begin{align*}
f \odot g \\
f \ostar g \\
x^{f \odot g} \\
x^{f \ostar g} \\
\end{align*}
\vspace{-7ex}
\[\begin{tikzcd}[column sep=large,row sep=tiny]
\cdot & \cdot \\
\cdot & \cdot \\
\arrow["{f \odot g}"{description}, from=1-1, to=1-2]
\arrow["{f \ostar g}"{description}, from=2-1, to=2-2]
\end{tikzcd}\]
\end{document}
生成结果:
如图所示, 的大小\ostar
对于正常大小数学和交换图来说是正确的。但是,上标中的 太大(相对于\odot
),即使它应该按比例缩放\odot
(因为所有尺寸都是相对于\oh
)。此外,虽然在图像中有点难以看清,但在使用它的每个地方,周围的间距\ostar
都比 周围的间距小。\odot
我怀疑有一个简单的解决方案,但我还没能想出来。我该如何修复 的定义,\ostar
使其行为与 相同\odot
?
(请注意,我实际上想定义比\ostar
使用相同方法更复杂的符号,因此替代解决方案如下这个不足以满足我的目的。
答案1
您可以将符号放在 中savebox
,并使用scalerel
包使其与 大小相同\odot
。更改inner sep
节点的 将使 变*
大或变小。
\documentclass{article}
\usepackage{scalerel}
\usepackage{mathtools}
\usepackage{tikz-cd}
\newsavebox{\circstar}
\sbox{\circstar}{\kern.075em\tikz{\node[draw, circle, line width=.36pt, inner sep=.5pt]{$*$};}\kern.075em}
\newcommand{\ostar}{\mathbin{\scalerel*{\usebox{\circstar}}{\odot}}}
\begin{document}
\begin{align*}
f \odot g \\
f \ostar g \\
x^{f \odot g} \\
x^{f \ostar g} \\
\end{align*}
\vspace{-7ex}
\[\begin{tikzcd}[column sep=large,row sep=tiny]
\cdot & \cdot \\
\cdot & \cdot \\
\arrow["{f \odot g}"{description}, from=1-1, to=1-2]
\arrow["{f \ostar g}"{description}, from=2-1, to=2-2]
\end{tikzcd}\]
\end{document}