albatross
Albatross is a tool for finding fonts that contain a given (Unicode) glyph.
Albatross is a command line tool for finding fonts that contain a given (Unicode) glyph. It relies on Fontconfig, a library for configuring and customizing font access.
If you came here looking for a download option, please consider using your TeX distribution (the tool comes with TeX Live and MikTeX) to install Albatross. Alternatively, visit our CTAN page for the latest release.
Basic use
The tool is a typical command line application, so we need to invoke it by
typing albatross
in the terminal:
$ albatross
__ __ __
.---.-.| | |--.---.-.| |_.----.-----.-----.-----.
| _ || | _ | _ || _| _| _ |__ --|__ --|
|___._||__|_____|___._||____|__| |_____|_____|_____|
Usage: albatross [OPTIONS] glyphs...
Options:
-s, --show-styles Show available font styles
-d, --detailed Show a detailed font list
-a, --ansi-level [n|a16|a256|tc]
Set the default ANSI level
-b, --border-style [0|1|2|3|4|5|6]
Set the border style
-o, --or Look for each glyph separately
-t, --include-tex-fonts Include fonts from the TeX tree
-c, --clear-cache Clear the font cache
-V, --version Show the version and exit
-h, --help Show this message and exit
Provided that Albatross is properly available in the underlying operating system, we will get the help message listing all the available options and the tool usage.
Glyphs
Albatross takes a list of glyphs as input. Three formats are supported:
-
The glyph itself, e.g,
ß
(Eszett). Internally, the tool will convert it to the corresponding Unicode code point. -
The glyph as a Unicode code point in the hexadecimal notation, e.g,
0xDF
. The0x
prefix is mandatory. Note that the tool takes the value as case insensitive, e.g,0xDF
is equal to0xdf
(or any case combination thereof). -
The glyph as a Unicode code point using the multiset union notation, e.g,
U+DF
. TheU+
prefix is mandatory. Be mindful that this notation expects an uppercaseU
.
It is worth noting that the tool also provides proper grapheme support. According to this SO answer (reproduced verbatim):
A grapheme is a sequence of one or more code points that are displayed as a single, graphical unit that a reader recognizes as a single element of the writing system. For example, both
a
andä
are graphemes, but they may consist of multiple code points (e.g.ä
may be two code points, one for the base charactera
followed by one for the diaeresis; but there's also an alternative, legacy, single code point representing this grapheme). Some code points are never part of any grapheme (e.g. the zero-width non-joiner, or directional overrides).
Along these lines, in that same answer, we have a proper definition of a glyph is:
A glyph is an image, usually stored in a font (which is a collection of glyphs), used to represent graphemes or parts thereof. Fonts may compose multiple glyphs into a single representation, for example, if the above
ä
is a single code point, a font may choose to render that as two separate, spatially overlaid glyphs.
When providing a glyph, the tool will break it into multiple code points:
$ albatross y̆
Since y̆
is composed of two code points, the tool will query all fonts that
have both U+79
and U+306
.
When a list of glyphs is provided, the tool will take a conjunctive approach and
look for fonts that contain all elements in such list (default behaviour). Use
the -o
flag (or --or
for the long flag) to look for each glyph separately.
For instance:
-
Look for fonts that contain both
a
andb
:$ albatross a b
-
Look for fonts that contain
a
and fonts that containb
, separately:$ albatross --or a b
Output
Albatross prints the results as a table. The default behaviour is to just display the font names, e.g,
Unicode code point DF mapping to ß
┌─────────────────────────────────────────────────────────────────────────────┐
│ Font name │
├─────────────────────────────────────────────────────────────────────────────┤
│ 3270Medium Nerd Font │
├─────────────────────────────────────────────────────────────────────────────┤
│ 3270Medium Nerd Font Mono │
├─────────────────────────────────────────────────────────────────────────────┤
...
├─────────────────────────────────────────────────────────────────────────────┤
│ Zilla Slab,Zilla Slab Medium │
├─────────────────────────────────────────────────────────────────────────────┤
│ Zilla Slab,Zilla Slab SemiBold │
└─────────────────────────────────────────────────────────────────────────────┘
There is a -s
option (or --show-styles
for the long option) that includes
the styles available for each font, e.g,
Unicode code point DF mapping to ß
┌───────────────────────────────┬─────────────────────────────────────────────┐
│ Font name │ Available styles │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ 3270Medium Nerd Font │ Medium │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ 3270Medium Nerd Font Mono │ Medium │
├───────────────────────────────┼─────────────────────────────────────────────┤
...
├───────────────────────────────┼─────────────────────────────────────────────┤
│ Zilla Slab,Zilla Slab Medium │ Medium Italic, Italic, Medium, Regular │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ Zilla Slab,Zilla Slab │ SemiBold, Regular, SemiBold Italic, Italic │
│ SemiBold │ │
└───────────────────────────────┴─────────────────────────────────────────────┘
For even more details, including the font type and paths, there is the -d
option (or --detailed
for the long option), e.g,
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ 3270Medium Nerd Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /home/paulo/.local/share/fonts/NerdFonts/3270-Medium Nerd Font │
│ │ Complete.otf │
└──────────┴──────────────────────────────────────────────────────────────────┘
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ 3270Medium Nerd Font Mono │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /home/paulo/.local/share/fonts/NerdFonts/3270-Medium Nerd Font │
│ │ Complete Mono.otf │
└──────────┴──────────────────────────────────────────────────────────────────┘
...
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ Zilla Slab,Zilla Slab Medium │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-MediumItalic.otf │
│ │ ──────────────────────────────────────────────────────────────── │
│ │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-Medium.otf │
└──────────┴──────────────────────────────────────────────────────────────────┘
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ Zilla Slab,Zilla Slab SemiBold │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-SemiBold.otf │
│ │ ──────────────────────────────────────────────────────────────── │
│ │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-SemiBoldItalic.… │
└──────────┴──────────────────────────────────────────────────────────────────┘
For more verbosity, --detailed
can be combined with --show-styles
to
include all font details, e.g,
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ 3270Medium Nerd Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /home/paulo/.local/share/fonts/NerdFonts/3270-Medium Nerd Font │
│ │ Complete.otf │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Styles │ Medium │
└──────────┴──────────────────────────────────────────────────────────────────┘
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ 3270Medium Nerd Font Mono │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /home/paulo/.local/share/fonts/NerdFonts/3270-Medium Nerd Font │
│ │ Complete Mono.otf │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Styles │ Medium │
└──────────┴──────────────────────────────────────────────────────────────────┘
...
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ Zilla Slab,Zilla Slab Medium │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-MediumItalic.otf │
│ │ ──────────────────────────────────────────────────────────────── │
│ │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-Medium.otf │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Styles │ Medium Italic, Italic, Medium, Regular │
└──────────┴──────────────────────────────────────────────────────────────────┘
Unicode code point DF, font details, mapping to ß
┌──────────┬──────────────────────────────────────────────────────────────────┐
│ Name │ Zilla Slab,Zilla Slab SemiBold │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Type │ OpenType Font │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Files │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-SemiBold.otf │
│ │ ──────────────────────────────────────────────────────────────── │
│ │ /usr/share/fonts/mozilla-zilla-slab/ZillaSlab-SemiBoldItalic.… │
├──────────┼──────────────────────────────────────────────────────────────────┤
│ Styles │ SemiBold, Regular, SemiBold Italic, Italic │
└──────────┴──────────────────────────────────────────────────────────────────┘
Since the results can span several rows (the more common the glyph, the more
fonts will contain it), we strongly recommend using a pipeline and pass the
results to a terminal pager, e.g, the less
utility:
$ albatross ß | less
Coloured output
Albatross supports terminal colours by including the -a
option (or
--ansi-level
for the long option) followed by the corresponding colour
level. The following levels are available:
Level | Description |
---|---|
n | No colours at all (default) |
a16 | ANSI 16 colours |
a256 | ANSI 256 colours |
tc | Support for true colours |
Note that colours might mess the output when passed to a terminal pager. You
might need to either adjust the terminal pager accordingly (e.g, less -r
makes control characters to be displayed) or disable colours altogether
(which is the default behaviour).
Table styles
Albatross provides 7 table styles. Include the -b
option (or --border-style
for the long option) followed by the corresponding border style. The following
styles are available:
-
Style 0 (basically no borders):
Name: 3270Medium Nerd Font Styles: Medium ...
-
Style 1:
+-------------------------------+-----------------------------------------+ | Font name | Available styles | +-------------------------------+-----------------------------------------+ | 3270Medium Nerd Font | Medium | +-------------------------------+-----------------------------------------+ ...
-
Style 2:
╭─────────────────────────────────────────────────────────────────────────╮ │ Font name │ ├─────────────────────────────────────────────────────────────────────────┤ │ 3270Medium Nerd Font │ ├─────────────────────────────────────────────────────────────────────────┤ ...
-
Style 3:
Font name Available styles 3270Medium Nerd Font Medium ...
-
Style 4:
╔═══════════════════════════════╦═════════════════════════════════════════╗ ║ Font name ║ Available styles ║ ╠═══════════════════════════════╬═════════════════════════════════════════╣ ║ 3270Medium Nerd Font ║ Medium ║ ╠═══════════════════════════════╬═════════════════════════════════════════╣ ...
-
Style 5:
┌───────────────────────────────┬─────────────────────────────────────────┐ │ Font name │ Available styles │ ├───────────────────────────────┼─────────────────────────────────────────┤ │ 3270Medium Nerd Font │ Medium │ ├───────────────────────────────┼─────────────────────────────────────────┤ ...
-
Style 6:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Font name ┃ Available styles ┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ 3270Medium Nerd Font ┃ Medium ┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ...
These are the keys to be used as option values:
Key | Description |
---|---|
0 | Style 0 (no borders) |
1 | Style 1 (ASCII) |
2 | Style 2 (rounded corners) |
3 | Style 3 (blank) |
4 | Style 4 (double lines) |
5 | Style 5 (square corners, default) |
6 | Style 6 (heavy lines) |
TeX fonts
Albatross can include fonts from the TeX tree in the query via the t
option
(or --include-tex-fonts
for the long option). Please note that the font indexing
might take a while for the first time. For subsequent calls, the tool will use a
cache instead. To clear this cache, use the -c
option (or --clear-cache
for the
long option).
License
This application is licensed under the New BSD License. Please note that the New BSD License has been verified as a GPL-compatible free software license by the Free Software Foundation, and has been vetted as an open source license by the Open Source Initiative.
The team
Albatross is brought to you by the Island of TeX. If you want to support TeX development by a donation, the best way to do this is donating to the TeX Users Group.