![为显示和内联模式编写特定版本的操作符](https://linux22.com/image/246500/%E4%B8%BA%E6%98%BE%E7%A4%BA%E5%92%8C%E5%86%85%E8%81%94%E6%A8%A1%E5%BC%8F%E7%BC%96%E5%86%99%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%AC%E7%9A%84%E6%93%8D%E4%BD%9C%E7%AC%A6.png)
我正忙着回答一个问题,通过构造一个新的数学运算符来回答这个问题,该运算符使用求和符号和一些放在顶部的 TikZ。我的答案目前可以找到这里。它的显示样式看起来(我认为)相当不错,但内联显示时太大。即使它自动将求和符号设置为内联大小,TikZ 的位置也会偏离。
有没有办法定义不同的代码,用于在显示数学环境中使用运算符以及在内联中使用运算符?或者,有没有办法检测您处于显示模式还是内联模式?
根据上述示例,我构建的代码如下:
\documentclass{minimal}
\usepackage{amsmath}
\usepackage{tikz}
% Modify the coordinate (-0.3ex,0) to adjust alignment, and (0.1) to adjust the size.
\DeclareMathOperator*{\osum}{\ensuremath{
\begin{tikzpicture}[baseline=(char.base), inner sep=0, outer sep=0]
\draw (-0.3ex,0) circle (0.1);
\node (char) at (0,0) {$\displaystyle\sum$}; % Want to define a second symbol for inline...
\end{tikzpicture}}%
}
\begin{document}
\[
G=\osum_a^b H
\]
And now in inline mode the equation $G=\osum_a^b H$ is obviously too big.
\end{document}
答案1
TeX 为这种情况提供了一个特殊的原语。但是,你必须为所有四数学风格:
\mathchoice{display}{text}{script}{scriptscript}
看TeX 按主题分类了解更多信息。
答案2
根据你在另一个问题中做出的定义,这里有一种方法:\mathchoice
有四个参数,说明在各种情况下要做什么;\mathop
说明如何考虑符号的间距,并以结尾\displaylimits
确保与相同的行为\sum
:
\documentclass{article}
\usepackage{tikz}
\newcommand{\osum}{
\mathop{
\mathchoice
{\buildosum{\displaystyle}{0.1}}
{\buildosum{\textstyle}{0.075}}
{\buildosum{\scriptstyle}{0.075}}
{\buildosum{\scriptscriptstyle}{0.075}}
}\displaylimits
}
\newcommand\buildosum[2]{%
\begin{tikzpicture}[baseline=(char.base), inner sep=0, outer sep=0]
\draw (-0.3ex,0) circle (#2);
\node (char) at (0,0) {$#1\sum$};
\end{tikzpicture}%
}
\begin{document}
\[\osum_a^b x\]
$\osum_a^b x$
\end{document}
如果您需要更多参数来调整较小样式中的圆圈位置,请相应地修改定义。使用两步方法使代码更易于维护。