123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918 |
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%% Typesetting REDUCE output with TeX %%%%%
- %%%%% by Werner Antweiler %%%%%
- %%%%% University of Cologne Computer Center %%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \input tridefs
- \def\9{\TeX-REDUCE-Interface}
- %
- % LaTeX Version
- %
- \documentstyle[twocolumn]{article}
- \begin{document}
- %
- % Titel
- %
- \title{\Huge A \9}
- \author{Werner Antweiler\thanks{All three authors are with:
- Rechenzentrum der Universit\"{a}t zu K\"{o}ln
- (University of Cologne Computer Center),
- Abt. Anwendungssoftware (Application Software
- Department), Robert-Koch-Stra\ss e 10, 5000 K\"{o}ln 41,
- West Germany.} \\
- Andreas Strotmann\\
- Volker Winkelmann\\
- University of Cologne Computer Center, West Germany}
- \date{Revised Version, \today}
- \maketitle
- %
- \section{Introduction}
- %
- REDUCE is a well known computer algebra system invented by
- Anthony C. Hearn. While every effort was made to improve
- the system's algebraic capabilities, the readability of the
- output remained poor by modern typesetting standards.
- Although a pretty-printer is already incorporated in REDUCE,
- the output is produced only in line-printer quality.
- The simple idea to produce high quality output from REDUCE
- is to link REDUCE with Donald E. Knuth's famous \TeX\ typesetting
- language. This draft reviews our efforts in this direction.
- Our major goals we pursue with TRI are:
- \begin{itemize}
- \item We want to produce REDUCE-output in typesetting quality.
- \item The intermediate files (\TeX-input files) should be easy to edit.
- The reason is that it is likely that the proposed
- line-breaks are sub-optimal from the user's point of view.
- \item We apply a \TeX-like algorithm which ``optimizes''
- the line-breaking over the whole expression. This differs
- fundamentally from the standard left-to-right,
- one-line look-ahead
- pretty-printers of REDUCE, LISP and the like.
- \end{itemize}
- We introduce a program written in RLISP\footnote{the REDUCE
- implementation language, an extended Standard LISP with an
- ALGOL-like syntax.} which typesets REDUCE
- formulas with \TeX. Our \9 incorporates three
- levels of \TeX\ output: without line breaking, with line breaking,
- and with line breaking plus indentation. While speed
- without line breaking is comparable to that achieved with
- REDUCE's pretty-printer, line breaking consumes much more CPU time.
- Nevertheless, we reckon with a cost increase due to line breaking
- which is almost linear in the length of the expression to be broken.
- Our line breaking algorithm mimics \TeX's line breaking in a
- rather rudimentary fashion.
- This paper deals with some of the ideas and algorithms we have
- programmed and it summarizes some of the experiments we have made
- with our program.
- Furthermore, at the end of this paper we provide a small user's manual
- which gives a short introduction to the use of our \9.
- For simplicity's sake the name ``\9'' will be abbreviated to ``TRI''
- in this paper.
- %
- \section{From REDUCE to \TeX: basic concepts}
- %
- The function {\tt TeXvarpri} is the interface to the algebraic
- portion of REDUCE. It first calls a function named {\tt makeprefix}.
- Its job is to change a REDUCE algebraic expression to a standard
- prefix list while retaining the tree structure of the whole expression.
- After this has been done, the
- new intermediate expression is passed to the most important module
- of TRI: the {\tt maketag/makefunc}-family of functions.
- These functions recursively expand the structured list
- (or operator tree) into a flat list, translating each REDUCE symbol or
- expression into so-called \TeX-items on passing by.
- For that reason, the resulting list is called the \TeX-item list.
- If the simple \TeX-mode (without line breaking) was chosen, this list
- is then printed immediately without further considerations.
- Translation and printing this way is almost as fast as with
- the standard REDUCE pretty printer.\par
- When line-breaking has been enabled things get a bit more complicated.
- The greatest effort with TRI was to implement the line-breaking
- algorithm. More than half of the entire TRI code deals with this
- task.
- The ultimate goal is to add some ``break items'', i.e. \verb|\nl|-%
- \TeX-commands\footnote{This is not a \TeX-primitive but a TRI-specific
- \TeX-macro command which expands into a lot of stuff.},
- marking --- in a certain way --- optimal line-breaks.
- Additionally, these break items can be followed immediately by
- ``indentation items'', i.e. \verb|\OFF{...}| \TeX-commands\footnote{see
- previous footnote}, specifying the amount of indentation
- (in scaled points) applicable for the next new line.
- The problem is to choose the right points where to insert these
- special \TeX-items. Therefore, the \TeX-item list undergoes
- three further transformation steps.\par
- First, the \TeX-item list gets enlarged by so-called ``glue items''.
- Glue items are two-element lists, where the first element is a width
- info and the second element is a penalty info.
- The width is determined according to the class of the two \TeX-items
- to the left and to the right. Each \TeX-item is associated with
- one out of eight classes. Following Knuth's \TeX book [Knu86],
- these classes are ORD (for ordinary items),
- LOP (for large operators such as square roots),
- BIN and REL (for binary and relational operators), OPN and CLO (for
- opening and closing parentheses), PCT (for punctuation) and finally
- INN (for ``inner'' items such as \TeX-brackets and -macros).
- The data for the width information is stored in a matrix.
- Therefore, for each pair of classes it is easy to determine how much
- (if any) space should be inserted between two consecutive \TeX-items.
- \par
- The ``penalty'' is
- a value in the range of $-10000\ldots+10000$ indicating a mark-up on a
- potential break-point, thus determining if this point is a
- fairly good (if negative) or bad (if positive) choice.
- The amount of penalty depends heuristically
- (a) on the kind of \TeX-items surrounding the glue item,
- (b) on the bracket nesting, and finally
- (c) on special characteristics.\footnote{For example, the plus- and
- the difference operator have special impact on the amount of
- penalty. These operators are considered as extremely good places
- for breaking up a line.}\par
- During the second level, the \TeX-item list is transformed
- into a so-called breaklist consisting of {\em active} and
- {\em passive} nodes.
- A passive node is simply a width info giving the total width of
- \TeX-items not interspersed by glue items. On the other hand,
- active nodes are glue items enlarged by a third element, the
- offset info, indicating an indentation level which is used later
- for computing the actual amount of indentation.
- Active nodes are used as potential breakpoints.
- Moreover, while creating the breaklist, the \TeX-item list will be
- modified if necessary according to the length of fractions and square
- roots which cannot be broken if retained in their ``classical''
- form. Hence fractions look like {\tt (...)/(...)} if they don't fit
- into a single line, especially in the case of large
- polynomial fractions.\par
- The third and most important level is the line-breaking algorithm
- itself. The idea how to break lines is based
- on the article by Knuth/Plass(1981). Line-breaking can occur at
- active nodes only. So, you can loop through the breaklist considering
- all potential break-points. But in order to find a suitable way
- in a reasonable amount of time you have to limit the number of
- potential breakpoints considered. This is performed by associating
- a ``badness'' with each potential breakpoint, describing how
- good looking or bad looking a line turns out.
- If the badness is less than
- a given amount of ``tolerance'' --- as set by the user ---
- then an active node is considered to be feasible and becomes
- a delta node. A delta node is simply an active node enlarged
- by four further infos: an identification number for this node,
- a pointer to the best feasible break-point (i.e. delta-node)
- to come from,%
- \footnote{If one were to break the formula at this delta-node, the
- best place to start this line is given by this pointer. Note that
- this pointer points backward through the list. When all delta nodes
- have been inserted, you start at the very last delta node (which
- is always at the end of breaklist) and skip backward from one
- delta node to the next delta node pointed at. Thus, you find the
- best way to break up the list.}
- the total amount of demerits (a compound value derived from
- badness and penalty) accumulated so far, and a value indicating
- the amount of indentation applied to a new line beginning at this
- node.
- When the function dealing with line-breaking has stepped through
- the list, the breakpoints will have been determined.
- Afterwards all glue items (i.e. active nodes)
- are deleted from the \TeX-item list while break- and indentation-%
- items for those nodes marked as break-points are inserted.
- \par
- Finally the \TeX-item list is printed with regular ASCII-characters.
- The readabiltiy of the intermediate output is low,
- but it should be quite good enough for users to do some final
- editing work.
- Nevertheless, the nesting structure of the term is kept
- visible when printed, so it will be easy to distinguish between
- parenthesis levels simply by considering the amount of indentation.
- % ----------------------------------------------------------------------
- \section{Postprocessing with the module ``tridefs.tex''}
- % ----------------------------------------------------------------------
- When a \TeX-output file has been created with TRI it has to be
- processed by \TeX\ itself. But before you run \TeX\ you should make sure
- the file looks the way you want it. Sometimes you will
- find it necessary to add some \TeX-code of your own or delete some
- other \TeX-code. This is also the right time to
- check the line breaks marked by \verb|\nl|-commands.
- This job is up to you before you finally run \TeX.\par
- During the \TeX-run the sizes of brackets are determined. This task is
- not done by TRI. In order to produce proper sized brackets
- we put some \verb|\left(| and \verb|\right)| \TeX-commands
- where brackets are opened or closed. A new problem arises when
- an expression has been broken up into several lines. Since, for every
- line, the number of \verb|\left(| and \verb|\right)|
- \TeX-commands must match
- but bracketed expressions may start in one line and end in another,
- we have to insert the required number of ``dummy'' parentheses
- (i.e. \verb|\right.| and \verb|\left.| \TeX-commands)
- at the end of the current line and the beginning of the following line.
- This task is handled by the \verb|\nl|-\TeX-macro.\par
- There is a caveat against this method.
- Since opening and closing brackets
- needn't lie in the same line, it is possible that the height of the
- brackets can differ although they should correspond in height. That will
- happen if the height of the text in the opening line has a height
- different from the text in the closing line. We haven't found a
- way of tackling this problem yet, but we think it is possible to program
- a small \TeX-macro for this task.\par
- There is at least one more line of \TeX-code you have to
- insert by hand into the \TeX-input file produced by TRI. This line runs
- \begin{verbatim}
- \input tridefs
- \end{verbatim}
- and inputs the module {\tt tridefs.tex} into the file. This is necessary
- because otherwise \TeX\ won't know how to deal with our macro calls.
- If you use the \TeX-input file as a ``stand-alone'' file, don't
- forget a final \verb|\bye| at the end of the text. If you use
- code produced by TRI as part of a larger text then simply put
- the input-line just at the beginning of your text.
- %
- \section{Experiments}
- %
- We have tested TRI on a Micro-VAX operating under ULTRIX,
- with no other users working during this phase in order to minimize
- interference with other processes, e.g., caused by paging.
- The TRI code has been compiled with the PSL~3.4 compiler.
- The following table presents results obtained with a small number of
- different terms. All data were measured in CPU-seconds
- as displayed by LISP's TIME-facility.
- For expressions where special packages such as {\tt solve} and {\tt int}
- were involved we have taken only effective output-time, i.e. the time
- consumption caused by producing the output and not by calculating
- the algebraic result.\footnote{That means we assigned the result of an
- evaluation to an itermediate variable, and then we printed this
- intermediate variable. Thus we could eliminate the time overhead
- produced by ``pure'' evaluation. Nevertheless, in terms of effective
- interactive answering time, the sum of evaluation and printing time
- might be much more interesting than the ``pure'' printing time.
- In such a context the percentage overhead caused by printing is
- the critical point. But since we talk about printing we decided
- to document the ``pure'' printing time.} First we display
- the six expressions we have tested.\par
- $$(x+y)^{12}\eqno(1)$$
- $$(x+y)^{24}\eqno(2)$$
- $$(x+y)^{36}\eqno(3)$$
- $$(x+y)^{16}/(v-w)^{16}\eqno(4)$$
- $$solve((1+\xi)x^2-2\xi x+\xi,x)\eqno(5)$$
- $$solve(x^3+x^2\mu+\nu,x)\eqno(6)$$
- The following table shows the results:
- %
- \medskip
- \begin{center}
- {\tt
- \begin{tabular}{|c|r|r|r|r|} \hline
- {\small\rm No.}&{\small\rm normal}&{\small\rm TeX}&
- {\small\rm Break}&{\small\rm Indent}\\
- \hline
- 1& 0.65& 0.75& 3.30& 3.37\\
- 2& 1.38& 1.79&11.81&12.10\\
- 3& 2.31& 3.11&19.33&19.77\\
- 4& 1.87& 2.26&11.78& 9.64\\
- 5& 0.46& 0.75& 0.90& 0.88\\
- 6& 4.52&21.52&31.34&29.78\\
- \hline
- \end{tabular}
- }
- \medskip
- \end{center}
- %
- This short table should give you an impression of the
- performance of TRI. It goes without saying that on other machines
- results may turn out which are quite different from our results. But our
- intention is to show the relative and not the absolute performance.
- Note that printing times are a function of expression complexity,
- as shown by rows three and six.
- % ----------------------------------------------------------------------
- \section{User's Guide to the TRI}
- % ----------------------------------------------------------------------
- If you intend to use TRI you are required to load the compiled code.
- This can be performed with the command
- \begin{verbatim}
- load!-package 'tri;
- \end{verbatim}
- During the load, some default initializations are performed. The
- default page width is set to 15 centimeters, the tolerance for
- line breaking is set to 20 by default. Moreover, TRI is enabled
- to translate greek names, e.g. TAU or PSI, into equivalent \TeX\
- symbols, e.g. $\tau$ or $\psi$, respectively. Letters are printed
- lowercase as defined through assertion of the set LOWERCASE. The whole
- operation produces the following lines of output
- \begin{verbatim}
- % TeX-REDUCE-Interface 0.50
- % set GREEK asserted
- % set LOWERCASE asserted
- % \hsize=150mm
- % \tolerance 20
- \end{verbatim}
- Make sure you have at least version 0.50 installed at your site.
- Now you can switch the three TRI modes on and off as you like.
- You can use the switches alternatively and incrementally.
- That means you have to switch on TeX for receiving standard
- \TeX-output, or TeXBreak to receive broken \TeX-output, or
- TeXIndent to receive broken \TeX-output plus indentation.
- More specifically, if you switch off {\tt TeXBreak} you implicitly quit
- {\tt TeXIndent}, too, or, if you switch off {\tt TeX}, you
- implicitly quit {\tt TeXBreak} and, consequently, {\tt TeXIndent}.\par
- The most crucial point in defining how TRI breaks multiple lines
- of \TeX-code is your choice of the page width and the tolerance.
- As mentioned earlier, ``tolerance'' is related to \TeX's famous
- line-breaking algorithm. The value of ``tolerance'' determines which
- potential breakpoints are considered feasible and which are not. The
- higher the tolerance, the more breakpoints become feasible as determined
- by the value of ``badness'' associated with each breakpoint. Breakpoints
- are considered feasible if the badness is less than the tolerance.
- You can easily change the tolerance using
- \begin{verbatim}
- TeXtolerance(tolerance);
- \end{verbatim}
- where the {\em tolerance} is a positive integer in the closed interval
- $[0,10000]$.
- A tolerance of 0 means that actually no breakpoint will be considered
- feasible (except those carrying a negative penalty), while a value
- of 10000 allows any breakpoint to be considered feasible.
- Obviously, the choice of a tolerance has a great impact on the time
- consumption of our line-breaking algorithm since time consumption
- increases in proportion to the number of feasible breakpoints.
- So, the question is what values to choose. For line-breaking without
- indentation, suitable values for the tolerance lie between 10 and 100.
- As a rule of thumb, you should use higher values the deeper the term
- is nested --- if you can estimate. If you use indentation, you have to
- use much higher tolerance values. This is necessary because badness
- is worsened by indentation. Accordingly, TRI has to try harder to find
- suitable places where to break. Reasonable values for tolerance
- here lie between 700 and 1500. A value of 1000 should be your first
- guess. That will work for most expressions in a reasonable amount of
- time.\par
- The page width of the \TeX\ output page,
- measured in millimeters\footnote{You can
- also specify page width in scaled points (sp).
- Note: 1~pt = 65536~sp = 1/72.27~inch. The function automatically chooses
- the appropiate dimension according to the size: all values greater than
- 400 are considered to be scaled points.}, can be changed by using
- \begin{verbatim}
- TeXpagewidth(page-width);
- \end{verbatim}
- You should choose a page width according to your purposes,
- but allow a few centimeters for errors in TRI's attempt to
- emulate \TeX's metric.
- For example, specify 140 millimeters for an effective page width of
- 150 or 160 millimeters. That way you have a certain safety-margin to
- the borders of the page.\par
- Sometimes you want to add your own translations for REDUCE-symbols
- to be mapped to \TeX-items.
- For such a task, TRI provides a function named
- {\tt TeXlet} which binds any REDUCE-symbol to one of the predefined
- \TeX-items. A call to this function has the following syntax:
- \begin{verbatim}
- TeXlet(REDUCE-symbol,TeX-item)
- \end{verbatim}
- Three examples show how to do it right:
- \begin{verbatim}
- TeXlet(velocity,'!v);
- TeXlet(gamma,"\Gamma ");
- TeXlet(acceleration,"\vartheta ");
- \end{verbatim}
- Besides this method of single assertions you can choose to assert
- one of (currently) two standard sets providing substitutions
- for lowercase and greek letters. These sets are loaded by default.
- You can switch these sets on or off using the functions
- \begin{verbatim}
- TeXassertset setname;
- TeXretractset setname;
- \end{verbatim}
- where the setnames {\tt GREEK} and {\tt LOWERCASE}
- are currently defined and available.
- So far you have learned only how to connect REDUCE-atoms with predefined
- \TeX-items but not how to create new \TeX-items itself. We provide a
- way for adding standard \TeX-items of any class {\tt ORD, BIN, REL,
- OPN, CLO, PCT} and {\tt LOP} except for class {\tt INN} which is
- reserved for internal use by TRI only. You can call the function
- \begin{verbatim}
- TeXitem(item,class,list-of-widths)
- \end{verbatim}
- e.g. together with a binding
- \begin{verbatim}
- TeXitem("\nabla ",ORD,
- {546135,437818,377748});
- TeXlet(NABLA,"\nabla ");
- \end{verbatim}
- where {\em item} is a legal \TeX-code name\footnote{Please note that
- any \TeX-name ending with a letter must be followed by a blank
- to prevent interference with letters of following \TeX-items.
- Note also that you can legalize a name by defining it as a \TeX-macro
- and declaring its width.},
- {\em class} is one of seven classes (see above) and {\em list-of-widths}
- is a non-empty list of elements, each one representing the width of
- the item in successive super-/subscript depth levels.
- That means that the first entry is the width in display mode,
- the second stands for scriptstyle and the third stands for
- scriptscriptstyle in \TeX-terminology.
- Starting with version 0.50, all arguments can be supplied without
- quotation marks, i.e., LISP notation is no longer required
- but still possible.\par
- But how can you retrieve the width information required?
- For this purpose we provide a small interactive \TeX\ facility
- called {\tt redwidth.tex}.
- It repeatedly prompts you for the \TeX-items for which you want
- to retrieve the width information.\par
- Finally, another command is supplied which displays all
- information stored about a specific \TeX-item.
- If, for example, you call
- \begin{verbatim}
- TeXdisplay(NABLA);
- \end{verbatim}
- TRI will respond with
- \begin{verbatim}
- % TeX item \nabla is of class ORD and
- has following widths:
- % 8.333358pt 6.680572pt 5.763977pt
- \end{verbatim}
- %
- \section{Examples}
- %
- Some examples shall demonstrate the capabilities of TRI.
- For each example we state (a) the REDUCE command (i.e.
- the input), (b) the tolerance if it differs from the default, and
- (c) the output as produced in a \TeX\ run. The examples are
- displayed at the end of this article.\par
- %
- \section{Caveats}
- %
- Techniques for printing mathematical expressions are available
- everywhere. TRI adds only a highly specialized version for
- most REDUCE output. The emphasis is on the word {\em most}.
- One major caveat is that we cannot print SYMBOLIC-mode output
- from REDUCE. This could be done best in a WEB-like programming-plus-%
- documentation style. Nevertheless, as Knuth's WEB is allready available
- for PASCAL and C, hopefully someone will write a LISP-WEB or a
- REDUCE-WEB as well.\par
- \LaTeX\ users will be disappointed that we have not mentioned yet if and
- how TRI co-operates with \LaTeX. Nevertheless, TRI can be used
- together with \LaTeX, as this document proves. But there are some
- important restrictions. First, read in the module ``tridefs.tex''
- at the very beginning of a \LaTeX-run, before you apply any
- \LaTeX-specific command. Furthermore, the \TeX-macros used
- in this module {\em do} interfere with \LaTeX's own macros.
- You cannot use \LaTeX's \verb|\(|, \verb|\)|, \verb|\[| and \verb|\]|
- commands while you are using ``tridefs.tex''. If you avoid to
- use them you should be able to run TRI with \LaTeX\ smoothly.
- \par
- Whenever you discover a bug in our program please let us
- know. Send us a short report accompanied by an output listing.%
- \footnote{You can reach us via electronic mail at the following
- address: reduce@rrz.uni-koeln.de} We will try to fix the error.
- %
- \section{Distribution}
- %
- The whole TRI package consists of following files:
- \begin{itemize}
- \item {\tt tri.latex}: This text as a \TeX-input file.
- \item {\tt tri.tex}: A long version of this report, where we explain
- our breaking algorithm thoroughly.
- \item {\tt tri.red}: This is the REDUCE-LISP source code
- for TRI (approximately 58 KBytes of code).
- \item {\tt tridefs.tex}: The \TeX-input file to be used together with
- output from TRI.
- \item {\tt redwidth.tex}: This is the \TeX-input file for interactive
- determination of \TeX-item widths.
- \item {\tt tritest.red}: Run this REDUCE file to check if TRI works
- correctly.
- \item {\tt tritest.tex}: When you have run the file {\tt tritest.red},
- just make a \TeX\ run with this file to see all the nice things
- TRI is able to produce.
- \end{itemize}
- You can obtain TRI package from a network library at The
- RAND Corporation, Santa Monica, Ca./USA.
- Simply send a note {\tt send index} to the network address
- {\tt reduce-netlib@rand.org} and you will receive a description
- on how to use the REDUCE netlib followed by a directory.
- Specific files may be requested with the command
- {\tt send }{\em library file}, where {\em library} is one the
- catalogues containing the different REDUCE packages, and {\em file}
- is the name of a particular file. For example, you can use
- the message {\tt send tex tri.red} to obtain the RLISP-code of
- the \9.
- % ----------------------------------------------------------------------
- \begin{thebibliography}{Knu88}
- \bibitem[Ant86]{an:be}Antweiler, W.; Strotmann, A.; Pfenning, Th.;
- Winkelmann, V.: {\em Zwischenbericht \"{u}ber den Status der
- Arbeiten am REDUCE-\TeX-Anschlu\ss.}
- Internal Paper, Rechenzentrum an der Universit\"{a}t
- zu K\"{o}ln, November 1986.
- \bibitem[Ant89]{an:Ab}Antweiler, W.: {\em A \TeX{}-REDUCE-Interface.}
- Arbeits\-bericht RRZK 8901 des Regionalen Rechen\-zentrums an der
- Uni\-versi\-t\"{a}t zu K\"{o}ln, Februar 1989.
- \bibitem[Fat87]{fa:Te}Fateman, Richard J.:
- {\em\TeX\ Output from MACSYMA-like Systems.}
- ACM SIGSAM Bulletin, Vol. 21, No. 4, Issue \#82, pp. 1--5,
- November 1987.
- \bibitem[Knu81]{kn:br}Knuth, Donald E.; Plass, Michael F.:
- {\em Breaking Paragraphs into Lines.}
- Software---Practice and Experience, Vol. 11,
- pp. 1119--1184, 1981.
- \bibitem[Knu86]{kn:Te}Knuth, Donald E.: {\em The \TeX\-book.}
- Addison-Wesley, Readings/Ma. Sixth printing, 1986.
- \bibitem[Hea87]{he:RE}Hearn, Anthony C.: {\em REDUCE User's Manual,
- Version 3.3.} The RAND Corporation, Santa Monica, Ca.,
- July 1987.
- \end{thebibliography}
- %
- %
- \onecolumn
- %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%% %%%%%
- %%%%% Examples for the TRI %%%%%
- %%%%% %%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %
- \TRIexa{Standard}{TeXindent}{250}{\verb|(x+y)**16/(v-w)**16|}
- $$\displaylines{\qdd
- \(x^{16}
- +16\cdot x^{15}\cdot y
- +120\cdot x^{14}\cdot y^{2}
- +560\cdot x^{13}\cdot y^{3}\nl
- \OFF{327680}
- +1820\cdot x^{12}\cdot y^{4}
- +4368\cdot x^{11}\cdot y^{5}
- +8008\cdot x^{10}\cdot y^{6}\nl
- \OFF{327680}
- +11440\cdot x^{9}\cdot y^{7}
- +12870\cdot x^{8}\cdot y^{8}
- +11440\cdot x^{7}\cdot y^{9}\nl
- \OFF{327680}
- +8008\cdot x^{6}\cdot y^{10}
- +4368\cdot x^{5}\cdot y^{11}
- +1820\cdot x^{4}\cdot y^{12}\nl
- \OFF{327680}
- +560\cdot x^{3}\cdot y^{13}
- +120\cdot x^{2}\cdot y^{14}
- +16\cdot x\cdot y^{15}
- +y^{16}
- \)
- /\nl
- \(v^{16}
- -16\cdot v^{15}\cdot w
- +120\cdot v^{14}\cdot w^{2}
- -560\cdot v^{13}\cdot w^{3}\nl
- \OFF{327680}
- +1820\cdot v^{12}\cdot w^{4}
- -4368\cdot v^{11}\cdot w^{5}
- +8008\cdot v^{10}\cdot w^{6}
- -11440\cdot v^{9}\cdot w^{7}\nl
- \OFF{327680}
- +12870\cdot v^{8}\cdot w^{8}
- -11440\cdot v^{7}\cdot w^{9}
- +8008\cdot v^{6}\cdot w^{10}
- -4368\cdot v^{5}\cdot w^{11}\nl
- \OFF{327680}
- +1820\cdot v^{4}\cdot w^{12}
- -560\cdot v^{3}\cdot w^{13}
- +120\cdot v^{2}\cdot w^{14}
- -16\cdot v\cdot w^{15}
- +w^{16}
- \)
- \Nl}$$
- \TRIexa{Integration}{TeX}{-}{\verb|int(1/(x**3+2),x)|}
- $$
- -
- \(\frac{2^{\frac{1}{
- 3}}\cdot
- \(2\cdot
- \sqrt{3}\cdot
- \arctan
- \(\frac{2^{\frac{1}{
- 3}}
- -2\cdot x}{
- 2^{\frac{1}{
- 3}}\cdot
- \sqrt{3}}
- \)
- +
- \ln
- \(2^{\frac{2}{
- 3}}
- -2^{\frac{1}{
- 3}}\cdot x
- +x^{2}
- \)
- -2\cdot
- \ln
- \(2^{\frac{1}{
- 3}}
- +x
- \)
- \)
- }{
- 12}
- \)
- $$
- \TRIexa{Integration}{TeXindent}{1000}%
- {\verb|int(1/(x{*}{*}4+3*x{*}{*}2-1,x)|}
- $$\displaylines{\qdd
- \(\sqrt{2}\cdot
- \(3\cdot
- \sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{13}\cdot
- \ln
- \(-
- \(\sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{2}
- \)
- +2\cdot x
- \)
- \nl
- \OFF{2260991}
- -3\cdot
- \sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{13}\cdot
- \ln
- \(\sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{2}
- +2\cdot x
- \)
- \nl
- \OFF{2260991}
- +13\cdot
- \sqrt{
- \sqrt{13}
- -3}\cdot
- \ln
- \(-
- \(\sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{2}
- \)
- +2\cdot x
- \)
- \nl
- \OFF{2260991}
- -13\cdot
- \sqrt{
- \sqrt{13}
- -3}\cdot
- \ln
- \(\sqrt{
- \sqrt{13}
- -3}\cdot
- \sqrt{2}
- +2\cdot x
- \)
- \nl
- \OFF{2260991}
- +6\cdot
- \sqrt{
- \sqrt{13}
- +3}\cdot
- \sqrt{13}\cdot
- \arctan
- \(\frac{2\cdot x}{
- \sqrt{
- \sqrt{13}
- +3}\cdot
- \sqrt{2}}
- \)
- \nl
- \OFF{2260991}
- -26\cdot
- \sqrt{
- \sqrt{13}
- +3}\cdot
- \arctan
- \(\frac{2\cdot x}{
- \sqrt{
- \sqrt{13}
- +3}\cdot
- \sqrt{2}}
- \)
- \)
- \)
- /104
- \Nl}$$
- \TRIexa{Solving Equations}{TeXindent}{1000}%
- {\verb|solve(x**3+x**2*mu+nu=0,x)|}
- $$\displaylines{\qdd
- \{x=
- \[-
- \(\(\(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{2}{
- 3}}\cdot
- \sqrt{3}\cdot i\nl
- \OFF{3675021}
- +
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{2}{
- 3}}\nl
- \OFF{3675021}
- +2\cdot
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot \nl
- \OFF{3675021}
- 2^{\frac{1}{
- 3}}\cdot 3^{\frac{1}{
- 6}}\cdot
- \mu
- -2^{\frac{2}{
- 3}}\cdot
- \sqrt{3}\cdot 3^{\frac{1}{
- 3}}\cdot
- i\cdot \mu ^{2}
- +2^{\frac{2}{
- 3}}\cdot 3^{\frac{1}{
- 3}}\cdot
- \mu ^{2}
- \)
- /\nl
- \OFF{3347341}
- \(6\cdot
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot 2^{\frac{1}{
- 3}}\cdot
- 3^{\frac{1}{
- 6}}
- \)
- \)
- \]
- \CO\nl
- \OFF{327680}
- x=
- \[\(\(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{2}{
- 3}}\cdot
- \sqrt{3}\cdot i\nl
- \OFF{2837617}
- -
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{2}{
- 3}}\nl
- \OFF{2837617}
- -2\cdot
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot \nl
- \OFF{2837617}
- 2^{\frac{1}{
- 3}}\cdot 3^{\frac{1}{
- 6}}\cdot \mu
- -2^{\frac{2}{
- 3}}\cdot
- \sqrt{3}\cdot 3^{\frac{1}{
- 3}}\cdot i\cdot
- \mu ^{2}
- -2^{\frac{2}{
- 3}}\cdot 3^{\frac{1}{
- 3}}\cdot
- \mu ^{2}
- \)
- /\nl
- \OFF{2509937}
- \(6\cdot
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot 2^{\frac{1}{
- 3}}\cdot 3^{
- \frac{1}{
- 6}}
- \)
- \]
- \CO\nl
- \OFF{327680}
- x=
- \[\(\(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{2}{
- 3}}\nl
- \OFF{2837617}
- -
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot \nl
- \OFF{3675021}
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot 2^{\frac{1}{
- 3}}\cdot 3^{
- \frac{1}{
- 6}}\cdot \mu
- +2^{\frac{2}{
- 3}}\cdot 3^{\frac{1}{
- 3}}\cdot
- \mu ^{2}
- \)
- /\nl
- \OFF{2509937}
- \(3\cdot
- \(9\cdot
- \sqrt{4\cdot \mu ^{3}\cdot \nu
- +27\cdot \nu ^{2}}
- -2\cdot
- \sqrt{3}\cdot \mu ^{3}
- -27\cdot
- \sqrt{3}\cdot \nu
- \)
- ^{\frac{1}{
- 3}}\cdot 2^{\frac{1}{
- 3}}\cdot 3^{
- \frac{1}{
- 6}}
- \)
- \]
- \}
- \Nl}$$
- \TRIexa{Matrix Printing}{TeX}{--}{%
- \verb|mat((1,a-b,1/(c-d)),(a**2-b**2,1,sqrt(c)),((a+b)/(c-d),sqrt(d),1))|
- }
- $$
- \pmatrix{1&a
- -b&
- \frac{1}{
- c
- -d}\cr
- a^{2}
- -b^{2}&1&
- \sqrt{c}\cr
- \frac{a
- +b}{
- c
- -d}&
- \sqrt{d}&1\cr
- }
- $$
- %
- %
- \end{document}
|