基本原理

基本原理

基本原理

\TeX\LaTeX以创造(隐含的)目标而创建打印文档,主要是英文。在这种情况下,使用衬线字体作为默认字体是有意义的;特别是,使用数学字体的衬线字体是一个很好的默认设置。

语言限制很快通过引入(针对特定问题的)编码得到解决,这(或多或少)解决了字母语言的问题;但对于大字形集语言来说,这个问题就比较尴尬了。

同样,各种字体的使用也通过创建特别指定允许在 \LaTeX 中使用多种字体的软件包。

然而,\LaTeX越来越多地用于制作旨在展示使用而不是打印使用 ;在这种情况下,使用无衬线字体比使用衬线字体更受欢迎(我不知道这是对还是错)。同样,特定软件包(例如beamer)允许使用无衬线字体,至少用于文本;同样,各种软件包允许用无衬线字体(部分)替换衬线数学字体。

这种替换只是部分的:在我所知道的所有软件包中,一些符号仍然是从衬线字体中提取出来的:大分隔符、求和和积分运算符、各种运算符。问题是其中一些运算符和符号可怕地“发誓”这些软件包中使用的大多数都是“无数学”符号。

此外,引入支持 Unicode 的\TeX引擎以“正确(正交)的方式”解决了编码问题,从而可以更轻松地使用非 ASCII 语言;它们还引入了一系列非常有趣的新可能性。其中,Opentype“数学字体”(即 Opentype 字体,带有“MATH”表,其中(极其详细地)描述了可用的数学字形和重音符号、它们的间距、它们的校正以及可能的字距调整参数)的可用性大大简化了使用这些字体(同时大大复杂化了它们的创建)。

但是,尝试将各种“sans-math”包与\XeTeX或 一起使用时会出现各种问题\LuaLaTeX;此外,“衬线数学符号”仍然存在。

问题现状

我不知道有任何“完全 sans”的 Opentype 字体(即所有元素都设计为 sans 使用的字体)目前可在支持 Unicode 的引擎上使用,而无需使用各种“技巧”:

根据最近的评论,有 15 种可用的“Opentype 数学字体”:

  • 11 免费提供;
  • 1 可免费使用但已被废弃;
  • 3 商业。

全部其中大部分都是衬线字体;它们中的大多数直接从衬线字体中借用了一些“符号”。

根据“Opentype 数学字体”的定义,这些字体已经具有无衬线字母;但其他元素(手写体、fraktur、bbold、打字机字母)、数学符号和大符号)仍基于衬线。对于这些元素,差异可能很小,但其中一些元素会吸引读者的眼球……

鉴于制作“屏幕就绪”文档的重要性日益增加,并且假设目前对衬线字体的厌恶是正确的,显然需要至少一种无衬线设计的 Opentype 字体。目前尚不存在...

问题

您是否知道正在开发“Unicode sans math 字体”?

编辑,九个月后:

Krishna (GFS Neohellenic Math) 和 Henri Menke (Fira Math) 的答案现在为我们提供了两种基于 sans 的 Opentype 字体。可以通过重新输入 Henri Menke 为 Fira Math 给出的以下示例并使用 GFS Neohellenic Math 重新编译它来进行非常粗略的初步比较:

Henri Menke 的示例,使用 GFS Neohellenic Math 编写

这看起来可读性很好,没有大问题,不过有人注意到爱因斯坦场方程中最后一个“T”的顶部横线末端以及爱因斯坦-希尔伯特作用的首字母“S”的末端有“衬线状”附加物。这些附加物表达了一种风格选择,不会破坏字体的可读性及其整体风格。

所以我们现在使用基于 sans 的设计编写数学丰富的一致文档的可能解决方案。如果 GUST 坚持其创建 Déjà Vù Sans Math 的意图(正如 Ulrike Fisher 所回答的,并在 2015 年的 BachoTeX 海报上看到的那样),我们应该为这样的文档找到三个可能的基础。这应该有助于摆脱那些无数的幻灯片/网页,其中“现代主义”基于 sans 的设计可怕地使用 Latin Modern(或更糟的是,位图计算现代......)。

