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||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||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.
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.