缺少字符 - setmainfont 和替代方案

缺少字符 - setmainfont 和替代方案

我们使用的字体Liberation Sans缺少许多 Unicode 字符。据我所知,DejaVu Sans有很多这样的字符。有没有办法在lualatex出现缺少字符的投诉时自动 (!) 切换字体?

{/usr/share/texmf/fonts/map/pdftex/updmap/pdftex.map}
Missing character: There is no ☎ (U+260E) in font LiberationSans:mode=node;scr
ipt=latn;language=dflt;+tlig;!

平均能量损失

\documentclass[a4paper,11pt,english]{article}
\usepackage{fontspec}
\usepackage[shorthands=off,bidi=basic]{babel}
\setmainfont{Liberation Sans}
%\setmainfont{DejaVu Sans}

\begin{document}
Kontakt: ☎️ 
\end{document}

因此主要思想是定义一个倒退当默认错过角色时。如果后备没有角色,那也没关系。但至少有一个级别会更好。

使用:LuaHBTeX, Version 1.12.0

答案1

感谢 Ulrike,我找到了以下工作示例

\documentclass[a4paper,11pt,english]{article}
\usepackage{fontspec}
\directlua{luaotfload.add_fallback
("emojifallback",
    { "DejaVu Sans:mode=harf;script=grek",
     "NotoColorEmoji:mode=harf"}
)}

\setmainfont{Liberation Sans}[RawFeature={fallback=emojifallback}]

\begin{document}
Kontakt: ☎️ » 

答案2

您可以声明某个特定字符为活动字符,这样您就可以指定每个单独符号所来自的字体,并且也可以在 XeTeX 或 PDFTeX 中使用。

\documentclass[a4paper,11pt,english]{article}
\tracinglostchars=2
\usepackage[shorthands=off,bidi=basic]{babel}
\usepackage{fontspec}
\usepackage{newunicodechar}

\setmainfont{Liberation Sans}

\newfontfamily\emojifont{Noto Color Emoji}[
  Scale=MatchUppercase,
  Renderer=HarfBuzz ]

\newunicodechar{^^^^260e}{{\emojifont\symbol{"260E}}} % ☎️ 

\begin{document}
Kontakt: ☎️ 
\end{document}

Noto 颜色表情符号示例

相关内容