[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
spaces.
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..........
JK
More information about the XeTeX
mailing list