Text output without TeX¶
General aspects¶
How can I typeset text in PyX without TeX?¶
Starting with PyX 0.15, an additional typesetting engine besides the TeX and LaTeX engine is available: the Unicode engine. It can be made the default typesetting engine by:
text.set(text.UnicodeEngine)
The font and its size can be specified through additional parameters like in this example:
text.set(text.UnicodeEngine, fontname='cmss10', size=20)
Do I still need a TeX installation?¶
Not necessarily. However, PyX needs to have access to the Type1 fonts it is
supposed to use in the typesetting. Specifically, it needs the corresponding
pfb
and afm
files. There are different ways to provide them.
The first possibility is indeed a TeX installation. This approach makes particularly sense if the fonts to be used are made available by a TeX distribution. For example, the Computer Modern fonts used by PyX as default fonts are provided by all TeX installations.
If, on the other hand, a font is to be used for which no TeX support is readily
available, its pfb
and afm
files can be put in the directory where
the Python script is placed. The font will then be found by PyX if the parameter
fontname
corresponds to the basename of the pfb
and afm
files.
The latter approach is not optimal if the font is used in different PyX scripts scattered over several directories or if a larger number of fonts is needed. Then it is better to store the Type1 font files in a central place and to tell PyX about the files as explained in the following example.
Suppose the standard TeX fonts should be used without a TeX installation. The
fonts can be obtained in Type1 format from
https://www.ams.org/publications/authors/tex/amsfonts.
Extract the zip file somewhere on your file system and generate an index file
(ls-R) by running ls -R > ls-R
in the directory to which the fonts were
extracted. Finally create a .pyxrc
file in your home directory with the
following content:
[filelocator]
methods = local internal ls-R
ls-R = /<the full path of the directory you extracted the amsfonts zip file>/ls-R
The generation of the index file can be skipped by using the recursivedir
locator instead:
[filelocator]
methods = local internal recursivedir
recursivedir = /<the full path of the directory you extracted the amsfonts zip file>
However, the use of an index file increases performance, as PyX does not need to crawl the directory structure to locate the actual files.
Is it possible to use the Unicode engine in addition to the TeX engine?¶
Yes, it is possible to use different typesetting engines in the same script.
The following example uses the Unicode engine and the TeX engine to typeset
text on a canvas c
:
unicode_engine = text.UnicodeEngine()
c.insert(unicode_engine.text(0, 0, "Hello, world!"))
tex_engine = text.TexEngine()
c.insert(tex_engine.text(0, 1, "Hello, world!"))
If needed, the font name and size can be passed as parameters to the
UnicodeEngine
constructor:
engine = text.UnicodeEngine(fontname='cmss10', size=20)