Progress of fontspec and unicode-math Will Robertson July 22, 2018 - - PowerPoint PPT Presentation

progress of fontspec and unicode math
SMART_READER_LITE
LIVE PREVIEW

Progress of fontspec and unicode-math Will Robertson July 22, 2018 - - PowerPoint PPT Presentation

1/52 Progress of fontspec and unicode-math Will Robertson July 22, 2018 2/52 Setting the scene 2/52 Setting the scene 3/52 How long has it been?? [XeTeX] Package for font loading Will Robertson will at guerilla.net.au Fri Oct 15


slide-1
SLIDE 1 1/52

Progress of fontspec and unicode-math

Will Robertson July 22, 2018

slide-2
SLIDE 2 2/52

Setting the scene

slide-3
SLIDE 3 2/52

Setting the scene

slide-4
SLIDE 4 3/52

How long has it been??

[XeTeX] Package for font loading Will Robertson will at guerilla.net.au Fri Oct 15 12:04:24 CEST 2004 Hi all I've got a first release ready of a package for XeLaTeX that allows dynamic font loading, supporting all of the rich font features in AAT. It doesn't yet support OpenType, but that's coming. It allows you to use a commands like \typespec[NumberCase=OldStyle, NumberSpacing=Monospaced]{Hoefler Text}

  • r

\typespec[Variant=5]{Zapfino} to select a very broad selection of fonts. It's only new, so it will definitely be improved!

slide-5
SLIDE 5 4/52

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-6
SLIDE 6 5/52

Introduction

Evolution

  • L

AT

EX was my introduction to software engineering — scarily enough

  • fontspec and unicode-math were initially released pre-expl3
  • expl3 was needed to advance them beyond crude

data-structures and algorithms

  • Their programming styles evolved with expl3
  • Has taken quite some time to become ‘respectable’ !
slide-7
SLIDE 7 6/52

Introduction

To discuss

  • fontspec – selecting fonts
  • unicode-math – learning from my mistakes in best

practices for T EX software development

slide-8
SLIDE 8 7/52

unicode-math – modern expl3 package development

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-9
SLIDE 9 8/52

unicode-math – modern expl3 package development

(Live demo to re-introduce the package.)

slide-10
SLIDE 10 9/52

unicode-math – modern expl3 package development Code structure

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-11
SLIDE 11 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-12
SLIDE 12 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-13
SLIDE 13 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-14
SLIDE 14 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-15
SLIDE 15 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-16
SLIDE 16 10/52

unicode-math – modern expl3 package development Code structure

  • Once upon a time: monolithic dtx files
  • Now: (thanks Joseph!)
  • ⟨pkg⟩.dtx: provide metadata
  • ⟨pkg⟩-code-⟨module⟩.dtx
  • ⟨pkg⟩.ins: the standard Docstrip driver
  • ⟨pkg⟩-code.ltx: typeset code implementation
  • ⟨pkg⟩.ltx: typeset user documentation
  • ⟨pkg⟩-doc-⟨chapter⟩.tex
slide-17
SLIDE 17 11/52

unicode-math – modern expl3 package development CHANGES file

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-18
SLIDE 18 12/52

unicode-math – modern expl3 package development CHANGES file

CHANGE HISTORY ============== ## v0.8m () * Restore behaviour of legacy syntax `x_\mathrm{x}` (i.e., with no braces). While strictly ‘incorrectly’, this usage is widely used. ## v0.8l (2018/02/02) * Issue an error message if `\setmathfont{...}[range=...]` is used first; a `range` declaration inherently implies a subset, so a ‘main’ math font needs to be set up first. * Fix issue when nesting `\mathXX` and `\symZZ` commands. (#356, #435, #438) * ...

slide-19
SLIDE 19 13/52

unicode-math – modern expl3 package development expl3 conventions

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-20
SLIDE 20 14/52

unicode-math – modern expl3 package development expl3 conventions

  • ‘Auto-checking’:

