@@ -130,3 +130,58 @@ This is especially helpful to generate *really lightweight* documents.::
130
130
free versions of the proprietary fonts.
131
131
132
132
This also violates the *what-you-see-is-what-you-get * feature of Matplotlib.
133
+
134
+ Are we reinventing the wheel?
135
+ -----------------------------
136
+ Internally, a feasible response to the question of 'reinventing the
137
+ wheel would be, well, Yes *and No *. The font-matching algorithm used
138
+ by Matplotlib has been *inspired * by web browsers, more specifically,
139
+ `CSS Specifications <http://www.w3.org/TR/1998/REC-CSS2-19980512/ >`_!
140
+
141
+ Currently, the simplest way (and the only way) to tell Matplotlib what fonts
142
+ you want it to use for your document is via the **font.family ** rcParam,
143
+ see :doc: `Customizing text properties </tutorials/text/text_props >`.
144
+
145
+ This is similar to how one tells a browser to use multiple font families
146
+ (specified in their order of preference) for their HTML webpages. By using
147
+ **font-family ** in their stylesheet, users can essentially trigger a very
148
+ useful feature provided by browers, known as Font-Fallback. For example, the
149
+ following snippet in an HTMl markup would:
150
+
151
+ .. code-block :: html
152
+
153
+ <style >
154
+ someTag {
155
+ font-family : Arial , Helvetica , sans-serif ;
156
+ }
157
+ </style >
158
+
159
+ <!-- somewhere in the main body -->
160
+ <someTag >
161
+ some text
162
+ </someTag >
163
+
164
+
165
+ For every character/glyph in *"some text" *, the browser will iterate through
166
+ the whole list of font-families, and check whether that character/glyph is
167
+ available in that font-family. As soon as a font is found which has the
168
+ required glyph(s), the browser moves on to the next character.
169
+
170
+ How does Matplotlib achieve this?
171
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
172
+ Well, Matplotlib doesn't achieve this, *yet *. It was initially only designed to
173
+ use a **single font ** throughout the document, i.e., no matter how many
174
+ families you pass to **font.family ** rcParam, Matplotlib would use the very
175
+ first font it's able to find on your system, and try to render all your
176
+ characters/glyphs from that *and only that * font.
177
+
178
+ .. note ::
179
+ This is, because the internal font matching was written/adapted
180
+ from a very old `CSS1 spec <http://www.w3.org/TR/1998/REC-CSS2-19980512/ >`_,
181
+ **written in 1998 **!
182
+
183
+ However, allowing multiple fonts for a single document (also enabling
184
+ Font-Fallback) is one of the goals for 2021's Google Summer of Code project.
185
+
186
+ `Read more on Matplotblog <https://matplotlib.org/matplotblog/ >`_!
187
+
0 commit comments