为所有缺失字符定义后备字体

为所有缺失字符定义后备字体

我需要访问 Emoji 字符,用于我目前正在编写的一个小程序包。当标准字体中没有随机字符时,是否有办法在 XeLaTeX 中使用后备字体?

在我的 MWE 中,我尝试了与此处描述的类似的东西:https://tex.stackexchange.com/a/224585/205359

我的 MWE:

\documentclass{scrartcl}

\usepackage{fontspec}

\usepackage{newunicodechar}
\newfontfamily{\fallbackfont}{Segoe UI Emoji}
\DeclareTextFontCommand{\textfallback}{\fallbackfont}
\newcommand{\fallbackchar}[2][\textfallback]{%
    \newunicodechar{#2}{#1{#2}}%
}
\fallbackchar{

答案1

使用 expl3 的 Xelatex 和 Lualatex 解决方案。

该方法定义了“默认”字体:它将代码点块信息存储为 expl3 序列变量中的一组记录,通过充当查找表的 expl3 属性列表将这些块聚合到块集中,然后通过另一个属性列表将字体分配给该块集。

因此:任何不属于定义集合的字形都可以在后备中进行排版。


首先,定义集合。

首先,加载一些包含代码块信息的序列。为了更快地查找,2 位代码点范围进入 2 位列表,3 位进入 3 位列表,依此类推,直到找到所需的范围。记录格式为<start codepoint> <delimiter> <end codepoint> <delimiter> <block name>,其中<delimiter>;

\mfsloadaseq{list2digits}{
32;99;Basic Latin
}

\mfsloadaseq{list3digits}{
100;127;Basic Latin
,128;255;Latin-1 Supplement
,256;383;Latin Extended-A
,384;591;Latin Extended-B
,592;687;IPA Extensions
,688;767;Spacing Modifier Letters
,768;879;Combining Diacritical Marks
,880;999;Greek and Coptic
}

\mfsloadaseq{list4digits}{
1000;1023;Greek and Coptic
,1024;1279;Cyrillic
,1328;1423;Armenian
,2304;2431;Devanagari
,4256;4351;Georgian
,7312;7359;Georgian Extended
,7936;8063;Greek Extended
}

\mfsloadaseq{list5digits}{
11520;11567;Georgian Supplement
,43232;43263;Devanagari Extended
,66432;66463;Ugaritic
,77824;78895;Egyptian Hieroglyphs
}

\mfsloadaseq{list6digits}{
129280;129535;Supplemental Symbols and Pictographs
}

接下来,将块分组为块集:

\mfsloadaprop{block2blockset}{
Basic Latin=latin
,Latin-1 Supplement=latin
,Latin Extended-A=latin
,Latin Extended-B=latin
... etc
}

块集名称将成为字体切换命令的一部分。

接下来,将块集名称链接到其字体。

\mfsloadaprop{blockset2font}{
latin=Noto Serif
,greek=Alexander
,cyrillic=Charis SIL
,armenian=Noto Serif Armenian
,georgian=Noto Serif Georgian
,symbols=Segoe UI Emoji
,devanagari=Shobhika
,ugaritic=Noto Sans Ugaritic
,egyptian=Noto Sans Egyptian Hieroglyphs
}

接下来,一些字体需要fontspec设置字体选项。这些选项也进入属性列表,因为它们在块集名称和选项设置之间是一一对应的。为了绕过属性列表语法中的=and ,使用代替,和代替。当在字体命令中实际使用时,and会转换回and 。,key=value,...value;=-,;-=,

\mfsloadaprop{blockset2fontoptions}{
latin=Colour;blue-Scale;2
,devanagari=Script;Devanagari
,greek=Colour;violet-Scale;1.5
}

已定义一个命令\ftext,可以接受文本输入并按要求应用字体。该命令还可以接受一些(基本)格式开关(和空格),保护它们免受发生的字符串化过程的影响,然后将它们重新插入到输出中。

因此,根据定义,

\ftext{

相关内容