\usepackage[enable-debug]{expl3} \ExplSyntaxOn \debug_on:n { check-declarations, check-expressions, deprecation } \ExplSyntaxOff

  • Indentation
  • Variables defined up front
  • Separation between internal and user-facing commands
slide-21
SLIDE 21 15/52

unicode-math – modern expl3 package development Git branches

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-22
SLIDE 22 16/52

unicode-math – modern expl3 package development Git branches

Branches

slide-23
SLIDE 23 17/52

unicode-math – modern expl3 package development Test suite

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-24
SLIDE 24 18/52

unicode-math – modern expl3 package development Test suite

Early days of the test suite:

  • X

E L

A

T EX → pdf → png → ImageMagick

  • A horribly-fragile and hard-to-read Makefile
  • Pixel by pixel comparisons
  • Slow, lots of false negatives
  • Nonetheless, a large number of tests produced
slide-25
SLIDE 25 19/52

unicode-math – modern expl3 package development Test suite

l3build brought automated unit testing to the masses:

  • Just wrap \loggingoutout around everything is fine?
  • It is really not fine.
  • Slowly re-write all tests with custom, minimal, logging.
slide-26
SLIDE 26 19/52

unicode-math – modern expl3 package development Test suite

l3build brought automated unit testing to the masses:

  • Just wrap \loggingoutout around everything is fine?
  • It is really not fine.
  • Slowly re-write all tests with custom, minimal, logging.
slide-27
SLIDE 27 19/52

unicode-math – modern expl3 package development Test suite

l3build brought automated unit testing to the masses:

  • Just wrap \loggingoutout around everything is fine?
  • It is really not fine.
  • Slowly re-write all tests with custom, minimal, logging.
slide-28
SLIDE 28 20/52

unicode-math – modern expl3 package development Test suite

Example test input

\input{umtest-preamble} \usepackage{fontspec} \setmathsf{texgyrecursor-regular.otf} \usepackage{unicode-math} \begin{document} \START \TESTBOX{$\mathsf{X}=X$} \end{document}

slide-29
SLIDE 29 21/52

unicode-math – modern expl3 package development Test suite

Example test output

This is a generated file for the l3build validation system. Don't change this file in any respect. > \box...= \hbox(0.0+0.0)x0.0 .\mathon .\TU/texgyrecursor-regular.otf(0)/m/n/10 glyph#116 .\glue(\thickmuskip) 2.77779 plus 2.77779 .\TU/latinmodern-math.otf(1)/m/n/10 glyph#30 .\glue(\thickmuskip) 2.77779 plus 2.77779 .\TU/latinmodern-math.otf(1)/m/n/10 glyph#1293 .\kern0.51 .\mathoff ! OK. <to be read again> \relax

  • l. ...\TESTBOX{$\mathsf{X}=X$}

*************** Compilation 1 of test file completed with exit status 256

slide-30
SLIDE 30 22/52

unicode-math – modern expl3 package development Release checklist

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-31
SLIDE 31 23/52

unicode-math – modern expl3 package development Release checklist

  • 1. Finish final changes on working branch
  • 2. Ensure CHANGES.md is up-to-date with a new version number
  • 3. build setversion
  • 4. Update local distro fully with tlmgr
  • 5. Run build check locally
  • 6. git push
  • 7. Check Travis build status
  • 8. Install prerelease versions of fontspec and latex3 and re-check
  • 9. git checkout master; git rebase working
  • 10. build ctan
  • 11. Upload to CTAN
  • 12. texlua tagrelease.lua to tag release with version number, annotated with

changes

  • 13. git push — assuming tags are pushed by default (might need a local gitconfig)
  • 14. git checkout working
  • 15. build install
  • 16. Check latex3/contrib/testfiles/unicode-math001.lvt and update if

necessary

  • 17. build uninstall
slide-32
SLIDE 32 24/52

