我需要一个函数组合运算符。我发现\circ
它太大了,所以我声明了一个数学运算符(在 amsart 文档类中)\scriptstyle\circ
;大小正是我想要的,但现在位置似乎不对,它太低了。
有人知道一种简单的方法(没有太多的\raise
s 和box
es)来将符号放置得稍微高一点吗?
答案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}