[XeTeX] New feature planned for xetex

Jonathan Kew jfkthame at gmail.com
Thu Feb 18 11:58:20 CET 2016

This is a pretty specialized feature, likely to be interest only to a 
small minority of users. But for those it concerns, here's something 
that is "coming soon to a XeTeX near you".......

I've recently implemented a new feature, controlled by the integer 
parameter \XeTeXinterwordspaceshaping. This will be available in the 
TL'16 release, if all goes well.

This feature is relevant only when using OpenType/Graphite/AAT fonts, 
not legacy .tfm-based fonts.

When \XeTeXinterwordspaceshaping is greater than 0, XeTeX will attempt 
to support fonts where the width of inter-word spaces may vary 
contextually, depending on the preceding and following text. This is 
needed by fonts such as SIL's Awami Nastaliq (in development) where 
words are expected to kern together across spaces.

The default behavior of xetex is to measure each word in isolation, and 
simply string together a sequence of such word and space (glue) nodes to 
form the horizontal list that is then line-broken to form a paragraph. 
Normally, when inter-word spaces do not depend on the adjacent words, 
this works fine; but in Awami the width of inter-word spaces may vary 
drastically, even becoming negative in some cases.

Setting \XeTeXinterwordspaceshaping=1 tells xetex to measure such spaces 
"in context" and take account of the contextually-modified widths during 
line breaking. This greatly improves the typeset result with such a 
font. Each word is still shaped and rendered individually, but 
line-breaking and word spacing respects the inter-word kerning.

A further complication occurs when not only the width of the space but 
also the glyphs of the adjacent words themselves may be subject to 
contextual changes. An example of this would be a font that has OpenType 
ligature rules that apply to multiple-word sequences; e.g. a symbol font 
that ligates the text "credit card" to render a credit-card icon. 
Another example is the word-final swash forms in Hoefler Italic, which 
are intended to be used at end-of-line but NOT before word spaces within 
the line.

These cases are addressed with \XeTeXinterwordspaceshaping=2. With this 
value, not only are inter-word spaces measured in context, but also each 
run of text (words and intervening spaces) in a single font will be 
re-shaped as a unit at \shipout time. This allows full shaping 
(contextual swashes, ligatures, etc) to take effect across inter-word 

Currently, this feature is implemented only in the "contextual-space" 
branch of the code at sourceforge; anyone interested in testing it will 
need to check out and build the code from there. After some time, if no 
major problems show up, I expect to merge it to the master branch, and 
then to the TeXLive source tree.

Feedback welcome..........


More information about the XeTeX mailing list