当主字体缺少特殊字符时,如何让 babel 使用后备字体?

当主字体缺少特殊字符时,如何让 babel 使用后备字体?

有时我的文本中会出现主字体中没有的字符,例如汉字或表情符号等,我不想在文本中不断使用各种命令来修改它以更改字体。

我知道这可以通过改变语言来实现,但是当主字体中没有某个字符时,我希望 LuaLateX 本身检查字体列表并使用这些字体中的字符。

当我看到关于在文本中使用表情符号的答案时,我有了这个想法: 在 LuaLaTeX 中用字体代替表情符号

是否可以将这样的算法用于 LuaLaTeX 和带有 directlua 的 babel 包?


\documentclass{article}
\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}
\babelfont{rm}{Amiri}
%%how force latex to use another font if an special charchter is not in Amiri font?
\begin{document}
  سلام\\
  hello\\
  

答案1

您可以将提供的后备扩展为多种字体并正常传递。

\documentclass{article}

\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}

\directlua {
  luaotfload.add_fallback("myfallback", {
    "Noto Sans CJK SC:mode=harf;",
    "Noto Color Emoji:mode=harf;",
  })
}

\babelfont{rm}[RawFeature={fallback=myfallback}]{Amiri}

\begin{document}
سلام\\
hello\\

相关内容