笔记 :我还没有(尚未)检查这些字体内容的完整性(顺便说一句,对于可用的 Math serif 字体也应该做同样的工作)。这可能是另一个问题的主题。有人愿意吗?

但最困难的问题是找到使用这些解决方案中的一种而不是其他解决方案的正确理由。有什么想法吗?

答案1

Fira Math:支持 Unicode 数学的无衬线字体

由曾向东(曾志伟) 在https://github.com/Stone-Zeng/FiraMath

在此处输入图片描述

答案2

GFS NeoHellenic 是最近推出的一款符合要求的字体。如果它没有进入 TL2017,那么它肯定会被纳入 TL2018。该字体已在 CTAN 上提供 这里

这可能是截至 2018 年 4 月唯一可用的 Unicode OpenType Sans Math 字体。

答案3

我不确定我是否理解了这个问题,因为“无衬线字体”一词有三种不同的含义。MAS 中的字母与字体(文件)的基本拉丁文和希腊文以及科普特文代码块所包含的内容无关。(因此,例如,衬线字体的“U+1D60B MATHEMATICAL SANS-SERIF ITALIC CAPITAL D”将始终为无衬线字体。)

如果目标是让幻灯片上的所有内容(文本和数学)都以无格式显示,那么数学字母数字符号 (MAS) unicode 块中的字母可以映射到无格式。

使用 15 个拉丁字母作为示例(使用 Asana Math 作为所有字母的数学字体,仅供演示),保持粗体和斜体:

映射之前:

原始未映射

映射后:

映射

蓝色的已经是 sans 了。

sans 文本(即基本拉丁语、希腊语和科普特语块)不一定需要由 mathfont(s) 提供。

MAS 定义了用于希腊字母的粗体和粗斜体 sans 字体,以及用于数字的直立 sans 字体。虽然听起来幻灯片可能需要一个直立希腊字母 sans 字体(在数学映射意义上),但也许吧。

平均能量损失

\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{unicode-math}

\setmathfont{Asana Math}[Colour=blue]
\setmathfont{Asana Math}[range={up/{latin,Latin}->sfup,it/{latin,Latin}->sfit,bb/{latin,Latin}->sfup,bbit/{latin,Latin}->bfsfit,scr/{latin,Latin}->sfup,cal/{latin,Latin}->sfup,bfcal/{latin,Latin}->bfsfup,frak/{latin,Latin}->sfup,tt/{latin,Latin}->sfup,bfup/{latin,Latin}->bfsfup,bfit/{latin,Latin}->bfsfit,bfscr/{latin,Latin}->bfsfup,bffrak/{latin,Latin}->bfsfup},Colour=red]
\setmainfont{Noto Sans}
%sfup,sfit,bfsfup,bfsfit



\begin{document}
\Large

$
\symup{A}
\symbfup{A}
\symit{A}
\symbfit{A}
\symsfup{A}
\symbfsfup{A}
\symsfit{A}
\symbfsfit{A}
\symtt{A}
\symbb{A}
\symbbit{A}
\symscr{A}
\symbfscr{A}
\symfrak{A}
\symbffrak{A}
$

\end{document}

编辑后添加:

有趣。你可以定义自己的数学符号(广义上) 以及它们的类型,unicode-math-table.tex然后在代码中引用它们。

伽马无

蓝色伽马是 Asana Math 映射到直立 sans Greek math(MAS 中没有,所以相当于无操作)。紫色直立和斜体西里尔字母 I 只是一个实验。忽略那些。绿色 sf Gammas 来自Noto SansRegular 和 Italic,来自“纯文本”范围(如果我可以这样称呼它的话)(希腊语和科普特语 unicode 块)。在等式中,红色是映射的 Asana Math 字体,蓝色是未映射的,黑色(分数线)大概来自 TeX 的内部某处。

因此可以推论,可以对希腊数学范围进行完整的映射。

非常强大的东西。

