2

We use as main font Liberation Sans which misses many of the unicode characters. As far as I understand DejaVu Sans has many of them. Is there a way to automagical (!) switch the font in case lualatex complains about a missing character?

{/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;!

MWE

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

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

So the main idea is to define a fallback when the default misses the character. If the fallback doesn't have the character than that's fine. But at least one level would be great.

Using: LuaHBTeX, Version 1.12.0

LeO
  • 1,451
  • 2
    see the luaotfload documentation, or e.g. https://tex.stackexchange.com/a/572220/2388 – Ulrike Fischer Dec 28 '20 at 17:27
  • I posted a working sample as answer. Although I've copied the code from the docu I'm highly unclear why I need script=grek. Could you add a hint in the answer (as well as in the docu)? Thx. – LeO Dec 28 '20 at 19:24
  • you don't need script=grek, it is optional (in case you want to force a script). – Ulrike Fischer Dec 28 '20 at 19:30
  • Sorry, if I'm persistent. But why is it than mentioned in docu? (As sample fallback) – LeO Dec 28 '20 at 19:37

2 Answers2

4

Thx to Ulrike I found the following working sample

\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: ☎️ »
\end{document}

The luaotfload is automatically loaded with luaHBTeX. I have copied the sample from the documentation.

LeO
  • 1,451
1

You can declare a particular character active, which lets you specify what font you want each individual symbol to come from, and also works in XeTeX or 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 Color Emoji sample

Davislor
  • 44,045
  • Yeah, it meets my request but makes also clear that wording is sometimes tricky ;-) I have seen this approach already but have the major problem that I have to know the characters in advance. And when you cannot limit the input (e.g. since you auto generate tex) its getting tricky. – LeO Dec 29 '20 at 09:35
  • @LeO In XeTeX, the ucharclasses package lets you do it for entire Unicode blocks. – Davislor Dec 29 '20 at 13:03