评论

评论

我想创建以下形状的积分unicode-math 包符号列表

在此处输入图片描述

不久前,我创建了自己的包来定义一些符号/快捷方式,我想重新创建这些符号(不是简单地从 unicode-math 导入它们,因为我希望它们与我用于数学的 MinionPro 字体相匹配,并且因为我希望积分是直立的(我在我的包中定义为\rint)并创建了 MinionPro 中还没有的数学符号,我不想重新做我以前的所有工作)。

有一个问题这里要求类似的东西,但它只是在积分上施加一个符号。换句话说,积分贯穿符号并且重叠。我已经知道如何做到这一点,但正如你所看到的,我想要的积分在这里停止在输入点符号的地方(即它不与中间的任何符号相交)。

MinionPro(具体来说,MnSymbolF1)已经在显示的最后一个积分中间有了符号,但我也不确定中间两个积分是否使用不同的符号,或者只是以某种方式移动/调整该符号的大小。MnSymbolF1也有一个符号喜欢第一个积分中使用的那个,但我猜它被移动/翻转了,并且可能以某种方式调整了大小。

因此,我怎样才能创造我自己能做到这些符号以一种与 LuaTeX(或者至少是 XeTeX)兼容的方式吗?

答案1

评论

这是使用 TikZ 的解决方案,但要小心!

  • 所有长度均通过手动微调进行调整,如果更改字体,则必须重新调整一切
  • 您不能\int_0^1在此解决方案中使用正常限制(如),但您可以将限制作为可选参数传递,请参阅 MWE。

执行

\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage[minionint,mathlf]{MinionPro}
\usepackage{tikz}
\tikzset{
  dot/.style = {draw,fill,circle,inner sep=\pgflinewidth}
}
\makeatletter
\newcommand\rppolint[1][]{\mathpalette\@rppolint{#1}}
\newcommand\@rppolint[2]{
  \mathop{
    \tikz[baseline=(int.base),every node/.style={inner sep=0pt,outer sep=0pt}]{
      \node (int) at (0,0) {%
        \setbox0=\hbox{$#1\int$}%
        \hbox to \wd0{$#1\int#2$\hss}
      };
      \fill[white] (-2.5pt+.5\pgflinewidth,-2.5pt+.5\pgflinewidth) rectangle (2.5pt-.5\pgflinewidth,2.5pt-.5\pgflinewidth);
      \draw (0,2.5pt) -| (2.5pt,-2.5pt) -- (-0.8pt,-2.5pt);
      \node[dot] at (0,0) {};
    }
  }\nolimits
}
\newcommand\scpolint[1][]{\mathpalette\@scpolint{#1}}
\newcommand\@scpolint[2]{
  \mathop{
    \tikz[baseline=(int.base),every node/.style={inner sep=0pt,outer sep=0pt}]{
      \node (int) at (0,0) {%
        \setbox0=\hbox{$#1\int$}%
        \hbox to \wd0{$#1\int#2$\hss}
      };
      \fill[white] (0,0) circle (2.5pt-.5\pgflinewidth);
      \draw (85:2.5pt) arc (85:-110:2.5pt);
      \node[dot] at (0,0) {};
    }
  }\nolimits
}
\newcommand\npolint[1][]{\mathpalette\@npolint{#1}}
\newcommand\@npolint[2]{
  \mathop{
    \tikz[baseline=(int.base),every node/.style={inner sep=0pt,outer sep=0pt}]{
      \node (int) at (0,0) {%
        \setbox0=\hbox{$#1\int$}%
        \hbox to \wd0{$#1\int#2$\hss}
      };
      \begin{scope}[shift={(1.1pt,0)}]
        \fill[white] (0,0) circle (2.5pt-.5\pgflinewidth);
        \draw (110:2.5pt) arc (110:-130:2.5pt);
        \node[dot] at (0,0) {};
      \end{scope}
    }
  }\nolimits
}
\newcommand\pointint[1][]{\mathpalette\@pointint{#1}}
\newcommand\@pointint[2]{
  \mathop{
    \tikz[baseline=(int.base),every node/.style={inner sep=0pt,outer sep=0pt}]{
      \node (int) at (0,0) {%
        \setbox0=\hbox{$#1\int$}%
        \hbox to \wd0{$#1\int#2$\hss}
      };
      \filldraw[fill=white] (0,0) circle (2.5pt-.5\pgflinewidth);
      \node[dot] at (0,0) {};
    }
  }\nolimits
}
\begin{document}
$
\displaystyle \rppolint[_0^1]
\textstyle    \rppolint[_0^1]
\displaystyle \scpolint[_0^1]
\textstyle    \scpolint[_0^1]
\displaystyle \npolint[_0^1]
\textstyle    \npolint[_0^1]
\displaystyle \pointint[_0^1]
\textstyle    \pointint[_0^1]
$
\end{document}

在此处输入图片描述

相关内容