# 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

C++{\addfontfeature{Numbers=Lining}0}x

{\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?

## 1 Answer

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.

• 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
• @Ulrike See also this thread. It seems that Will recognizes it as at least an issue. – Alan Munn Feb 13 '11 at 15:30
• 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
• @Will would it be possible to construct a list of (logically) mutually incompatible font features so that \fontspec_define_fontfeature_option could be modified to set and unset them automatically? – Alan Munn Feb 13 '11 at 21:24
• A \removefontfeatures or improvements to \addfontfeatures will solve the actual problem. But the general problem is that the font type (rm, tt, sans ...) is not independant from the font family. There can be only one rmfamily font. This is e.g. also a problem when more than one script is involved. You can't declare rm + tt fonts for both scripts. Polyglossia has some commands to adress this problem (\rmfamilytype, familytype) but doesn't do very much with them. – Ulrike Fischer Feb 14 '11 at 9:13