How to get old-style ligatures in plain TeX

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.

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

enter image description here

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

Accanthis ADF Std No3
Baskervaldx
EB Garamond 12
fbb
FreeSans
FreeSerif
Gillius ADF
Gillius ADF Cond
Gillius ADF No2
Gillius ADF No2 Cond
Linux Biolinum O
Linux Libertine Display O
Linux Libertine O
TeXGyrePagellaX
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):

IFS=$'\n';
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";
    fi;
done | sort | uniq

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

\documentclass{article}
\usepackage{romande}
\begin{document}
\altstyle
As*s*ociated facts stray specious*ly.
\end{document}

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

\documentclass{article}
\usepackage{venturisold}
\begin{document}
\altstyle
As+s+ociated* facts stray s*pecious+ly.
\end{document}

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

\documentclass{article}
\renewcommand\rmdefault{dayroms}
\usepackage[T1]{fontenc}
\begin{document}
Associated facts: stray speciously.
\end{document}

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.

MWE:

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

1234567890
\bye

Produces:

enter image description here

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