I am writing a document for which I would like to use a main font, let's call it myfont, which I have as several .otf files. To do so, I use XeTeX along with the fontspec package and the setmainfont command :
\usepackage{fontspec}
\setmainfont[Mapping=tex-text,
BoldFont={myfont-bold.otf},
ItalicFont={myfont-italic.otf},
BoldItalicFont={myfont-bolditalic.otf}
]{myfont.otf}
The problem I have with myfont is that I don't like the digits. Therefore, I'd like to use another font, but only for digits. It could be possible if the setmainfont command had a numbers option, which it doesn't.
I would also like to precise that the font does not have support for lined digits, and only comes with Old Style.
The way I see it, there would be two ways to do so :
1/ Make all digits use the math font
If I could make every digit call the math font, there would be no problem, as the math font digits look alright. The main problem being that I have no idea if and how this could be done.
2/ Substitute characters manually
This is what is suggested by two resources I have found :
here and here - the latter referencing the former. Their solution was to use the fontspec package and to manually swap characters using :
\usepackage{fontspec}
\XeTeXinterchartokenstate=1
\chardef\CharNormal=0
\makeatletter
% Test for old and new versions of the latex kernel
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
\makeatother
\newXeTeXintercharclass\CharNumbers
\XeTeXcharclass`0=\CharNumbers
\XeTeXcharclass`1=\CharNumbers
\XeTeXcharclass`2=\CharNumbers
\XeTeXcharclass`3=\CharNumbers
\XeTeXcharclass`4=\CharNumbers
\XeTeXcharclass`5=\CharNumbers
\XeTeXcharclass`6=\CharNumbers
\XeTeXcharclass`7=\CharNumbers
\XeTeXcharclass`8=\CharNumbers
\XeTeXcharclass`9=\CharNumbers
\newtoks\TokSetfont
\TokSetfont={\begingroup\fontspec{Latin Modern Mono}}
\XeTeXinterchartoks\CharNormal\CharNumbers=\TokSetfont
\XeTeXinterchartoks\CharBound\CharNumbers=\TokSetfont
\XeTeXinterchartoks\CharNumbers\CharNormal={\endgroup}
\XeTeXinterchartoks\CharNumbers\CharBound={\endgroup}
The problem with this solution is that it does not seem to work ; it makes XeLaTeX compilation extremely slow, returning memory errors, and in the end the digits stay unchanged. The original solution was given in this answer, and as comments suggest, an infinite loop appears to be running.
Since the posts are rather old, and the solutions do not seem to work anymore, I figured I would ask again if anyone had an idea about how to change the main font for digits only. I am fully aware that this is an extremely unimportant thing to do, but still : any ideas ?
[EDIT] For convenience, a minimal working example with free fonts :
% !TeX program = xelatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont[
BoldFont={Georgia Bold},
ItalicFont={Georgia Italic},
BoldItalicFont={Georgia Bold Italic},
SmallCapsFont={Latin Modern Roman Caps}
]{Linux Libertine O}
\begin{document}
Everything \textbf{just} \textsc{Works}, \\
but I don't like this ``1''
\end{document}

xltxtra? It isn't recommended these days for most cases. – cfr Jul 09 '18 at 22:54.pfbfonts, but the older fonts I had in mind were older.otffonts, such as Linotype’s Stempel Schneidler. Are virtual fonts relevant there too? – Thérèse Jul 10 '18 at 02:04autoinstconversion route when you can leverage the features to produce type1 fonts which implement them. But I tend not to convert them unless I have to. (And sometimes the licence prohibits it.) – cfr Jul 10 '18 at 02:42EDIT : also, I used
– fkrz Jul 10 '18 at 13:34xltxtraprecisely to load the .otf fonts and allow the compilation ; did I misunderstood its necessity ?xltxtrato load them, no. Justfontspec. True, people can't help without the fonts. But they also can't help without compilable code. So make it easy for people with the fonts to help you. – cfr Jul 10 '18 at 23:04xltxtra, and I edited with a MWE including free fonts – fkrz Jul 11 '18 at 09:28