\scriptstyle 位置微调

\scriptstyle 位置微调

我需要一个函数组合运算符。我发现\circ它太大了,所以我声明了一个数学运算符(在 amsart 文档类中)\scriptstyle\circ;大小正是我想要的,但现在位置似乎不对,它太低了。

在此处输入图片描述

有人知道一种简单的方法(没有太多的\raises 和boxes)来将符号放置得稍微高一点吗?

答案1

尝试定义新命令\smallcirc

\newcommand{\smallcirc}{\mathbin{\text{\raisebox{0.2ex}{\scalebox{0.6}{$\circ$}}}}}

梅威瑟:

\documentclass{amsart}
\usepackage{graphicx}
\newcommand{\smallcirc}{\mathbin{\text{\raisebox{0.2ex}{\scalebox{0.6}{$\circ$}}}}}

\begin{document}
\[
 f\circ\alpha \quad\text{vs}\quad f\smallcirc\alpha
\]

\[
 f \smallcirc \alpha_{f \smallcirc \alpha_{f \smallcirc \alpha}}
\]
\end{document}  

在此处输入图片描述

请注意,定义带有 a 的命令\scripstyle并不是一个好主意,因为如果在下标/上标中有该符号,其大小将与显示样式中的大小保持相同。

答案2

这是一个即使在下标/上标中也有效的答案:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\centeredcirc}[1]{\vcenter{\hbox{$#1\circ$}}}
\newcommand{\smallcirc}{\mathbin{\mathchoice{\centeredcirc\scriptstyle}{\centeredcirc\scriptstyle}{\centeredcirc\scriptscriptstyle}{\centeredcirc\scriptscriptstyle}}}

\begin{document}

    \[ f\circ\alpha \quad\text{vs}\quad f\smallcirc\alpha \]
    \[ g^{f\circ\alpha} \quad\text{vs}\quad g^{f\smallcirc\alpha} \]

\end{document}

在此处输入图片描述

答案3

下面的例子使用了 karlkoeller 的缩放方法回答并通过多种方式增强它:

  • 新的符号正确地垂直居中在数学轴周围。
  • 侧轴承已恢复(启发式)。
  • 缩放会减小线宽。可通过用估计的线宽额外描边符号来补偿缩放。

完整示例:

\documentclass{article}
\usepackage{amsmath}
\usepackage{color}
\usepackage{graphicx}
\usepackage{pdfrender}

\makeatletter
\newcommand*{\smallcirc}{%
  \mathbin{%
    \mathpalette\@smallcirc{}%
  }%
}
\newcommand*{\smallcircscale}{.6}
\newcommand*{\@smallcirc}[2]{%
  % #1: math style
  % #2: unused
  \sbox0{$#1\vcenter{}$}% \ht0: math axis
  \sbox2{$#1\circ\m@th$}%
  % Calculate symbol width with original side bearings
  % (in the hope, the symbol height is correct).
  % The radius is estimated as symbol height minus math axis
  % (\ht2 - \ht0).
  \dimen@=\dimexpr
    \smallcircscale\dimexpr2\ht2-2\ht0\relax
    + \wd2-2\ht2+2\ht0
  \relax
  % Estimated line thickness from symbol height
  \dimen2=.1\ht2
  % Calculate line width for rendering mode "Stroke".
  \dimen2=\dimexpr\dimen2 - \smallcircscale\dimen2\relax
  \raise\ht0\hbox to \dimen@{%
    \hfil
    \textpdfrender{
      TextRenderingMode=FillStroke,
      LineWidth=\dimen2,
    }{%
      \scalebox{\smallcircscale}{%
        \lower\ht0\hbox{%
          $#1\circ\m@th$%
        }%
      }%
    }%
    \hfil
  }%
}
\makeatother

\begin{document}
\begin{align*}
  \text{styles: }&
  f \smallcirc \alpha \quad
  \scriptstyle f \smallcirc \alpha \quad
  \scriptscriptstyle f \smallcirc \alpha
\\
  \text{{\fontfamily{lmvtt}\selectfont\textbackslash circ}: }&
  f \circ \alpha \quad
  \scriptstyle f \circ \alpha \quad
  \scriptscriptstyle f \circ \alpha
\\
  \text{axis: }&
  \sbox0{${-}{\smallcirc}{-}$}
  \rlap{\copy0}%
  \vcenter{%
    \hbox{%
      \textcolor{red}{%
        \vrule width\wd0 height .05pt depth .05pt\relax
      }%
    }%
  }
\end{align*}
\end{document}

结果

相关内容