\UnicodeMathSymbol{"0438}{\mupcyrI                     }{\mathalpha}{CYRILLIC CAPITAL LETTER I}%
\UnicodeMathSymbol{"0438}{\mitcyrI                     }{\mathalpha}{CYRILLIC CAPITAL LETTER I}%

%==========================
\UnicodeMathSymbol{"0393}{\msfupGamma                     }{\mathalpha}{GREEK CAPITAL LETTER GAMMA}%
\UnicodeMathSymbol{"0393}{\msfitGamma                     }{\mathalpha}{GREEK CAPITAL LETTER GAMMA}%
\UnicodeMathSymbol{"03B3}{\msfupgamma                     }{\mathalpha}{GREEK SMALL LETTER GAMMA}%
\UnicodeMathSymbol{"03B3}{\msfitgamma                     }{\mathalpha}{GREEK SMALL LETTER GAMMA}%

平均能量损失

\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{unicode-math}


\setmathfont{Asana Math}[Colour=blue]
\setmathfont{Asana Math}[%
%       math-style=french,
        range={%
        up/{latin,Latin,num}->sfup,
        it/{latin,Latin,num}->sfit,
        bb/{latin,Latin,greek,Greek,num}->sfup,
        frak/{latin,Latin,greek,Greek,num}->sfup,
        tt/{latin,Latin,num}->sfup,
        bfup/{latin,Latin,greek,Greek,num}->bfsfup,
        bfit/{latin,Latin,greek,Greek,num}->bfsfit,
        bffrak/{latin,Latin,greek,Greek,num}->bfsfup,
%       bfcal/{latin,Latin}->bfsfup,
%       cal/{latin,Latin}->sfup,
%       bbit/{latin,Latin}->bfsfit,
        scr/{latin,Latin,num}->sfup,
        bfscr/{latin,Latin,num}->bfsfup,
        },
        Colour=red,
        ]
\setmainfont{Noto Sans}
\setmathfontface\mfcr{Noto Sans Regular}[Color=green]
\setmathfontface\mfci{Noto Sans Italic}[Color=green]
\setmathfontface\mfccr{Noto Serif Regular}[Color=violet]
\setmathfontface\mfcci{Noto Serif Italic}[Color=violet]

%sfup,sfit,bfsfup,bfsfit

\newcommand\mtextucl{A}
\newcommand\mtextlcl{a}
\newcommand\mtextucg{Γ}
\newcommand\mtextlcg{γ}
\newcommand\mtextd{3}
\newcommand\testmtext[1]{%
\Large
$
\symup{#1}
\symbfup{#1}
\symit{#1}
\symbfit{#1}
\symsfup{#1}
\symbfsfup{#1}
\symsfit{#1}
\symbfsfit{#1}
\symtt{#1}
\symbb{#1}
\symbbit{#1}
\symscr{#1}
\symbfscr{#1}
\symfrak{#1}
\symbffrak{#1}
$}


\newcommand\mtestrun{%
\testmtext{\mtextucl}\par
\testmtext{\mtextlcl}\par
\testmtext{\mtextucg}\par
\testmtext{\mtextlcg}\par
\testmtext{\mtextd}\par
}

\begin{document}

\mtestrun

$\upGamma \itGamma \upgamma \itgamma$

$\mupGamma \mupgamma {\mfccr\mupcyrI} {\mfcci\mitcyrI} $

$\mfcr{\msfupGamma  \msfupgamma} \mfci{\msfitGamma \msfitgamma}$ 

$\mfcr{\msfupGamma}^2 = \frac{f(x)}{\mfci{\msfitgamma}^{\mfci{\msfitgamma}}}  $

\end{document}

答案4

这并不是我们想要的答案,但是:STIX 字体有大量的罗马和希腊无衬线字形,包括私人使用区域中的无衬线希腊字形。这个系列足够了,Michael Sharpe 制作了newtxsf 数学使用 STIX 中的字形的包。虽然该包是面向 pdflatex 的(我还没有在 LuaLatex 下测试过它),但它似乎证明了使用 STIX 2 提取完全 unicode 无衬线数学字体的可能性。newtxsf 文档文件中的示例看起来相当不错。

事实上,获取 STIX 私有使用字母表所需的许多钩子已经在 unicode-math dtx 文件中了,所以我认为有一个更长远的计划,即使用类似“stixsf”的命令轻松访问这些数学字母表。

因此,看起来 STIX 2 中存在 unicode-math sans 字体,但需要一些额外的开发才能揭示。

相关内容