I would like to typeset text with old-style ligatures like st, ct, is, es etc, but without the use of command sequences, e.g. street or construction instead of \st reet or constru\ct ion in Plain TeX. And use the long s. What do I need to do to get that? Thanks.

  • 1
    If you have a font with those ligatures you should not have to do anything in the tex markup. Commented Jan 7, 2016 at 17:09
  • Thanks @DavidCarlisle, any suggestion?
    – blmayer
    Commented Jan 7, 2016 at 17:12
  • 3
    Lets say I like things my way, LaTeX's pretty good but I had some difficulties to change some things like spacing, formatting plus I very often need to install packages. I've tried LuaTeX but found it too hard, I'm currently considering switching to XeTeX. For me Plain TeX is like a minimalist approach that I can build my style upon it.
    – blmayer
    Commented Jan 7, 2016 at 17:25
  • 2
    @BrianMayer What did you find “hard” about LuaTeX? Everything just works as before. It is not like you'd have to use the Lua interface. Commented Jan 7, 2016 at 23:14
  • 1
    I've taken the liberty of changing the term "old English ligatures" to "old-style ligatures", since there's nothing specifically English about these ligatures: They were used on the European continent every bit as much as in England and her colonies.
    – Mico
    Commented Jan 8, 2016 at 1:17

4 Answers 4


The OpenType font feature hlig provides these, so called, historic ligatures. Instead of typing ſ, one could also use the +medi feature to have a normal s contextually replaced by ſ, so for instance the input streets would become ſtreets in the document. Unfortunately, I don't have a font that provides +medi. Perhaps some other user with a matching font can provide an example.

Typeset with either xetex or luatex.

  \input luaotfload.sty
\font\1="Linux Libertine O:+hlig"
\1 ſtreet construction

enter image description here

Here is a list of fonts, distributed with TeXlive 2015, which possess the hlig feature:

Accanthis ADF Std No3
EB Garamond 12
Gillius ADF
Gillius ADF Cond
Gillius ADF No2
Gillius ADF No2 Cond
Linux Biolinum O
Linux Libertine Display O
Linux Libertine O
Universalis ADF Std
Universalis ADF Std cond

For the nerds, here is the bash command line for the above snippet (improved, thanks to Clea F. Rees):

for i in `fc-list | cut -d ':' -f 1 | grep /usr/local/texlive/2015/texmf-dist/.*otf`; do
    if [ -n "`otfinfo -f "$i" | grep hlig`" ]; then
        otfinfo -a "$i";
done | sort | uniq
  • 3
    If you pipe through sort and then uniq, you can eliminate the duplicates.
    – cfr
    Commented Jan 8, 2016 at 0:09
  • Thanks for the help, there is also the feature hist which contextually uses the historic form of some letters, so it places the long s for s automatically. Still, I'm not achieving the desired results due to otf problems, the apple's font book seems to import them with wrong ligatures. Tried with Playfair Display, on the website the ct and st glyphs are correct but when I install them they loose the arc, strange.
    – blmayer
    Commented Jan 8, 2016 at 15:01
  • @BrianMayer Did you try dlig with Playfair Display? It doesn’t have the hist feature (designers disagree somewhat in their interpretation of what the various features are for).
    – Thérèse
    Commented Jan 11, 2016 at 17:19
  • To resolve this problem I had to clean the font caches and reinstall the font, it seems like a common issue. Yes, with dlig ct and st ligatures are made correctly now, but to use long s you need to input it in the code manually. And yes they really disagree.
    – blmayer
    Commented Jan 11, 2016 at 17:26

Some 'traditional' fonts installed with TeX Live provide some or all of these ligatures and long s. How you access these depends on the way the font is configured since there's no 'standard' interface.

Although the following examples use LaTeX, this is just because this is what I'm most familiar with. The ligatures etc. are all defined at the font level and do not rely on the LaTeX packages. You just need to use the correct font at the TeX level, I believe. (But see not below about encodings.)

Romande ADF 'alternative' provides additional ligatures automatically and the long s may be accessed using s*.

Romande ADF alternate

As*s*ociated facts stray specious*ly.

Venturis ADF Old 'alternative' provides some additions, with the long s accessed using s+. (s* is used to access an alternate version of the regular s.)

Venturis ADF old alternate

As+s+ociated* facts stray s*pecious+ly.

There are also 'swash' styles you can do fancy things with. Venturis ADF itself includes end-of-word swashes, for example.

Day Roman is not part of TeX Live but can be installed using getnonfreefonts-sys, which automates the installation of additional fonts.

In this case, the relevant font family uses the long s by default and s: is required to access the regular s for use at e.g. the end of words. This family also provides additional ligatures.

Day Roman s style

Associated facts: stray speciously.

Most of these fonts use something other than the OT1 encoding because this simply doesn't provide enough slots to spare any for fancy ligatures or alternate characters. I'm not sure how this works in plain, but the ability to use font encodings with 256 slots rather than 128 is pretty much essential for this, as there just isn't much you could sacrifice in OT1 to make space for this kind of thing otherwise.

Note, too, that these things all work by hackery. Day Roman S does not use a standard T1 encoding. I haven't looked at it. But it cannot be standard because it must be using a slot for the s: ligature and that is, of course, not a standard ligature in the T1 encoding.

This means that there are some characters such that typesetting them will have unexpected results. There is some unrelated character such that including it in your document will unexpectedly produce the ct character or the long s or whatever.

It is therefore very important to read the documentation to check that you do not need characters whose slots have been used to accommodate the fancy, non-standard additions since you will not get any warnings about the unexpected output.

This is especially true if the font uses T1 as T1 has no free slots. Hence, even one additional character means some slot has been hijacked.


Thanks everybody for the great answers, I learned a lot. I've found a great font, ideal for old books in my opinion, it's named IM FELL DW Pica PRO and can be found here: Igino Marini Website alongside other great fonts. This one features historic forms and ligatures with +dlig,+hlig,+hist opentype font features and it works perfectly with XeTeX.


\font\1="IM FELL DW Pica PRO:mapping=tex-text,+dlig,+hlig,+hist" at 12pt
\1 Associated facts stray speciously.



enter image description here

So no need to differentiate s from long s in the code. Thanks again.

  • IM Fell is also distributed with TeXlive. Commented Jan 11, 2016 at 16:48
  • Thanks @HenriMenke do you know how to enable its ligatures via the traditional \font in plain TeX?
    – blmayer
    Commented Jan 13, 2016 at 0:21
  • 1
    Unfortunately, these ligatures do not appear in the OT1 encoded Type 1 version of IM Fell. Thus they are not accessible from within pdftex. You could still generate the Type 1 fonts from the OTF version yourself and sacrifice slots you don't need for these ligatures. How to do this, is beyond my knowledge. I'm sure @cfr can help you. Commented Jan 13, 2016 at 9:52

kpfonts provides this option simply:

Associated facts: stray speciously.

enter image description here

  • 1
    Welcome to TeX.SE. You may want to show how the "long-s" glyph can be replaced with the "final-s" glyph, since the long-s glyph shouldn't be used at the ends of words and word fragments. (It looks like you attempted to do this in one instance; however, something seems to have gone wrong as the long-s glyph is shown.)
    – Mico
    Commented Jan 8, 2016 at 1:19
  • 1
    In later early modern editions, the second of a doubled 's' is also very often written in the modern way (while the first is the normal long-s). I always assumed this was to help distinguish it from a doubled 'f', but I've never looked into it.
    – jon
    Commented Jan 8, 2016 at 4:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .