(maxima.info)Functions and Variables for alt-display
39.2 Functions and Variables for alt-display
============================================
-- Function: define_alt_display (<function>(<input>), <expr>)
This function is similar to 'define': it evaluates its arguments
and expands into a function definition. The <function> is a
function of a single input <input>. For convenience, a
substitution is applied to <expr> after evaluation, to provide easy
access to Lisp variable names.
Set a time-stamp on each prompt:
(%i1) load("alt-display.mac")$
(%i2) display2d:false$
(%i3) define_alt_display(time_stamp(x),
block([alt_display1d:false,alt_display2d:false],
prompt_prefix:printf(false,"~a~%",timedate()),
displa(x)));
(%o3) time_stamp(x):=block([\*alt\-display1d\*:false,
\*alt\-display2d\*:false],
\*prompt\-prefix\*:printf(false,"~a~%",timedate()),displa(x))
(%i4) set_alt_display(1,time_stamp);
(%o4) done
2017-11-27 16:15:58-06:00
(%i5)
The input line '%i3' defines 'time_stamp' using
'define_alt_display'. The output line '%o3' shows that the Maxima
variable names 'alt_display1d', 'alt_display2d' and 'prompt_prefix'
have been replaced by their Lisp translations, as has 'displa' been
replaced by '?displa' (the display function).
The display variables 'alt_display1d' and 'alt_display2d' are both
bound to 'false' in the body of 'time_stamp' to prevent an infinite
recursion in 'displa'.
-- Function: info_display (<form>)
This is an alias for the default 1-d display function. It may be
used as an alternative 1-d or 2-d display function.
(%i1) load("alt-display.mac")$
(%i2) set_alt_display(2,info_display);
(%o2) done
(%i3) x/y;
(%o3) x/y
-- Function: mathml_display (<form>)
Produces MathML output.
(%i1) load("alt-display.mac")$
(%i2) set_alt_display(2,mathml_display);
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>mlabel</mi>
<mfenced separators=""><msub><mi>%o</mi> <mn>2</mn></msub>
<mo>,</mo><mi>done</mi> </mfenced> </math>
-- Function: tex_display (<form>)
Produces TeX output.
(%i2) set_alt_display(2,tex_display);
\mbox{\tt\red({\it \%o_2}) \black}$$\mathbf{done}$$
(%i3) x/(x^2+y^2);
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$
-- Function: multi_display_for_texinfo (<form>)
Produces Texinfo output using all three display functions.
(%i2) set_alt_display(2,multi_display_for_texinfo)$
(%i3) x/(x^2+y^2);
@iftex
@tex
\mbox{\tt\red({\it \%o_3}) \black}$${{x}\over{y^2+x^2}}$$
@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>3</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> </mfenced> </math>
@end html
@end ifhtml
@ifinfo
@example
(%o3) x/(y^2+x^2)
@end example
@end ifinfo
-- Functions: reset_displays ()
Resets the prompt prefix and suffix to the empty string, and sets
both 1-d and 2-d display functions to the default.
-- Function: set_alt_display (<num>, <display-function>)
The input <num> is the display to set; it may be either 1 or 2.
The second input <display-function> is the display function to use.
The display function may be either a Maxima function or a 'lambda'
expression.
Here is an example where the display function is a 'lambda'
expression; it just displays the result as TeX.
(%i1) load("alt-display.mac")$
(%i2) set_alt_display(2, lambda([form], tex(?caddr(form))))$
(%i3) integrate(exp(-t^2),t,0,inf);
$${{\sqrt{\pi}}\over{2}}$$
A user-defined display function should take care that it _prints_
its output. A display function that returns a string will appear
to display nothing, nor cause any errors.
-- Function: set_prompt (<fix>, <expr>)
Set the prompt prefix or suffix to <expr>. The input <fix> must
evaluate to one of 'prefix', 'suffix', 'general', 'prolog' or
'epilog'. The input <expr> must evaluate to either a string or
'false'; if 'false', the <fix> is reset to the default value.
(%i1) load("alt-display.mac")$
(%i2) set_prompt('prefix,printf(false,"It is now: ~a~%",timedate()))$
It is now: 2014-01-07 15:23:23-05:00
(%i3)
The following example shows the effect of each option, except
'prolog'. Note that the 'epilog' prompt is printed as Maxima
closes down. The 'general' is printed between the end of input and
the output, unless the input line ends in '$'.
Here is an example to show where the prompt strings are placed.
(%i1) load("alt-display.mac")$
(%i2) set_prompt(prefix,"<<prefix>> ",suffix,"<<suffix>> ",general,
printf(false,"<<general>>~%"),epilog,printf(false,"<<epilog>>~%"));
(%o2) done
<<prefix>> (%i3) <<suffix>> x/y;
<<general>>
x
(%o3) -
y
<<prefix>> (%i4) <<suffix>> quit();
<<general>>
<<epilog>>
Here is an example that shows how to colorize the input and output
when Maxima is running in a terminal or terminal emulator like
Emacs(1).
(%i1) load("alt-display.mac")$
(%i2) cs(s) := printf(false,"~c[~am",ascii(27),s)$
(%i3) set_prompt(prefix,cs("1;31"),suffix,cs("0;32"),general,cs("1;34"),epilog,cs("00;"));
(%o3) done
[1;31m(%i4)[0;32m integrate(exp(-x^2),x,0,inf);[1;34m
sqrt(%pi)
(%o4) ---------
2
[1;31m(%i5)[00;m
Each prompt string starts with the ASCII escape character (27)
followed by an open square bracket (91); each string ends with a
lower-case m (109). The webpages
<http://misc.flogisoft.com/bash/tip_colors_and_formatting> and
<http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html> provide
information on how to use control strings to set the terminal
colors.
---------- Footnotes ----------
(1) Readers using the 'info' reader in 'Emacs' will see the actual
prompt strings; other readers will see the colorized output
automatically generated by info2www version 1.2.2.9