I’ve been playing with old-style search engine suggestions and the Noto fonts 
(which seem to be installed with TexLive) and have come up with a MWE with 
“challenging” UTF-8 and emojis… WDTY? Additional code to generate by org-mode 
is limited in size:

—— cut here ——
#+OPTIONS: num:nil toc:nil
#+LATEX_COMPILER: lualatex
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [12pt]

#+LATEX_HEADER: \directlua{luaotfload.add_fallback
#+LATEX_HEADER:   ("emojifallback",{ "NotoColorEmoji:mode=harf;"})
#+LATEX_HEADER: }
# Toggle setmainfont to see both Serif and Sans fonts in action
# +LATEX_HEADER: \setmainfont{Noto Serif}[RawFeature={fallback=emojifallback}]
#+LATEX_HEADER: \setmainfont{Noto Sans}[RawFeature={fallback=emojifallback}]
#+LATEX_HEADER: \setsansfont{Noto Sans}[RawFeature={fallback=emojifallback}]
#+LATEX_HEADER: \setmonofont{Noto Sans 
Mono}[RawFeature={fallback=emojifallback}]

#+LATEX_HEADER: \setlength\parindent{0pt}

#+TITLE: Minimal Emoji support with the Noto family

This is a minimal working example mixing fonts of the Noto font family to get
Emoji's onboard.

😄  minikube v1.15.1 on Ubuntu 20.04

✨  Automatically selected the docker driver

👍  Starting control plane node minikube in cluster minikube

🚜  Pulling base image ...

And a simple UTF-8 text showing a file directory:

#+BEGIN_verbatim
/test
  ├── file-a
  ├── file-b
  └── file-c
#+END_verbatim

Добрий день
Ähnlich wie Anno dazumal: Sagen's Paradeiser
Ñaca ñaca la cigala


—— cut here —— 

Contributions for scripts outside Latin/Cyrillic 

> El 13 abr 2025, a las 10:50, Pedro Andres Aranda Gutierrez 
> <paag...@gmail.com> escribió:
> 
> PS: Free* means the Free* _fonts_
> 
> On Sun, 13 Apr 2025 at 10:49, Pedro Andres Aranda Gutierrez 
> <paag...@gmail.com <mailto:paag...@gmail.com>> wrote:
> A bit more info
> 
> With lualatex, I get
> 
> luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: File not 
> found: 
> "/usr/lib/firefox/fonts/TwemojiMozilla.ttf"....texmf-dist/tex/luatex/luaotfload/luaotfload-fallback.lua:50:
>  attempt to inde
> x a nil value (local 'f').
> <to be read again> 
> relax 
> l.19 ... Serif}[RawFeature={fallback=seriffallback}]
> 
> It looks that the example is very config specific, because in my case
> 
>  ~ > ls /usr/lib/firefox/
> defaults  ubuntu-gnome.cfg
> 
> I have been able to get some results with lualatex and the Free* in macOS, 
> Debian, Ubuntu, Fedora and Windows. So what I'm after is a simple snippet 
> that will provide a configuration which only depends on what TexLive & 
> friends offer.
> 
> Nice discussion here :-)
> /PA
> 
> On Sun, 13 Apr 2025 at 09:57, Ihor Radchenko <yanta...@posteo.net 
> <mailto:yanta...@posteo.net>> wrote:
> Max Nikulin <maniku...@gmail.com <mailto:maniku...@gmail.com>> writes:
> 
> >> \directlua{
> >> luaotfload.add_fallback("global_fallback", {
> >>      "Noto Serif:mode=harf;",       % 1st: Broad Unicode coverage
> >>      "DejaVu Serif:mode=harf;",     % 2nd: Common Linux/Windows font
> >>      "FreeSerif:mode=harf;",        % 3rd: Common TeX Live font
> >>      "Arial Unicode MS:mode=harf;", % 4th: Windows fallback
> >>      "Code2000:mode=harf;"          % 5th: Historic Unicode font
> >> })
> >> }
> >
> > Has anybody tested that LuaTeX can efficiently cache that some 
> > characters are missed in earlier tried fonts? It looks like a rather low 
> > level feature, so without benchmarks I am unsure if it is reasonably 
> > optimized.
> 
> I think that our first priority should be getting fallbacks
> working. Trying to optimize it is going too far ahead.
> 
> > This list looks like a set of fallback variants for primary font, not as 
> > options to try when some characters are missed. Perhaps it may be 
> > reasonable to have predefined configuration for widely used fonts like 
> > Noto, freefonts, DejaVu, Liberation, CMU (Computer Modern Unicode), 
> > crosscore, ubuntu, etc., test what ones are installed (unless preferred 
> > family is configured by the user) and use just it.
> 
> Yup, that's what I thought. It looks like lualatex is able to scan
> available fonts and select first available, so we do not have to limit
> ourselves to a single font.
> 
> > The key point is to have a number of presets for complete set of fonts 
> > (serif, sans, mono, math) instead of simple alist. It would be 
> > unfortunate to render document with Noto Sans and FreeSerif just because 
> > Noto Serif is not installed.
> 
> +1
> 
> >> % ===== SCRIPT-SPECIFIC FALLBACKS =====
> >> % (Only activate for specific scripts)
> >> \newfontfamily\cjkfallback{Noto Sans CJK SC}[Script=Han]
> >> \newfontfamily\arabicfallback{Amiri}[Script=Arabic]
> >> \newfontfamily\symbolfallback{Segoe UI Symbol}[
> >>      Scale=MatchLowercase,
> >>      RawFeature={colr=yes} % For emoji support
> >> ]
> > [...]
> >> CJK: {\cjkfallback 汉语 日本語} \\
> >
> > I recall Juan Manuel posted examples with per-script font configuration 
> > for babel. The problem was babel language detection based on character 
> > script vs. explicit foreignlanguage commands.
> >
> > My experiments with hieroglyphs and emoji:
> >
> > For my earlier experiments with configuring fonts for LuaLaTeX see
> > Maxim Nikulin. Re: org-mode export to (latex) PDF. Sat, 17 Jul 2021 
> > 19:35:57 +0700.
> > https://list.orgmode.org/scuirf$m7o$1...@ciao.gmane.io 
> > <https://list.orgmode.org/scuirf$m7o$1...@ciao.gmane.io>
> 
> Would you mind consolidating example lualatex document that will
> compile? LLM example is not very useful (it does not compile) - it only
> illustrates that automatic font fallbacks are possible. Your example
> from the linked thread also does not compile.
> 
> -- 
> Ihor Radchenko // yantar92,
> Org mode maintainer,
> Learn more about Org mode at <https://orgmode.org/ <https://orgmode.org/>>.
> Support Org development at <https://liberapay.com/org-mode 
> <https://liberapay.com/org-mode>>,
> or support my work at <https://liberapay.com/yantar92 
> <https://liberapay.com/yantar92>>
> 
> 
> -- 
> Fragen sind nicht da, um beantwortet zu werden,
> Fragen sind da um gestellt zu werden
> Georg Kreisler
> 
> Sagen's Paradeiser, write BE!
> Year 1 of the New Koprocracy
> 
> 
> 
> -- 
> Fragen sind nicht da, um beantwortet zu werden,
> Fragen sind da um gestellt zu werden
> Georg Kreisler
> 
> Sagen's Paradeiser, write BE!
> Year 1 of the New Koprocracy
> 

Reply via email to