### 39.1 Introduction to alt-display

The alt-display package provides a means to change the way that Maxima displays its output. The *alt-display1d* and *alt-display2d* Lisp hooks were introduced to Maxima in 2002, but were not easily accessible from the Maxima REPL until the introduction of this package.

The package provides a general purpose function to define alternative display functions, and a separate function to set the display function. The package also provides customized display functions to produce output in TeX, Texinfo, XML and all three output formats within Texinfo.

Here is a sample session:

    (%i1) load("alt-display.mac")$
    (%i2) set_alt_display(2,tex_display)$

    (%i3) x/(x^2+y^2) = 1;
    \mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}=1$$

    (%i4) set_alt_display(2,mathml_display)$

    (%i5) x/(x^2+y^2) = 1;
    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
    <mfenced separators=""><msub><mi>%o</mi> <mn>5</mn></msub>
    <mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
    <mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
    <mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
    <mn>1</mn> </mfenced> </math>

    (%i6) set_alt_display(2,multi_display_for_texinfo)$

    (%i7) x/(x^2+y^2) = 1;

    @iftex
    @tex
    \mbox{\tt\red({\it \%o_7}) \black}$${{x}\over{y^2+x^2}}=1$$
    @end tex
    @end iftex
    @ifhtml
    @html

    <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
    <mfenced separators=""><msub><mi>%o</mi> <mn>7</mn></msub>
    <mo>,</mo><mfrac><mrow><mi>x</mi> </mrow> <mrow><msup><mrow>
    <mi>y</mi> </mrow> <mn>2</mn> </msup> <mo>+</mo> <msup><mrow>
    <mi>x</mi> </mrow> <mn>2</mn> </msup> </mrow></mfrac> <mo>=</mo>
    <mn>1</mn> </mfenced> </math>
    @end html
    @end ifhtml
    @ifinfo
    @example
    (%o7) x/(y^2+x^2) = 1
    @end example
    @end ifinfo

If the alternative display function causes an error, the error is trapped and the display function is reset to the default display. In the following example, the `error` function is set to display the output. This throws an error, which is handled by resetting the 2d-display to the default.

    (%i8) set_alt_display(2,?error)$

    (%i9) x;

    Error in *alt-display2d*.
    Messge: Condition designator ((MLABEL) $%O9 $X) is not of type (OR SYMBOL STRING
                                                                 FUNCTION).
    *alt-display2d* reset to nil.
     -- an error. To debug this try: debugmode(true);

    (%i10) x;
    (%o10)                                 x