# Ligatures: why “fi”, but not “fj” as well?

My university name is "FJFI", with e-mail/web addresses containing lowercase "fjfi". Then "fi" gets ligatured whereas "fj" does not, and the result looks a bit strange. My question is, which possibility would you choose:

1. Leave it as is.
2. Forbid ligature for "fi".
3. Generate/define a ligature for "fj". (With an extra question: how?)
4. Some other solution?

Below you see the shapes in Computer Modern and New Century Schoolbook, the second one is with forbidden ligature (for comparison).

-
My suggestion would be 4.: Look for a font that does have the fj ligature (a few do) and use that. You're right, the result does look strange as it is now. – Thomas Feb 28 '12 at 14:01
@Thomas Any suggestions for such fonts? I prefer cmr for math texts and I would like not to change this, but I'm open to any ideas ;) – yo' Feb 28 '12 at 14:02
@AndreyVihrov Since it is an isolated problem for me (only "fjfi" is the issue), I'm open to use it in the form \charXYZ, just I cannot find the symbol in my LaTeX fonts... – yo' Feb 28 '12 at 14:11
Being an acronym, I'd suggest breaking the fi ligature. Using a fixed width font for email addresses guarantees this. – egreg Feb 28 '12 at 14:35
@tohecz Difficult to say, of course, without knowing the context of your use, and without having a really knowledgeable person look at it (I'm a bloody amateur myself). But just to answer your question and give you a few ideas: the following fonts have 'fj' ligatures - I checked in fontforge. (The question how you would use these ligs in TeX is of course left as an exercise to the reader...): Adobe Garamond, Adobe ArnoPro, Linux Libertine, Storm Baskerville. Another possibility, of course: use a font where the ligature isn't needed because there is no clash... – Thomas Feb 28 '12 at 16:55

Here's a horrible, completely wrong way to get a "fj" ligature that will only work with Computer Modern. A proper way to solve the problem would be to get (or create) a font that has the ligature. Latin Modern may have this ligature in the future.

\documentclass{article}

\usepackage{xcolor}

\newcommand{\fj}{%
% Use the 'fi' ligature
fi%
% Erase the 'i' part
\llap{\textcolor{white}{\rule[-0.05em]{0.252em}{0.55em}}}%
% Overlay a dotless j instead
\kern-0.01em\llap{\j}%
% Kern back a little
\kern-0.05em\relax}

\begin{document}

fi\fj

\end{document}


-
+1 - first I saw the image and the reaction was shudder. Then I read your introduction and was delighted to have this disclaimer. Otherwise: very nice solution. – topskip Feb 28 '12 at 14:42
Thanks, I thought of hacking the fonts this way and your work is just perfect, mainly because it can be adapted to other fonts as well by changing the dimensions slightly. – yo' Feb 28 '12 at 15:12
+1 for the hacking skills! – Ben Feb 28 '12 at 15:36

As per Andrey's comment, I formulate this as an answer: I see two ways you could go:

1. Use a font where "fi/fj" don't clash and which doesn't need the ligatures. Two examples that come to mind are Palatino/TeXGyre Pagella or Gentium.
2. A number of fonts have the fj ligature. A quick look at some of the fonts I have here brings up as professional fonts: Adobe Garamond Pro and Garamond Premier Pro, ArnoPro, MinionPro, or Storm Baskerville, and free fonts: Linux Libertine, Xits.

Just to give you an idea: in ConTeXt mkiv, using this ligature is as simple as this:

\usemodule[simplefonts]

\setmainfont[MinionPro]

\starttext

fifj

{\it fifj}

{\bf fifj}

{\bi fifj}

\stoptext


Which looks like this:

-
Thanks for the list of fonts, it is very useful! However, I don't plan to switch to ConTeXt. – yo' Feb 28 '12 at 22:04
@tohecz If you have a proper OT-font or are willing to add the OT-features for fj yourself, XeLaTeX will also use it without too much relearing. If you don't want to or aren't allowed to mess with the font itself, you could use a font-mapping scheme, cf fontspec's manual section IV.12.1 to get fj replaced with the proper ligature while typesetting. – Florian Jun 26 '12 at 12:40

"fj" should absolutely be typeset with a ligature (for these fonts). The reason it is not is simply because "fj" is very uncommon in English.

In Garamond "fj" looks horrible.

-
unicode hasn't got an "fj" ligature either, although it has "st" with both long and short s, but no "ct". of course, these few ligatures are only there for "compatibility" reasons with grandfathered character sets, and are pretty much deprecated. this is considered a typographical, not a coding, matter. unicode technical report #17 deals with this in a way that just about guarantees that use of the (also deprecated) private use area is unavoidable. – barbara beeton Feb 28 '12 at 14:31
I don't see how it "guarantees that use of the private use area is unavoidable" - fonts aren't required to assign code points to all their glyphs. – Random832 Feb 28 '12 at 19:53
@Randolph832 -- no, fonts aren't required to assign code points to all glyphs, but each glyph does have to have some id plus attributes that make it uniquely identifiable, and if a font claims to be based on unicode, for a ligature that isn't an alternate for a single other glyph with a distinct unicode, the pua is the most obvious approach. what alternatives are you thinking of/recommending? – barbara beeton Feb 28 '12 at 21:04
@tohecz The symbols like "fi" in unicode are only there because they were present in older encodings (like adobe or apple) that had more limitations. Modern systems don't need a "fj" character to have a "fj" glyph in the font. If they were absent, we could still have a "fi" ligature that is only used by using the two letters normally. – Random832 Mar 19 '12 at 20:24
@barbarabeeton why do glyphs have to be identified based on unicode (or pua) at all? I'm saying each glyph could have an arbitrary id (a=1 b=2 c=3 d=4 e=5 f=6 fi=7 fj=8 g=9, say), some of these are mapped to code points (but not fj), and some are in the ligature table (both fi and fj). There doesn't need to be an "alternative", because the need to have a code point to identify it doesn't exist at all. – Random832 Mar 19 '12 at 20:27