Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I just ran into another issue, I like to use gill sans very much but the number 1, lower case L and upper case I are almost indistinguisable. On the other hand I like Helvetica numbers. Is there a way to use Gill Sans for all non-numeric characters and Helvetica only for numbers [0 9] ?

share|improve this question
2  
I think it's likely that you just gave some of the people around here a migraine. –  Kieran Feb 4 '11 at 16:25
    
I did ?, that was not my intention... –  Gregthom Feb 8 '11 at 1:36
add comment

2 Answers

up vote 5 down vote accepted

Yes, you can. But I only know a tricky method --- to use \XeTeXinterchartoks and related commands. There have been some packages, for example xeCJK and ucharclasses, that use this mechanism for multilingual support. (I wrote a few code for xeCJK.) For more information, you can read XeTeX's reference.

Set \XeTeXinterchartokenstate=1 to enable the mechanism.

There are already some predefined char classes. 0 for normal westen alphabets and symbols, 1 for CJK ideographs, 255 for boundary, etc. And you can use \newXeTeXintercharclass to allocate a new class.

Use \XeTeXcharclass to set the numbers to the new character class, and use \XeTeXinterchartoks to do the trick.

Full example:

result

\documentclass{article}
\usepackage{fontspec}
\XeTeXinterchartokenstate=1
\chardef\CharNormal=0
\chardef\CharBound=255
\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}
\begin{document}
0123

abc123

123abc

abc123def

123abc456
\end{document}

BTW, this does not affect math fonts.

share|improve this answer
    
I second the suggestion of ucharclasses, somewhat reluctantly. It increased my compilation time by a factor of twenty, from ten seconds to two minutes. So now I need conditional compilation, with, among other things, special handling for the CMU Serif “~” bug. The lack of handling of missing characters in math fonts is particularly annoying, especially for a feature that should be (as it is on OSX) a built-in feature. –  Flash Sheridan Mar 29 '11 at 16:00
add comment

I don't know if this works in LaTeX, but at least with Plain:

\font\mydigitsfont="Helvetica"
\font\mydigitssfont="Helvetica/S=7" at 7pt
\font\mydigitsssfont="Helvetica/S=5" at 5pt
\newfam\mydigitsfam
\textfont\mydigitsfam=\mydigitsfont
\scriptfont\mydigitsfam=\mydigitssfont
\scriptscriptfont\mydigitsfam=\mydigitsssfont
\XeTeXmathcode`0="0\mydigitsfam`0
\XeTeXmathcode`1="0\mydigitsfam`1
\XeTeXmathcode`2="0\mydigitsfam`2
\XeTeXmathcode`3="0\mydigitsfam`3
\XeTeXmathcode`4="0\mydigitsfam`4
\XeTeXmathcode`5="0\mydigitsfam`5
\XeTeXmathcode`6="0\mydigitsfam`6
\XeTeXmathcode`7="0\mydigitsfam`7
\XeTeXmathcode`8="0\mydigitsfam`8
\XeTeXmathcode`9="0\mydigitsfam`9
\def\mydigits{\fam\mydigitsfam\mydigitsfont}
$ 1^22^{23^3}3^1 $ 123 {\mydigits 123}
\bye

So, automatic only for mathmode.

share|improve this answer
    
This works only for math fonts, which may not be what @Gregthom want. In LaTeX, math fonts for digits can be easily changed using \DeclareMathSymbol in NFSS scheme, without help of XeTeX. –  Leo Liu Feb 4 '11 at 17:14
    
@Leo Liu: I managed to edit in that fact pretty much the same minute you left your comment :‑) –  morbusg Feb 4 '11 at 17:18
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.