Section 40.2 Processing with xelatex
TrueType fonts (TTF,
*.ttf
files) have been improved upon by the creation of OpenType fonts (OTF, *.otf
files). The main difference is that OTF fonts have a variety of features which can be selected or not. It is also easier to directly select a particular glyph (realization of a character) by specifying its numerical code point as a Unicode character. For the remainder, we will reference OTF fonts only, but nearly everything applies equally well to TTF fonts.The main difference with
xelatex
and OTF fonts is that xelatex
expects the font files to be part of the system software and are managed by the operating system and its tools. So, for example, in the example above installing the iwona
package will place files into your texmf tree, where they remain unknown to your operating system. So you will need to learn how to use your operating system to locate and install OTF files (or make them known to your operating system). With luck, popular fonts may be easy to install using your system’s package manager.So installing fonts into a system is a bit of a hurdle, and as a style writer, you are reliant on authors who use your style to understand this requirement.
Locating an OTF font.
Since I have the LaTeX
iwona
package, I can expect the OTF version of the font to be somewhere. I know I have the LaTeX package by using a TeXLive tool to search for the style file.kpsewhich iwona.sty
will return the full path to that file.
On my Linux system, with TeXLive installed via a Debian/Ubuntu package, I can locate the main OTF file for the Iwona font by exploring the relevant directories (
fonts/opentype
looks promising), or I can use the system find
utility to search for filenames with iwona
or Iwona
in the name. There it is:/usr/share/texlive/texmf-dist/fonts/opentype/nowacki/iwona/Iwona-Regular.otf
You can simultaneously determine if you have a font, and if it is known to your system with the
fc-list
command from the fontconfig
utility. The produces a lot of output, with one line per file, but it includes file names and the human-readable name of each font. You can pipe the output through grep
to find what you are looking for, for examplefc-list | grep "Latin Modern"
Making an OTF font known to the system.
On my Linux system, I need to copy this file (and its companions) into the system directory
/usr/local/share/fonts
and reboot, or rebuild the font cache with
fc-cache -f -v
Finally, I can check that the font is known to the system with
fc-list
On a Mac, we have several reports for how to do this.
- Mitch Keller reports on 2019-01-02 that “I opened the directory on my hard drive containing the OTF file, double clicked on the font (opens the macOS application Font Book, which comes with the OS), and then clicked the
Install Font
button.” - Karl-Dieter Crisman reports on 2019-07-01 that “I was able to use some fonts already existing in TeXLive with a symbolic link to the Font Book, as suggested at Ask Different 3 :
ln -s /usr/local/texlive/2018/texmf-dist/fonts/opentype/public/lm/ '/Library/Fonts/Latin Modern'
where 2018 indicates when I updated my TeXLive distribution.”
Information about an OTF font.
To learn more about this particular font TeXLive provides an executable,
otfinfo
, which I can use as (omitting the long directory path here for clarity)otfinfo -i Iwona-Regular.otf
The first part of the output is
Family: Iwona Subfamily: Regular Full name: Iwona-Regular PostScript name: Iwona-Regular
The critical piece of information here is the font’s name:
Iwona-Regular
. I can also learn which OpenType features are available$ otfinfo -f Iwona-Regular.otf aalt Access All Alternates c2sc Small Capitals From Capitals cpsp Capital Spacing dlig Discretionary Ligatures dnom Denominators frac Fractions hist Historical Forms kern Kerning liga Standard Ligatures lnum Lining Figures numr Numerators onum Oldstyle Figures ordn Ordinals pnum Proportional Figures sinf Scientific Inferiors smcp Small Capitals ss02 Stylistic Set 2 sups Superscript tnum Tabular Figures zero Slashed Zero
This will all be useful shortly.
Using an OTF font with xelatex
.
Depending on the package, now it can be as simple as simply including
\usepackage{}
in your preamble and the font can be used with different weights and shapes, and certain features are enabled. However, sometimes you want more control, or you want to use more than one font in a document. Now the fontspec
package is your tool of choice.The simplest example of using
fontspec
would be to recall the font name from above, and in your preamble use\setmainfont{Iwona-Regular}
This font name has the hyphen in lieu of a space, but names with spaces are just fine. An optional argument will let you customize the use of the font, such as turning on some of the features. Read the
fontspec
documentation for all the finer points. Hopefully this has given you a start.Note that
fontspec
has a Path=
option. A tempting shortcut is to just point to the *.otf file in your texmf
tree. But as a style writer, this is a really bad idea, since other authors who use your style may have their font files in a different location. Better to employ the font by name and require authors to understand (or learn) their system software.Create a LaTeX file (from scratch) containing some Myanmar (Burmese) characters. The Kermit Project UTF-* Sampler 4 is a great source for these sorts of experiments. The Noto font is a project to make a huge collection of harmonious fonts for much of the world’s languages. Use what you have learned here to render your sample using a Noto font via both
pdflatex
and xelatex
. Extra credit if you can explain the name Noto.Plans, as of 2019-11-09.
We have experimental code in place to allow a style writer to place font information into the LaTeX preamble in the right place. We are adding font-changing commands into other configurations in the preamble, so that pieces of a document (e.g. the page header) will automatically use a particular font easily.
We have long been using the LaTeX
polyglossia
package to manage multiple languages in one document, and will continue to do so, perhaps. This package relies heavily on fontspec
. We intend to hide the details of polyglossia
from authors and from style writers, relying on just the specification of @xml:lang
attributes to control font changes.You have attempted of activities on this page.
apple.stackexchange.com/a/225824/189102
kermitproject.org/utf8.html