fontspec – selecting fonts

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-33
SLIDE 33 25/52

fontspec – selecting fonts

fontspec’s interface

  • Originally very simple
  • Based around aat font features, not OpenType!
  • The Graphite font renderer needs more attention
  • A rewrite probably won’t happen, but a slimmed-down

‘L

AT

EX3’ version might

slide-34
SLIDE 34 26/52

fontspec – selecting fonts Font loading

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-35
SLIDE 35 27/52

fontspec – selecting fonts Font loading

How do I load a font in fontspec?

  • \fontspec
  • \setmainfont
  • \newfontfamily
  • \defaultfontfeatures

As the package has grown it is probably less than clear!

slide-36
SLIDE 36 28/52

fontspec – selecting fonts Font loading

Font names

X E T EX was originally written to load fonts from the OS: \setmainfont{Hoefler Text}% -- `just works' luaotfmoad followed, and now: \setmainfont{TeX Gyre Pagella}% -- `just works'

slide-37
SLIDE 37 29/52

fontspec – selecting fonts Font loading

File names

But also: \setmainfont{texgyrepagella-regular.otf}[ ItalicFont = texgyrepagella-italic.otf , BoldFont = texgyrepagella-bold.otf , BoldItalicFont = texgyrepagella-bolditalic.otf , ] (or)

slide-38
SLIDE 38 30/52

fontspec – selecting fonts Font loading

File names

But also: \setmainfont{texgyrepagella}[ Extension = .otf , UprightFont = *-regular , ItalicFont = *-italic , BoldFont = *-bold , BoldItalicFont = *-bolditalic , ] Which is better? This is the approach I now recommend.

slide-39
SLIDE 39 31/52

fontspec – selecting fonts Font loading

The case against font names

  • 1. Edge cases
  • Sometimes the correct italic/bold shape isn’t picked up
  • 2. Document portability
  • X

E T EX/luaotfmoad difgerences

  • Replicating font installation across computers
  • Difgerences in software/font versions → difgerent names
  • 3. Speed
  • Generating the font database is slow
  • Installing 100s of fonts in a system directory can be slow
slide-40
SLIDE 40 32/52

fontspec – selecting fonts The interface for font features

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-41
SLIDE 41 33/52

fontspec – selecting fonts The interface for font features

\font\x="[EBGaramond12-Regular.otf]"

Theory 123

\font\x="[EBGaramond12-Regular.otf]:+lnum;+dlig"

Tieory 123

slide-42
SLIDE 42 34/52

fontspec – selecting fonts The interface for font features

\fontspec{EBGaramond12-Regular.otf}

Theory 123

\fontspec{EBGaramond12-Regular.otf}[ Numbers = Lining , Ligatures = Discretionary , ]

Tieory 123

slide-43
SLIDE 43 35/52

fontspec – selecting fonts Typical example

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-44
SLIDE 44 36/52

fontspec – selecting fonts Typical example

Consider Gill Sans Nova. Weights:

  • UltraLight
  • Light
  • Book
  • Medium
  • Semibold
  • Bold
  • Heavy
  • ExtraBold
  • UltraBold

Do people want to control these with commands like \textbolder and \textlighter?

slide-45
SLIDE 45 37/52

fontspec – selecting fonts Typical example

‘Weight’ is relatively simple. Also have:

  • CnUltraLight
  • CnLight
  • CnBook
  • CnMedium
  • CnSemibold
  • CnBold
  • CnHeavy
  • CnExtraBold
  • CnUltraBold
slide-46
SLIDE 46 38/52

fontspec – selecting fonts Typical example

And then the variants:

  • Deco-Regular
  • Shadowed-Light
  • Shadowed-Medium
  • Shadowed-Outln
  • Inline-Cond
  • Inline-ExtraLt
  • Inline-Light
  • Inline-Regular
  • Inline-Bold
slide-47
SLIDE 47 39/52

