如何获得无衬线字体的 \sanssum 和 \sansprod?

如何获得无衬线字体的 \sanssum 和 \sansprod?

我如何\sanssum获得\sansprod无衬线字体字体表示与衬线字体不同的含义\sum\prod希望他们

  1. \sum采取与\prod大型经营者类似的行为;
  2. \sum与具有与 相同的结构和比例\prod
  3. 具有相同的线宽(可能更大,但应该合适,因为\sum\sanssum将出现在同一个地方,否则将导致视觉冲突) 和行首的圆形端点为\bigcap\bigcup在此处输入图片描述 据我所知,\varsum在包装\varprod中可以找到fdsymbol以下无衬线字体: 在此处输入图片描述 但它们不满足上述条件2和3。欢迎任何帮助!

答案1

这里有一个解决方案pict2e。当然,可以随意更改参数。

\documentclass{article}

\usepackage{amsmath}% for \slimits@ and scalable fraction rule width
\usepackage{pict2e}

\makeatletter

\newcommand*{\sanssum}{\DOTSB\mathop{\mathpalette{\sans@op\sum{0.9}}\sans@sum}\slimits@}
\newcommand*{\sansprod}{\DOTSB\mathop{\mathpalette{\sans@op\prod{0.8}}\sans@prod}\slimits@}

\newcommand*{\sans@op}[4]{%
   \sbox0{\m@th$\m@th#3#1$}%
   \unitlength\ht0
   \advance\unitlength\dp0
   \vcenter{%
      \hbox{%
         \begin{picture}(#2,1)
            \linethickness{%
               \ifx#3\displaystyle2\fontdimen8\textfont\else
               \ifx#3\textstyle1.7\fontdimen8\textfont\else
               \ifx#3\scriptstyle1.6\fontdimen8\scriptfont\else
               1.6\fontdimen8\scriptscriptfont\fi\fi\fi 3}
            \roundcap
            \roundjoin
            #4
         \end{picture}%
      }%
   }%
}

\newcommand*{\sans@sum}{%
   \polyline(0.83,0.07)(0.08,0.07)(0.45,0.5)(0.08,0.93)(0.83,0.93)%
}
\newcommand*{\sans@prod}{%
   \put(0.05,0.93){\line(1,0){0.7}}%
   \put(0.19,0.07){\line(0,1){0.86}}%
   \put(0.61,0.07){\line(0,1){0.86}}%
}

\makeatother

\begin{document}

\begin{minipage}{.3\linewidth}
\begin{gather*}
                   \sum_{i=1}^n a_i \bigcup \sanssum_{i=1}^n a_i \\
\textstyle         \sum_{i=1}^n a_i \bigcup \sanssum_{i=1}^n a_i \\
\scriptstyle       \sum_{i=1}^n a_i \bigcup \sanssum_{i=1}^n a_i \\
\scriptscriptstyle \sum_{i=1}^n a_i \bigcup \sanssum_{i=1}^n a_i
\end{gather*}
\end{minipage}
\begin{minipage}{.3\linewidth}
\begin{gather*}
                   \prod_{i=1}^n a_i \bigcup \sansprod_{i=1}^n a_i \\
\textstyle         \prod_{i=1}^n a_i \bigcup \sansprod_{i=1}^n a_i \\
\scriptstyle       \prod_{i=1}^n a_i \bigcup \sansprod_{i=1}^n a_i \\
\scriptscriptstyle \prod_{i=1}^n a_i \bigcup \sansprod_{i=1}^n a_i
\end{gather*}
\end{minipage}

\end{document}

在此处输入图片描述

答案2

要使用 将所有\sum\prod符号更改为无衬线字体unicode-math,请使用 加载无衬线 OpenType 数学字体range={\sum,\prod}。Kp 字体是同系列中少数具有无衬线数学字体的字体之一,因此我将它们用于此 MWE。

\documentclass{article}
\usepackage{unicode-math}

\defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX }
\setmainfont{TeX Gyre Pagella}[Scale=1.0]
\setmathfont{KpMath-Regular.otf}
\setmathfont{KpMath-Sans.otf}[range={\sum,\prod}]

\begin{document}
\[ \sum_{i=0}^{N} \prod_{j=1}^{M} ij
\]
\end{document}

KPFonts 示例

但是,您可能想在同一文档中使用\sum\sanssum(出于某些我不明白的原因)。这可以通过定义不同的数学版本来实现。对于这个 MWE,我选择了不同的默认数学字体,它\prod与 有更明显的不同\sansprod

\documentclass{article}
\usepackage{unicode-math}

\defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX }
\setmainfont{TeX Gyre Pagella}[Scale=1.0]
\setmathfont{TeX Gyre pagella Math}
\setmathfont{KpMath-Bold.otf}[version=bold]
\setmathfont{KpMath-Sans.otf}[version=sans]

% Based on the definition of \boldsymbol in amsbsy.sty:
\makeatletter
\DeclareRobustCommand{\sanssymbol}[1]{%
  \begingroup
  \let\@nomath\@gobble \mathversion{sans}%
  \math@atom{#1}{%
  \mathchoice%
    {\hbox{$\m@th\displaystyle#1$}}%
    {\hbox{$\m@th\textstyle#1$}}%
    {\hbox{$\m@th\scriptstyle#1$}}%
    {\hbox{$\m@th\scriptscriptstyle#1$}}}%
  \endgroup}
\makeatother

\newcommand\sanssum{\mathop{\sanssymbol{\sum}}}
\newcommand\sansprod{\mathop{\sanssymbol{\prod}}}

\begin{document}
\[ \sum_{i=0}^{N} \prod_{j=1}^{M} ij \qquad
   \sanssum_{i=0}^{N} \sansprod_{j=1}^{M} ij
\]
\end{document}

TeX Gyre Pagella Math / Kp Math Sans 示例

一个可能更简单的替代方案是加载无衬线数学字体。如果自动缩放不能满足您的要求,\setmathfontface您可以调整数学字体的。Scale=

使用 PDFLaTeX 中的传统 8 位字体编码,您可以选择无衬线数学字体,用 加载它\DeclareSymbolFont,查找该字体中的\sum和的插槽\prod,然后用 声明\sanssum\sansprod符号\DeclareMathSymbol。不幸的是,几乎每个传统的 LaTeX 数学字体都有不同的编码。

相关内容