EBW Knowledge Base

Small caps

When you make some text appear in small caps, is that a content or a formatting decision? It should be a formatting decision. However, a couple of dominant applications, combined with lax work by designers and typesetters, has confused the issue. Here’s an explanation.

A string of small-caps characters is created from three elements:

  • the content (the characters themselves)
  • a formatting instruction (e.g. a character style in InDesign or span in CSS)
  • their final appearance (created by software following the formatting instruction).

In InDesign, we create small caps in two different ways, either using a Small Caps style attribute or, if we’ve chosen a good OpenType font, an OpenType All Small Caps style attribute.

Content Formatting instruction (styles) Appearance
UN Small caps UN
Unesco Small caps Unesco
UN OpenType All Small Caps UN
Unesco OpenType All Small Caps Unesco

(I’ve had to recreate the InDesign effect here using CSS, so this isn’t perfect, but you get the idea.)

Most designers want the OpenType All Small Caps effect. But here’s the problem: when designers have not chosen a good OpenType font, and they want the effect of a whole word being an small caps, they have no choice but to change the characters themselves to lowercase. So they change UN to un and Unesco to unesco, and apply a Small Caps style attribute.

Then, when they export to epub (or save as HTML or any other kind of XML), thus separating content and formatting, they have bogus characters in their content: un and unesco. And anyone who works with the text after that point has to either manually change the characters back to uppercase or titlecase, or remember to put some kind of formatting instruction in place just for those spans of characters.

If you’re a designer: never change the characters! The characters are content. You work with formatting. Don’t cross that line, or you make life difficult for those after you.

In XHTML and CSS, we’d achieve the same small caps effect in one of these ways:

Content Formatting instruction (CSS) Appearance
UN font-variant: small-caps; UN
Unesco font-variant: small-caps; Unesco
UN text-transform: lowercase; font-variant: small-caps; UN
Unesco text-transform: lowercase; font-variant: small-caps; Unesco
UN text-transform: uppercase; font-size: 75%; UN
Unesco text-transform: uppercase; font-size: 75%; Unesco

(I’m not making any judgements here about which solution is more typographically elegant.)

Here’s the But: Adobe Digital Editions (and probably many apps based on the Adobe RMSDK) at the time of writing does not support either “text-transform” or “font-variant: small caps”.

So if a designer has left lowercase characters (the same applies in reverse for uppercase) in their document, and that’s been exported to epub, the HTML will have those lowercase letters and there is nothing you can do in CSS to fix their appearance in Adobe Digital Editions. Your only fix is to manually change the characters in the HTML to their correct lowercase and/or uppercase forms.

Font-embed workaround?

You can choose to embed fonts, and include a font with small-cap glyphs. We did this in this free epub, check it out. Here we embedded Linux Libertine’s regular, italic and small-caps variants. However, normally we don’t recommend embedding fonts. Some readers (like iBooks) just ignore them anyway.

3 Comments

  1. […] And goodness knows it needs acceleration. Under EPUB 2.0, even market leaders took their time implementing support for basic features. […]

  2. Bee Bee says:

    the link to youe free epub showing small caps doesnt work. I badly need to purt the linux libereen small caps font into an epub. of course the variant in the style sheet doesnt work. SO I need to know how to access the Small caps font directly in the CSS.

  3. Arthur says:

    Thanks for pointing this out, Bee Bee. I’ve fixed the link – it had broken after we reorganised some of the pages on this site.

Leave a Reply