# Why are all Heiti fonts appearing below the baseline in ConTeXt?

When using Chinese, heiti (黑体) fonts are the equivalent of sans serif. They generally have simple lines.

I want to use a heiti font for all of the titles and description labels in my document, however, I found when using any heiti font, the words are not appearing properly on the baseline.

This source, using STSong, STHeiti, and STKaiti, fonts available on OS X computers, demonstrates the problem:

``````\setscript[hanzi]
\mainlanguage[cn]
\starttypescript[serif][stsong]
\definefontsynonym[Serif][name:stsong][features=chinese]
\stoptypescript
\starttypescript[sans][stheiti]
\definefontsynonym[Sans][name:stheitijlight][features=chinese]
\stoptypescript
\starttypescript[mono][stkaiti]
\definefontsynonym[Mono][name:stkaiti][features=chinese]
\stoptypescript
\definetypeface[stsong][rm][serif][stsong]
\definetypeface[stheiti][ss][sans][stheiti]
\definetypeface[stkaiti][tt][mono][stkaiti]
\setupbodyfont[stsong, 12pt]
\setuppapersize[A5]
\setuplayout[grid=yes]
\showgrid
\definedescription[descr]
\starttext
\language[en]{
{\stsong This is some text in STSong.}
{\stheiti This is some text in STHeiti.}
{\stkaiti This is some text in STKaiti.}
}
\language[cn]{
{\stsong 这是一个句子。}
{\stheiti 这是一个句子。}
{\stkaiti 这是一个句子。}
}
\startdescr{\language[cn]{标签}}
\language[en]{This is some text.}
\stopdescr
\stoptext
``````

After compiling, I find that the STHeiti text is not on the baseline on lines 2 and 7:

• One line 2, the STHeiti text appears a good deal above the baseline. This is more visible in the PDF.
• Line 5 does not have any problem. Most of these characters have parts which correctly extend below the baseline.
• On line 7, the descriptions label, in Chinese, appears much lower than the English text.

I tried substituting STHeiti with other Heiti fonts, such as Adobe Heiti Std and STXihei, but these exhibited the same problems.

Why is the text appearing at different levels? How can I ensure that the different fonts, particularly in the description environment, appear on the same baseline?

-
Is your text english or chinese? When I typeset english texts, the stheiti floats a fraction of a point above the baseline, but that's different from what you describe. –  Marco May 4 '12 at 15:14
The document contains a mixture of Chinese and English. –  Village May 6 '12 at 7:28
Can you include an image showing what is wrong, and add links from where the fonts can be downloaded (assuming that the fonts are free). –  Aditya May 8 '12 at 3:53
For a minimal example simply change the font from STHeiti to STSong on the same line. No `description` needed. I can see two issues here. With English text the STHeiti hovers approximately half a point over the baseline, which is clearly visible. With chinese text the lines do not obey the baselinedistance (or grid) at all, neither the STHeiti nor the STSong. Please clarify. –  Marco May 8 '12 at 10:52
I have updated my question to include more details. In a normal paragraph, the Chinese text appears to be placed correctly on the baseline, some characters have parts which will appear below, similar to the English letters "q", "y", "p", "g", and "j". This biggest problem I see only appears within the description environment's label. –  Village May 9 '12 at 9:34

As far as the off-the-baseline problem is concerned, I believe this is a "problem" in the font or in the way how they try to fit both Latin and Chinese characters on the same baseline. You can try the following example in plain XeTeX and you'll get the same result:

``````\font\a="[STHeiti Light.ttc]"
hello \a hello  这是一个句子
\bye
``````

You might file a feature request to adjust baseline manually for certain fonts, but then you might end up with Chinese characters being too low for the baseline.

The rest of the answer comes from Hans Hagen. You get the same problem with the following input:

``````\definefont[BigOne][SerifBold at 30pt]