Width / Weight divergences between variable and non variable fonts
Fontconfig seems to assign width/weight values to faces based on various keywords: (for example, condensed means a width of 75 in https://www.freedesktop.org/software/fontconfig/fontconfig-user.html)
However, the same mecanism does not seem to be applied to variable instances (probably the instance have specific values on variable axis).
That causes several problems:
-
it will likely make it hard to complete a limited-coverage instance with glyphs from the corresponding non-variable font, since their width/weight/slant values will differ (for example the Condensed faces in Plex Sans have a width of 75, and the Condensed faces in Plex Sans Variable have a width of 85)
-
it confuses hopelessly the inkscape font selector, that seem to assume weight width slant values map to specific attribute names, and does not find those names in variable fonts. In some cases it can not select faces at all. In other cases it seems to detect faces by value, but is unable to name them in the selector
Fontconfig should have a built-in mecanism to fix those discrepancies before variable fonts become more common:
-
check if all the faces mapped to a single font families have the same keyword←→value mapping
-
when the mapping is not uniform, choose one mapping value (the one set in variable instances, the one in the highest font version, whatever) and impose on the whole family, so apps like inkscape can continue to rely on a single value meaning for each attribute
-
expose this API to apps to they can translate keywords to values both ways for a given font (ie fix the way inkscape is unable to name some faces, because it does not find a name for an attribute value).
As a stopgap if would be nice if the fontconfig manual referenced some form of authority for its keyword values, so font authors and font editing tools could be convinced to use the same constant values by default when creating variable instances. That would limit the amount of breakage, before fontconfig fixing was implemented.