fontspec – selecting fonts Typical example

  • Most of the time I’m just after a ‘normal’ and a ‘bold’.
  • Create gill-sans-nova.fontspec:

\defaultfontfeatures[gill-sans-nova]{ UprightFont = GillSansNova-Medium.otf , ItalicFont = GillSansNova-MediumItalic.otf , BoldFont = GillSansNova-Bold.otf , BoldItalicFont = GillSansNova-BoldItalic.otf , }

  • Now I can write \setmainfont{gill-sans-nova}.
  • Or, semantically,

\newfontfamily\captionfont{gill-sans-nova}

slide-48
SLIDE 48 39/52

fontspec – selecting fonts Typical example

  • Most of the time I’m just after a ‘normal’ and a ‘bold’.
  • Create gill-sans-nova.fontspec:

\defaultfontfeatures[gill-sans-nova]{ UprightFont = GillSansNova-Medium.otf , ItalicFont = GillSansNova-MediumItalic.otf , BoldFont = GillSansNova-Bold.otf , BoldItalicFont = GillSansNova-BoldItalic.otf , }

  • Now I can write \setmainfont{gill-sans-nova}.
  • Or, semantically,

\newfontfamily\captionfont{gill-sans-nova}

slide-49
SLIDE 49 39/52

fontspec – selecting fonts Typical example

  • Most of the time I’m just after a ‘normal’ and a ‘bold’.
  • Create gill-sans-nova.fontspec:

\defaultfontfeatures[gill-sans-nova]{ UprightFont = GillSansNova-Medium.otf , ItalicFont = GillSansNova-MediumItalic.otf , BoldFont = GillSansNova-Bold.otf , BoldItalicFont = GillSansNova-BoldItalic.otf , }

  • Now I can write \setmainfont{gill-sans-nova}.
  • Or, semantically,

\newfontfamily\captionfont{gill-sans-nova}

slide-50
SLIDE 50 39/52

fontspec – selecting fonts Typical example

  • Most of the time I’m just after a ‘normal’ and a ‘bold’.
  • Create gill-sans-nova.fontspec:

\defaultfontfeatures[gill-sans-nova]{ UprightFont = GillSansNova-Medium.otf , ItalicFont = GillSansNova-MediumItalic.otf , BoldFont = GillSansNova-Bold.otf , BoldItalicFont = GillSansNova-BoldItalic.otf , }

  • Now I can write \setmainfont{gill-sans-nova}.
  • Or, semantically,

\newfontfamily\captionfont{gill-sans-nova}

slide-51
SLIDE 51 40/52

fontspec – selecting fonts Typical example

The full power of the nfss is supported: \defaultfontfeature+[gill-sans-nova]{ FontFace = {uu}{m}{ GillSansNova-UltraLight.otf } , FontFace = {ll}{m}{ GillSansNova-Light.otf } , FontFace = {hh}{m}{ GillSansNova-Heavy.otf } , FontFace = {xx}{m}{ GillSansNova-ExtraBold.otf } , }

slide-52
SLIDE 52 41/52

fontspec – selecting fonts ‘Strong’ emphasis

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-53
SLIDE 53 42/52

fontspec – selecting fonts ‘Strong’ emphasis

Emphasis and inner emphasis

  • L

AT

EX 2𝜁 supports \eminnershape for markup with nested emphasis

  • fontspec supports arbitrary nesting using (say)

\emfontdeclare{\itshape,\upshape\scshape,\itshape}

  • Ex.:

Rm \emph{Aaa \emph{Bbb \emph{Iii}}}

slide-54
SLIDE 54 42/52

fontspec – selecting fonts ‘Strong’ emphasis

Emphasis and inner emphasis

  • L

AT

EX 2𝜁 supports \eminnershape for markup with nested emphasis

  • fontspec supports arbitrary nesting using (say)

\emfontdeclare{\itshape,\upshape\scshape,\itshape}

  • Ex.:

