在数学模式下正确缩放和间隔 TikZ 符号

在数学模式下正确缩放和间隔 TikZ 符号

我希望\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 在各种上下文中

如图所示, 的大小\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}

相关内容