为显示和内联模式编写特定版本的操作符

为显示和内联模式编写特定版本的操作符

我正忙着回答一个问题,通过构造一个新的数学运算符来回答这个问题,该运算符使用求和符号和一些放在顶部的 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}

在此处输入图片描述

如果您需要更多参数来调整较小样式中的圆圈位置,请相应地修改定义。使用两步方法使代码更易于维护。

相关内容