ws change
[PyX/mjg.git] / faq / pyxfaq.tex
blob6abceccfa7d10c54a72f377f8272ea9f159041d6
1 \documentclass[11pt,DIV14]{scrartcl}
2 \usepackage[latin1]{inputenc}
3 \usepackage{url}
4 \usepackage{rcs}
5 \usepackage{mathptmx}
6 %\usepackage[all,comments]{glifaq}
7 \usepackage[answered]{glifaq}
8 \usepackage[pdftex]{hyperref}
9 \hypersetup{pdftitle={PyX FAQ}%
10 ,pdfauthor={\textcopyright\ Gert-Ludwig Ingold
11 <gert.ingold@physik.uni-augsburg.de>}%
12 ,colorlinks=true%
13 ,linkcolor=blue}
14 \begin{document}
15 \RCS $Id$
16 \RCS $Revision$
17 \RCS $Date$
18 \begin{center}
19 \LARGE\sffamily Some frequently and\\
20 not so frequently asked questions\\
21 about \PyX\footnote{This version of the FAQ is intended for use with \PyX\
22 version 0.5.1.}\\
23 \par
24 {\small\sffamily (version \RCSRevision\ of \RCSDate)}\\[1truecm]
25 \large
26 Gert-Ludwig Ingold \par
27 \href{mailto:gert.ingold@physik.uni-augsburg.de}{\url{<gert.ingold@physik.uni-augsburg.de>}}
28 \end{center}
29 \toc
31 \vspace{2truecm}
32 \section*{Acknowledgements}
33 The following persons have in one way or the other contributed to the answers
34 given in this FAQ:\\
35 Jörg Lehmann, Michael Schindler, Andr{\'e} Wobst.
36 \newpage
38 \section{General aspects of \PyX}
39 \question{a}{Where do I get the latest version of \PyX?}
41 {The current release of \PyX{} (as well as older ones) is freely available
42 from \url{http://pyx.sourceforge.net} where also a CVS repository with the
43 latest patches can be found. Possibly older versions of \PyX{} are
44 also available as package for
45 various Linux distributions: see, for instance,
46 \url{http://packages.debian.org/testing/python/python-pyx.html} for
47 information on the \PyX{} package in Debian GNU/Linux,
48 \url{http://packages.gentoo.org/ebuilds/?pyx-0.3.1} for a Gentoo Linux
49 ebuild, and
50 \url{http://www.suse.de/en/private/products/suse_linux/i386/packages_professional/python-pyx.html}
51 for the \PyX{} package in the SUSE LINUX professional distribution.
54 \question{c}{How can I determine the version of \PyX{} running on my
55 machine?}
57 {Start a python session (usually by typing \texttt{python} at the system
58 prompt) and then type the following two commands (\texttt{>>>} is the python
59 prompt)
60 \begin{progcode}
61 >>> import pyx\\
62 >>> pyx.\us\us{}version\us\us
63 \end{progcode}
66 \question{c}{Does \PyX{} run under my favorite operating system?}
68 {Yes, if you have installed Python (\uaref{q:what_is_python})
69 and \TeX{} (\uaref{q:what_is_tex}). Both are available for
70 a large variety of operating systems so chances are pretty good that you will
71 get \PyX{} to work on your system.
74 \question{c}{Under which versions of Python will \PyX{} run?}
76 {\PyX{} is supposed to work with Python 2.0 and above. However, most of the
77 development takes place under the current production version of Python (2.3.3
78 by the time of this writing) and thus \PyX{} is better tested with this version. On the other hand, the examples and tests are verified to run with all Python
79 versions 2.x. \PyX{} will not work with Python 1.x due to missing language
80 features.
82 The version of your Python interpreter can be determined by calling
83 it with the option \texttt{-V}. Alternatively, you can simply start the
84 interpreter and take a look at the startup message. Note that there may be
85 different versions of Python installed on your system at the same time. The
86 default Python version need not be the same for all users.
89 \question{a}{Where can I get help if my question is not answered in this FAQ?}
91 {The \PyX{} sources contain a reference manual and a set of examples
92 demonstrating various features of \PyX. If the feature you are looking for is
93 among them, using the appropriate part of the example code or adapting it for
94 your purposes may help.
96 There is also a user discussion list about \PyX{} which you can subscribe to
97 at \url{http://lists.sourceforge.net/lists/listinfo/pyx-user}. The archive of
98 the discussion list is available at \url{http://sourceforge.net/mailarchive/forum.php?forum_id=23700}.
100 Finally, it might be worth checking \url{http://pyx.sourceforge.net/pyxfaq.pdf}
101 for an updated version of this FAQ.
104 \section{Python}
106 \question{c}{What is Python?}
108 {\label{q:what_is_python}
109 From \url{www.python.org}:
110 \begin{quote}
111 Python is an \textit{interpreted, interactive, object-oriented} programming
112 language. It is often compared to Tcl, Perl, Scheme or Java.
114 Python combines remarkable power with very clear syntax. It has modules,
115 classes, exceptions, very high level dynamic data types, and dynamic typing.
116 There are interfaces to many system calls and libraries, as well as to various
117 windowing systems (X11, Motif, Tk, Mac, MFC). New built-in modules are easily
118 written in C or C++. Python is also usable as an extension language for
119 applications that need a programmable interface.
121 The Python implementation is portable: it runs on many brands of UNIX, on
122 Windows, OS/2, Mac, Amiga, and many other platforms. If your favorite system
123 isn't listed here, it may still be supported, if there's a C compiler for it.
124 Ask around on \href{news:comp.lang.python}{news:comp.lang.python} --- or just
125 try compiling Python yourself.
127 The Python implementation is
128 \href{http://www.python.org/doc/Copyright.html}{copyrighted}
129 but \textbf{freely usable and distributable, even for commercial use}.
130 \end{quote}
133 \question{a}{Where can I learn more about Python?}
135 {The place to start is \url{www.python.org} where you will find plenty of
136 information on Python including tutorials.
139 \question{c}{What do I need to import in order to use \PyX?}
141 {It is recommended to begin your Python code with
142 \begin{progcode}
143 from pyx import *
144 \end{progcode}
145 when using \PyX. This allows you for example to write simply
146 \texttt{graph.graphxy}
147 instead of \texttt{pyx.graph.graphxy}. The following modules will be loaded:
148 \texttt{box}, \texttt{canvas}, \texttt{color}, \texttt{connector}, \texttt{data},
149 \texttt{deco}, \texttt{epsfile}, \texttt{graph}, \texttt{path},
150 \texttt{style}, \texttt{trafo}, \texttt{tex}, \texttt{text}, and
151 \texttt{unit}.
153 For convenience, you might import specific objects of a module like in
154 \begin{progcode}
155 from graph import graphxy
156 \end{progcode}
157 which allows you to write \texttt{graphxy()} instead of \texttt{graph.graphxy()}.
159 All code segments in this document assume that the import line mentioned in
160 the first code snippet is present.
163 \question{a}{What is a raw string and why should I know about it when
164 using \PyX?}
166 {\label{q:raw_string}
167 The backslash serves in standard Python strings to start an escape sequence.
168 For example {\cs n} corresponds to a newline character. On the other hand,
169 \TeX{} and \LaTeX{}, which do the typesetting in \PyX, use the backslash to
170 indicate the start of a command. In order to avoid the standard interpretation,
171 the string should be marked as a raw string by prepending it by an \texttt{r}
172 like in
173 \begin{progcode}
174 c.text(0, 0, r"\${\cs alpha}{\cs beta}{\cs gamma}\$")
175 \end{progcode}
178 \section{Plotting of graphs}
180 \subsection{General aspects}
182 \question{c}{How do I generate a graph from data as simply as possible?}
184 {\label{q:mingraphdata}
185 Suppose that you have a data file \texttt{x.dat} containing values for
186 $x$ and $y$ in two columns. Then the following code will do the job
187 \begin{progcode}
188 from pyx import *\\
190 g = graph.graphxy(width=10)\\
191 g.plot(graph.data("x.dat", x=1, y=2))\\
192 g.writetofile("x")
193 \end{progcode}
194 \texttt{graphxy} creates a canvas (called \texttt{g} in this example) onto
195 which the graph will be drawn and it sets the default behavior including the
196 axis. There is, however, no default value for the width of the graph. In
197 \texttt{plot} you have to specify the name of the data file and the columns
198 from which the data should be taken. Finally, \texttt{writetofile} will
199 generate the postscript file \texttt{x.eps} which you can view or print.
201 A minimal example is also provided in the \PyX{} distribution as
202 \path{examples/graphs/minimal.py}.
205 \question{a}{How do I generate a graph of a function as simply as possible?}
207 {The following example will draw a parabola:
208 \begin{progcode}
209 from pyx import *\\
211 g = graph.graphxy(width=10,\\
212 ~~~~~~~~~~~~~~~~~~x=graph.linaxis(min=-2, max=2)\\
213 ~~~~~~~~~~~~~~~~~~)\\
215 g.plot(graph.function("y=x**2"))\\
217 g.writetofile("x")
218 \end{progcode}
219 Most of the code has been explained in \uaref{q:mingraphdata}. The main
220 difference is that here you need to specify minimum and maximum for the
221 $x$-axis so that \PyX{} knows in which range to evaluate the function.
223 See \uaref{q:zeropathattrs} for an explanation of how one can suppress the
224 zero lines.
226 Another, slightly more complex, example is also provided in the \PyX{}
227 distribution as \path{examples/graphs/piaxis.py}.
230 \question{a}{How can I stack graphs?}
232 {\PyX{} always needs a canvas to draw on. One possibility therefore consists
233 in creating a new canvas with
234 \begin{progcode}
235 c = canvas.canvas()
236 \end{progcode}
237 and inserting the graphs into this canvas with \texttt{c.insert(...)}. Here,
238 \texttt{...} has to be replaced by the name of the graph. Alternatively, the
239 canvas created with \texttt{graph.graphxy} for one of the graphs can be used
240 to insert the other graphs even if they will be positioned outside the
241 first graph.
243 The second issue to address is positioning of the graphs. By specifying
244 \texttt{xpos} and \texttt{ypos} when calling \texttt{graphxy}, you can
245 define the position of a graph. Later on, the position and size of a
246 graph \texttt{g} can be referred to as \texttt{g.xpos}, \texttt{g.ypos},
247 \texttt{g.width}, and \texttt{g.height} even if for example the height has
248 never been specified explicitly but is only defined by a \PyX{} default.
250 The following example shows how to put graph \texttt{gupper} above graph
251 \texttt{glower} on a canvas \texttt{c}:
252 \begin{progcode}
253 from pyx import *\\
254 from graph import graphxy\\
256 c = canvas.canvas()\\
258 glower = graphxy(width=10)\\
259 glower.plot(...)\\
260 c.insert(glower)\\
262 gupper = graphxy(width=10, ypos=glower.ypos+glower.height+2)\\
263 gupper.plot(...)\\
265 c.insert(gupper)\\
266 c.writetofile(...)
267 \end{progcode}
268 where \texttt{...} has to be replaced by the appropriate information like
269 data and symbol specifications and the name of the output file. Here,
270 \texttt{c.insert} is used to actually insert the subcanvasses
271 for the graphs into the main canvas \texttt{c} and \texttt{c.writetofile}
272 in the last line requests to write the contents of this canvas to a file.
274 %In order to suppress the labels of the $x$-axis of the upper graph, use
275 %\begin{progcode}
276 %myaxispainter = graph.axispainter(labelattrs=None)
278 %gupper = graph.graphxy(...,
279 % x=graph.linaxis(...,
280 % part=graph.linpart(),
281 % painter=myaxispainter)
283 %\end{progcode}
286 \question{a}{How can I plot grid data? \new}
288 {\PyX{} offers support for plotting three-dimensional data as two-dimensional
289 color plots or grey-scale plots and of vector fields by providing ways to
290 plot rectangles and arrows in graphs.
292 We start by considering the task of creating a two-dimensional color plot by
293 plotting a number of filled rectangles. One first needs to create a data set
294 which consists of five entries per data point. These are the lower left corner
295 $(x_\mathrm{min},y_\mathrm{min})$ and the upper right corner
296 $(x_\mathrm{max},y_\mathrm{max})$ of the triangle and a value between 0 and 1
297 determining the color via a \PyX{} color palette. The following code gives an
298 idea of how to proceed:
299 \begin{progcode}
300 g.plot(graph.data("datafile.dat"), xmin=0, xmax=1, ymin=2, ymax=3, color=4),\\
301 ~~~~~~~graph.rect(color.palette.ReverseRainbow)\\
302 ~~~~~~)\\
303 g.dodata()
304 \end{progcode}
305 Here, we assume that the data are stored in \texttt{datafile.dat} and the
306 columns contain $x_\mathrm{min}$, $x_\mathrm{max}$, $y_\mathrm{min}$,
307 $y_\mathrm{max}$, and the color value in this order. To determine the color,
308 we use the \texttt{ReverseRainbow} palette. The last line instructs \PyX{} to
309 plot the rectangles before plotting the axes. Otherwise, the axes might be
310 covered partially by the rectangles and, in particular, the ticks might not
311 be visible. Grey-scale plots can easily be generated by specifying the palette
312 \texttt{Gray} or \texttt{ReverseGray} (cf.\ appendix C of the manual for a list
313 of predefined palettes).
315 At first sight, it seems surprising that plotting of grid data requires
316 the specification of four coordinates for the rectangle. The reason is that
317 this allows to draw rectangles of varying sizes which may help to reduce the
318 size of the postscript file by combining rectangles of the same color in
319 horizontal or vertical direction. For example, it may be sufficient to plot
320 a grey-scale image in a small number of grey shades and then combining
321 rectangles may be appropriate. Note, though, that this step is part of the
322 data creation and not preformed by \PyX{}. Another advantage of fully
323 specifying each rectangle is that it is straightforward to leave parts of the
324 graph blank.
326 A frequent task is to rescale data to the interval $[0,1]$. Suppose that the
327 data are stored in the variable \texttt{data} and that the fifth column
328 (denoted in Python by the index 4) has to be rescaled. Then the following
329 python code will do the job:
330 \begin{progcode}
331 datamax = max(*[d[4] for d in data])\\
332 datamin = min(*[d[4] for d in data])\\
333 for d in data:\\
334 ~~d[4] = (d[4]-datamin)/(datamax-datamin)
335 \end{progcode}
337 The same ideas as for the color plot can be applied to plot vector fields where
338 each data point is represented by an arrow. In this case a data point is
339 specified by the position of the arrow, its size and its direction as indicated
340 in the following code snippet:
341 \begin{progcode}
342 g.plot(graph.data("datafile.dat"), x=0, y=1, size=2, angle=3),\\
343 ~~~~~~~graph.arrow()\\
344 ~~~~~~)
345 \end{progcode}
347 Complete code examples can be found in \path{examples/graphs/mandel.py} and
348 \path{examples/graphs/arrows.py}\,.
351 \question{t}{I would like a key for only some of my data sets. How do I do
352 that?}
357 \subsection{Axis properties}
359 \question{a}{How do I specify the tick increment? \changed}
361 {In the partition of a linear axis, the increments associated with ticks,
362 subticks etc.\ can be specified as argument of \texttt{linpart}. In the
363 following example, ticks will be drawn at even values while subticks will
364 be drawn at all integers:
365 \begin{progcode}
366 tg = graph.graphxy(width=10,\\
367 ~~~~~~~~~~~~~~~~~~~x=graph.linaxis(min=1, max=10,\\
368 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~parter=graph.linparter(tickdist=[2,1]))\\
369 ~~~~~~~~~~~~~~~~~~~)
370 \end{progcode}
373 \question{a}{How do I get rid of the zero line?}
375 {\label{q:zeropathattrs}
376 The \texttt{axispainter} takes an argument \texttt{zeropathattrs} which
377 defaults to an empty list. Setting the \texttt{axispainter} for the
378 appropriate axis to \texttt{None} will remove the zero line like in this
379 example:
380 \begin{progcode}
381 myaxispainter = graph.axispainter(zeropathattrs=None)\\
383 g = graph.graphxy(width=10,\\
384 ~~~~~~~~~~~~~~~~~~x=graph.linaxis(min=-5, max=5, painter=myaxispainter),\\
385 ~~~~~~~~~~~~~~~~~~y=graph.linaxis(min=-5, max=5)\\
386 ~~~~~~~~~~~~~~~~~~)
387 \end{progcode}
388 This will keep the horizontal zero line but discard the vertical one.
391 \subsection{Data properties}
393 \question{a}{How do I choose the symbol?}
395 {\label{q:choose_symbol}
396 Suppose a graph called \texttt{g} has been initialized, e.g. by using
397 \texttt{graph.graphxy}. Then, data and the style of their representation
398 in the graph are defined by calling \texttt{g.plot} like in the following
399 example in which filled circles are requested:
400 \begin{progcode}
401 g.plot(graph.data("test.dat"),\\
402 ~~~~~~~graph.symbol(graph.symbol.circle, symbolattrs=[deco.filled])\\
403 ~~~~~~~)
404 \end{progcode}
407 \question{a}{How do I choose the color of the symbols?}
409 {Colors are not properties of the symbol as such and can therefore not
410 be specified in \texttt{symbolattrs} directly. The color is rather related
411 to the plotting of the symbol as defined by \texttt{deco.stroked} or
412 \texttt{deco.filled}. With
413 \begin{progcode}
414 graph.symbol(graph.symbol.circle,\\
415 ~~~~~~~~~~~~~symbolattrs=[deco.stroked([color.rgb.red]),\\
416 ~~~~~~~~~~~~~~~~~~~~~~~~~~deco.filled([color.rgb.green])]\\
417 ~~~~~~~~~~~~~)
418 \end{progcode}
419 you will obtain a circle filled in green with a red borderline.
422 \question{a}{How do I choose the line style?}
424 {If you do not want to use symbols, you can set the line style as in this
425 example
426 \begin{progcode}
427 g.plot(graph.data("test.dat"),\\
428 ~~~~~~~graph.line(lineattrs=[style.linewidth.Thin])\\
429 ~~~~~~~)
430 \end{progcode}
431 where the linewidth is set.
433 If you also want to use symbols, you can set the line attributes together
434 with the symbols. Extending the example in \ref{q:choose_symbol}),
435 you could use
436 \begin{progcode}
437 g.plot(graph.data("test.dat"),\\
438 ~~~~~~~graph.symbol(graph.symbol.circle, \\
439 ~~~~~~~~~~~~~~~~~~~~symbolattrs=[deco.filled],\\
440 ~~~~~~~~~~~~~~~~~~~~lineattrs=[style.linewidth.Thin, style.linestyle.dashed]\\
441 ~~~~~~~~~~~~~~~~~~~~)\\
442 ~~~~~~~)
443 \end{progcode}
444 to set the linewidth and to choose dashed lines.
447 \section{\TeX{} and \LaTeX{}}
449 \subsection{General aspects}
451 \question{a}{What is \TeX/\LaTeX{} and why do I need it?}
453 {\label{q:what_is_tex}
454 \TeX{} is a high quality typesetting system developed by Donald E. Knuth
455 which is available for a wide variety of operating systems. \LaTeX{} is a
456 macro package originally developed by Leslie Lamport which makes life with
457 \TeX{} easier, in particular for complex typesetting tasks. The current
458 version of \LaTeX{} is referred to as \LaTeXe{} and offers e.g.\ improved
459 font selection as compared to the older \LaTeX{} 2.09 which should no longer
460 be used.
462 All typesetting tasks in \PyX{} are finally handed over to \TeX{} (which is the
463 default) or \LaTeX{}, so that \PyX{} cannot do without it. On the other hand,
464 the capabilities of \TeX{} and \LaTeX{} can be used for complex tasks where
465 both graphics and typesetting are needed.
468 \question{a}{I don't know anything about \TeX{} and \LaTeX{}. Where can I read
469 something about it?}
471 {\label{q:intro_tex_latex}
472 Take a look at CTAN (\uaref{q:ctan}) where in \ctan{info}
473 you may be able to find some useful information. There exists for example
474 ``A Gentle Introduction to \TeX'' by M.~Doob (\ctan{gentle/gentle.pdf}) and
475 ``The Not So Short Introduction to \LaTeXe''
476 (\ctan{info/lshort/english/lshort.pdf}) by T.~Oetiker et al. The latter has
477 been translated into a variety of languages among them korean (which you will
478 not be able to read unless you have appropriate fonts installed) and mongolian.
480 Of course, it is likely that these documents will go way beyond what you
481 will need for generating graphics with \PyX{} so you don't have to read all
482 of it (unless you want to use \TeX{} or \LaTeX{} for typesetting which can be
483 highly recommended).
485 There exists also a number of FAQs on \TeX{} at \ctan{help}.
488 \question{a}{What is CTAN?}
490 {\label{q:ctan}
491 CTAN is the Comprehensive TeX Archive Network where you will find almost
492 everything related to \TeX{} and friends. The main CTAN servers are
493 \url{tug.ctan.org}, \url{dante.ctan.org}, and \url{cam.ctan.org}. A list of
494 FTP mirrors can be found at \ctan{CTAN.sites}.
496 In this FAQ, \texttt{CTAN:} refers to the root of an anonymous ftp CTAN tree,
497 e.g. \url{ftp://ctan.tug.org/tex-archive/},
498 \url{ftp://ftp.dante.de/tex-archive/},
499 and \url{ftp://ftp.tex.ac.uk/tex-archive/}. The links to CTAN in this document
500 point to one of these servers but you might consider using a FTP mirror closer
501 to you in order to reduce traffic load.
504 \question{a}{Is there support for Con\TeX{}t?}
506 {No, and as far as I know there no plans to provide it in the near future.
507 Given the close ties between Con\TeX{}t and Meta\-Post, Con\TeX{}t users
508 probably prefer to stick with the latter anyway.
511 \subsection{\TeX{} and \LaTeX{} commands useful for \PyX}
513 \question{a}{How do I get a specific symbol with \TeX{} or \LaTeX?}
515 {A list of mathematical symbols together with the appropriate command name
516 can be found at \ctan{info/symbols/math/symbols.ps}. A comprehensive list
517 containing more than 2500 symbols for use with \LaTeX{} can be obtained from
518 \ctan{info/symbols/comprehensive/symbols-a4.pdf}. In some cases it might be
519 necessary to install fonts or packages available from CTAN
520 (\uaref{q:ctan}).
523 \subsection{\TeX{} and \LaTeX{} errors}
525 \question{a}{Undefined control sequence \cs{usepackage}}
527 {\label{q:undefined_usepackage}
528 The command \cs usepackage is specific to \LaTeX{}. Since by default \PyX{}
529 uses \TeX{}, you have to specify the correct mode:
530 \begin{progcode}
531 text.set(mode="latex")
532 \end{progcode}
535 \question{a}{Undefined control sequence \cs{frac}}
537 {\label{q:undefined_frac}
538 The command \cs frac is only available in \LaTeX{}. In \TeX{} you should
539 use \texttt{\cb{a\cs over b}} in math mode to produce ${a\over b}$. As an
540 alternative you may ask for the \LaTeX{} mode as explained in
541 \ref{q:undefined_usepackage}.
544 \question{a}{Missing \$ inserted}
546 {You have specified \TeX- or \LaTeX-code which is only valid in math mode.
547 Typical examples are greek symbols, sub- and superscripts or fractions.
549 On the \PyX{} level, you can specify math mode for the whole string by using
550 \texttt{text.mathmode} as in
551 \begin{progcode}
552 c.text(0, 0, r"{\cs alpha}", text.mathmode)
553 \end{progcode}
554 Keep also in mind that the standard Python interpretation of the backslash as
555 introducing escape sequences needs to be prevented
556 \uaref{q:raw_string}.
558 On the \TeX/\LaTeX{} level you should enclose the commands requiring math
559 mode in \$'s. As an example, \texttt{\$\cs alpha\us i\hat j\$} will produce
560 $\alpha_i^j$. This allows you to specify math mode also for substrings. There
561 exist other ways to specify math mode in \TeX{} and \LaTeX{} which are
562 particularly useful for more complex typesetting tasks. To learn more about
563 it, you should consult the documentation
564 \uaref{q:intro_tex_latex}.
567 \question{a}{Font shape `OT1/xyz/m/n' undefined}
569 {\label{q:fontshape_undefined}
570 You have asked to use font \texttt{xyz} which is not available. Make sure that
571 you have this font available in Type1 format, i.e.\ there should be a
572 file \texttt{xyz.pfb} somewhere. If your \TeX{} system is TDS compliant
573 (TDS=\TeX{} directory structure, cf.\ \ctan{tds/draft-standard/tds/tds.pdf})
574 you should take a look at the subdirectories of
575 \path{TEXMF/fonts/type1}.
578 \question{a}{File \dots\ is not available or not readable}
580 {\label{q:no_lfs}
581 Such an error message might already occur when running the example file
582 \texttt{hello.py} included in the \PyX{} distribution. Usually, the error
583 occurs due to an overly restrictive umask setting applied when unpacking the
584 \texttt{tar.gz} sources. This may render the file mentioned in the error
585 message unreadable because the python distutil installation package doesn't
586 change the file permissions back to readable for everyone.
588 If the file exists, the problem can be solved by changing the permissions to
589 allow read access.}
591 \question{a}{No information for font `cmr10' found in font mapping file}
593 {\label{q:no_cmr10}
594 Such an error message can already be encountered by simply running the example
595 file \texttt{hello.py} included in the \PyX{} distribution. The likely reason
596 is that the \TeX{} system does not find the cmr fonts in Type1 format.
597 \PyX{} depends on these fonts as it does not work with the traditional
598 pk fonts which are stored as bitmaps.
600 Therefore, the first thing to make sure is that the cmr Type1 fonts are
601 installed. In some \TeX{} installations, the command \texttt{kpsewhich
602 cmr10.pfb} will return the appropriate path if the cmr fonts exist in the
603 binary Type1 format (extension \texttt{pfb}) required by \PyX. If the command
604 does not work but the TeX{} system is TDS compliant
605 (\uaref{q:fontshape_undefined}), a look should be taken at
606 \path{TEXMF/fonts/type1/bluesky/cm} where \texttt{TEXMF} is the root of the
607 \texttt{texmf} tree.
609 If the Type1 fonts do not exist on the system, they may be obtained from
610 the CTAN \uaref{q:ctan} at \ctan{fonts/cm/ps-type1/bluesky}. See the
611 \texttt{README} for information about who produced these fonts and why they
612 are freely available.
614 If the Type1 fonts exist, the next step is to take a look at
615 \texttt{psfonts.map}. There may be several files with this name on the system,
616 so it is important to find out which one TeX is actually using.
617 \texttt{kpsewhich psfonts.map} might give this information.
619 The most likely problem is that this file does not contain a line telling TeX
620 what to do if it encounters a request for font \texttt{cmr10}, i.e. the
621 following line
622 may be missing
623 \begin{progcode}
624 ~~~cmr10~~~~~~~~~~~CMR10~~~~~~~~~~~<cmr10.pfb
625 \end{progcode}
626 It is probable that the required lines (in practice, you do not just need
627 \texttt{cmr10}) are found in a file named \texttt{psfonts.cmz} which resides in
628 \path{TEXMF/dvips/bluesky}.
630 One solution is to instruct \PyX{} to read additional map files like
631 \texttt{psfonts.cmz} or \texttt{psfonts.amz}. This can be achieved by modifying
632 the appropriate \texttt{pyxrc} file which is either the systemwide
633 \texttt{/etc/pyxrc} or \texttt{.pyxrc} in the user's home directory. Here, the
634 names of the map files to be read by \PyX{} should be appended separated by
635 whitespaces like in the following example:
636 \begin{progcode}
637 fontmaps = psfonts.map psfonts.cmz psfonts.amz
638 \end{progcode}
639 The same effect can be achieved by inserting the following line into the
640 \PyX{} code:
641 \begin{progcode}
642 text.set(fontmaps="psfonts.cmz psfonts.amz")
643 \end{progcode}
645 An alternative approach consists in modifying the \TeX{} installation by
646 inserting the contents of the desired map files like \texttt{psfonts.cmz} into
647 \texttt{psfonts.map}. Probably, \texttt{psfonts.map} recommends not to do this
648 by hand. In this case the instructions given in the file should be followed.
649 Otherwise, \texttt{psfonts.cmz} should be copied into \texttt{psfonts.map} while
650 keeping a backup of the old \texttt{psfonts.map} just in case. After these
651 changes, \PyX{} most likely will be happy. When inserting \texttt{psfonts.cmz}
652 into \texttt{psfonts.map} it may be a good idea to include \texttt{psfonts.amz}
653 as well. \texttt{psfonts.amz} contains information about some more fonts which
654 might be needed at some point. Making these changes ot \texttt{psfonts.map}
655 will imply that the \TeX{} system will use the cmr fonts in Type1 format
656 instead of pk format which is actually not a bad thing, in particular if
657 \texttt{latex}~/ \texttt{dvips}~/ \texttt{ps2pdf} is used to generate PDF
658 output. With fonts in pk format this will look ugly and using Type1 fonts
659 solves this problem as well. When \texttt{pdflatex} is used to create PDF files,
660 Type1 fonts will be used anyway.
663 \subsection{Fonts}
665 \question{t}{I have Type1 fonts in \texttt{pfa} format. How do I obtain the
666 corresponding \texttt{pfb} files needed by \PyX?}
671 \question{a}{I want to use a font other than computer modern roman}
673 {\label{q:other_font}
674 As long as you have a font in Type1 format available, this should be no
675 problem (even though it may cost you some time to set up things properly).
677 In the simplest case, your \LaTeX{} system contains everything needed.
678 Including the following line into your code will probably work
679 \begin{progcode}
680 text.set(mode="latex")\\
681 text.preamble(r"\cs{usepackage}\cb{mathptmx}")
682 \end{progcode}
683 and give you Times as roman font.
685 If you own one of the more common commercial fonts, take a look at
686 \ctan{fonts} and its subdirectories as well as at the web page
687 \url{http://home.vr-web.de/was/fonts.html} of Walter Schmidt. It is not
688 unlikely that somebody has already done most of the work for you and created
689 the files needed for the font to work properly with \LaTeX. But remember:
690 we are talking about commercial fonts here, so do not expect to find the fonts
691 themselves for free.
693 If none of these cases applies, you should spend some time reading
694 manuals about font installation, e.g.\ \ctan{macros/latex/doc/fntguide.pdf}
695 (of course, I do not expect font wizards to read the last few lines).
698 \question{a}{Can I use a TrueType font with \PyX?}
700 {Not directly as \PyX{} only knows how to handle Type1 fonts (although it is
701 possible to get \LaTeX{} to work with TrueType fonts). However, you may use
702 \texttt{ttf2pt1} (from \url{http://ttf2pt1.sourceforge.net}) to convert a
703 TrueType font into a Type1 font which you then install in your \TeX{} system
704 \uaref{q:other_font}. You will loose hinting information
705 in the conversion process but this should not really matter on output devices
706 with not too low resolution.
709 \end{document}