Lining numbers not working in certain fonts

I’m using the Linux Libertine font and have old style numbers enabled.

However, in a certain context I want to use lining figures instead. Normally I should be able to switch using \addfontfeature but this doesn’t work. MWE:

\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{Linux Libertine}

\begin{document}
C++0x

{\fontspec{Linux Libertine}C++0x}
\end{document}


The output looks like this:

C++ox
C++ox
C++0x

However, the second line should look like the third, not like the first. Setting other font features (i.e. slashed zero) doesn’t work either.

Additionally, if I use another font (e.g. Hoefler Text) then the output is as expected.

Does somebody have an idea what’s going on here?

-

Here's a workaround to your problem (which is a known issue with respect to how adding font features works (see commentary here and here)). The solution is to define a new fontface and use that to change the number style:

\documentclass{minimal}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{Linux Libertine}
\newfontface\lining[Numbers=Lining]{Linux Libertine}
\begin{document}
C++0x

C++{\lining0}x

{\fontspec{Linux Libertine}C++0x}
\end{document}


In general if you are going to be switching fonts its best to use the \newfontfamily or \newfontface commands to make the switch into a macro rather than calling fontspec directly.

-
@Alan: I’m not switching fonts (at all) in my document. The \fontspec example was just to illustrate that the lining figure actually works when this font is loaded directly. Anyway, thanks for the info that this is potentially a bug. I guess I’ll use your workaround then. –  Konrad Rudolph Feb 13 '11 at 14:51
@Konrad answers are for everyone :-) which is mainly why I added the comment about switching fonts. Although I think the \newfontface (or family) solution is actually preferable to the \addfontfeature route anyway. But your example should work as advertised. –  Alan Munn Feb 13 '11 at 15:18
I don't think that is a bug of fontspec. If you use \addfontfeature you add both open type features to the feature list and the result depends mostly on how they are implemented in the font. See also this post of Jonathan Kew: tug.org/mailman/htdig/xetex/2008-June/010015.html. So if you want to use "conflicting" features you shouldn't use \addfontfeature. –  Ulrike Fischer Feb 13 '11 at 15:22
@Alan: True, true. But \addfontfeatures has the advantage of working regardless of the parent font family. In fact, this is an issue in my case – now I need to redefine the relevant variable for each font family (roman, sans and mono) which makes this whole thing needlessly complicated. –  Konrad Rudolph Feb 13 '11 at 15:25
So, yeah, fontspec should be better behaved w/r/t all of this; @Alan's links describe the situation to a tee. (In fact, they—the links—are better than I'd be able to produce at a pinch!) Sorry for the inconvenience; one day I hope we'll do better. –  Will Robertson Feb 13 '11 at 16:33