Rm \emph{Aaa \emph{Bbb \emph{Iii}}}

slide-55
SLIDE 55 42/52

fontspec – selecting fonts ‘Strong’ emphasis

Emphasis and inner emphasis

  • L

AT

EX 2𝜁 supports \eminnershape for markup with nested emphasis

  • fontspec supports arbitrary nesting using (say)

\emfontdeclare{\itshape,\upshape\scshape,\itshape}

  • Ex.:

Rm \emph{Aaa \emph{Bbb \emph{Iii}}}

slide-56
SLIDE 56 43/52

fontspec – selecting fonts ‘Strong’ emphasis

Strong and inner strong

  • And more recently…\strong!
  • \strongfontdeclare{

\bfseries, \fontseries{hh}\selectfont, \fontseries{xx}\selectfont, }

  • Ex.:

Abc \strong{Abc \strong{Abc \strong{Abc}}}

slide-57
SLIDE 57 43/52

fontspec – selecting fonts ‘Strong’ emphasis

Strong and inner strong

  • And more recently…\strong!
  • \strongfontdeclare{

\bfseries, \fontseries{hh}\selectfont, \fontseries{xx}\selectfont, }

  • Ex.:

Abc \strong{Abc \strong{Abc \strong{Abc}}}

slide-58
SLIDE 58 43/52

fontspec – selecting fonts ‘Strong’ emphasis

Strong and inner strong

  • And more recently…\strong!
  • \strongfontdeclare{

\bfseries, \fontseries{hh}\selectfont, \fontseries{xx}\selectfont, }

  • Ex.:

Abc \strong{Abc \strong{Abc \strong{Abc}}}

slide-59
SLIDE 59 44/52

fontspec – selecting fonts Custom encodings

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-60
SLIDE 60 45/52

fontspec – selecting fonts Custom encodings

  • Although everything is now Unicode, L

A

T EX’s idea of ‘encodings’ is still useful

slide-61
SLIDE 61 46/52

fontspec – selecting fonts Custom encodings

\newfontfamily\sanskitfont{charis} ...{\sanskitfont KALITA\d M}... % <- uses real accent

KALITAṂ

slide-62
SLIDE 62 47/52

fontspec – selecting fonts Custom encodings

\newfontfamily\oopsfont {posterama} ...{\oopsfont KALITA\d M}... % <- uses real accent

KALITAṂ

slide-63
SLIDE 63 48/52

fontspec – selecting fonts Custom encodings

\newfontfamily\titlefont{posterama}[ NFSSEncoding=fakedotaccent ] ...{\titlefont KALITA\d M}... % <- uses fake accent

KALITAM .

slide-64
SLIDE 64 49/52

fontspec – selecting fonts Custom encodings

In the preamble: \DeclareUnicodeEncoding{fakedotaccent}{ \input{tuenc.def} \EncodingCommand{\d}[1]{% \hmode@bgroup \o@lign{\relax#1\crcr\hidewidth \ltx@sh@ft{-1ex}.\hidewidth}% \egroup } }

slide-65
SLIDE 65 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1901)

slide-66
SLIDE 66 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1913)

slide-67
SLIDE 67 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1919)

slide-68
SLIDE 68 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1927)

slide-69
SLIDE 69 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1933)

slide-70
SLIDE 70 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1945)

slide-71
SLIDE 71 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(1984)

slide-72
SLIDE 72 50/52

fontspec – selecting fonts Custom encodings

KALITAM .

(2001)

slide-73
SLIDE 73 51/52

Conclusion

Introduction unicode-math – modern expl3 package development Code structure CHANGES file expl3 conventions Git branches Test suite Release checklist fontspec – selecting fonts Font loading The interface for font features Typical example ‘Strong’ emphasis Custom encodings Conclusion

slide-74
SLIDE 74 52/52

Conclusion

Conclusion

  • Thanks to everyone

(too many to count but especially [redacted])

  • Thanks for patience
  • Obrigado