123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- \documentstyle[11pt,reduce]{article}
- \begin{document}
- \title{Guide to Writing \REDUCE Reference Documents}
- \date{}
- \author{H. Melenk \& R. Sch\"opf}
- \maketitle
- \section{Introduction}
- Since Version 3.5 of \REDUCE, the documentation of a package consists of two
- parts, a manual part that is used to introduce the user to the background
- and the functionality of the package in a textbook style, and a reference
- part to be used more like an encyclopedia for retrieving isolated items or
- relations\footnote{%
- At present most of the packages lack a special reference document and a
- plain text version of the manuals are browsed instead. One purpose of this
- text is to encourage package suppliers to add a better-suited reference
- material to their product}. Both parts need different formats. While the
- \REDUCE manual style was fixed some time ago, the \REDUCE reference style
- was developed from scratch for \REDUCE 3.5 and essentially unmodified for
- \REDUCE 3.6. This paper is intended as a guide to writing a document in
- the reference style.
- {\bf Note}: The case of the keywords used in this document is relevant. E.g.
- you must write {\bf Examples}, {\bf Operator} on one hand, but {\bf verbatim}
- on the other.
- \section{Media}
- A reference document source is a text in \LaTeX{} language following a
- specific set of rules. This source text is converted for two different
- target media:
- \begin{itemize}
- \item printed reference manual for the package and a printed extension of
- the \REDUCE reference manual
- \item on-line help for the package as an extension of the \REDUCE on-line
- help system.
- \end{itemize}
- The printed text is formatted by \LaTeX{} using the style specific file {\bf %
- redref.sty}. For the on-line help system a special translation mechanism is
- used that generates data structures for different target systems. A
- description of the transformation process is given below. At present the
- target systems are
- \begin{itemize}
- \item Microsoft Windows help format for MS WINHELP;
- \item GNU Info format, used by GNU Info, xinfo and the \REDUCE X interface
- program XR;
- \item WWW (world wide web)\footnote{%
- formatter contributed by A. Strotmann, Cologne}.
- \end{itemize}
- The reference format has been designed to serve both purposes with one
- unique source. However, the restrictions are much more rigid than with
- ordinary \TeX{} styles. These restrictions must be followed carefully,
- otherwise the translation to help files will fail. Please note that a
- successful translation by \LaTeX{} is necessary but not sufficient as a
- test, since not all restrictions are controlled in the environment
- established by the style file.
- \section{General Structure}
- The overall structure is given by the traditional \LaTeX{} hierarchy
- \begin{verbatim}
- \begin{document}{...}
- \chapter{ }
- \section{ }
- \subsection{ }
- \subsubsection{ }
- \end{document}
- \end{verbatim}
- where -- of course -- some or all of the inner levels may be omitted. The
- structure is automatically converted into a directory hierarchy using the
- given titles. These {\bf must} be unique in the whole document (not only in
- the local section).
- Informal guideline: the titles should be as short as possible.
- The bottom level information must be cut explicitly into pieces that are
- named $nodes$ throughout this paper. There must not be any text outside a
- node - any such text may either get lost or disturb the translation process.
- Typical nodes are: an operator, a variable, a switch etc. In the manual form
- a node is a graphically separated part of a page with an emphasized heading.
- In the help form a node is a separate page. In both forms the text for a
- node can (and should) contain references to other nodes. These are encoded
- either as printed references (manual) or as hypertext links (help) that you
- can follow by clicking the word with the mouse. In addition, there are
- directories and indexes that alternatively lead the user to the desired
- information, and which also use the nodes as reference points.
- Informal guideline: hierarchy entries and nodes may be mixed on each level.
- On the other hand such a mixture may be unpleasant for online use. Also, the
- structure should not be too deep, otherwise the user must click lots of
- items until he reaches the desired item.
- \section{Nodes}
- \subsection{Node Context}
- In the source language a node is encoded as \LaTeX{} environment
- \begin{verbatim}
- \begin{<node-type>}[<options>]{<node-name>}
- <line-1>
- . . . % the node body
- <line-n>
- \end{<node-type>}
- \end{verbatim}
- The third part of the header line \verb|[<options>]| is omitted except for
- very special cases.
- The leading \verb|<node-type>| describes the type of information that is
- given in the node. Specific for the type are the layout and especially the
- heading and directory enty. \verb|<node-type>| is one of the following
- \begin{itemize}
- \item {\bf Introduction}: typically a piece of text used at the beginning
- of a section to give general information for the whole section.
- \verb|<node-name>| is a free heading, which, however, should be as short as
- possible.
- \item {\bf Operator}: description of an operator. \verb|<node-name>| is the
- operator name. When the operator is represented by a special character
- symbol, \verb|<options>| is the (internal) alphanumeric name and \{%
- \verb|<node-name>|\} contains the special character equivalent. E.g.
- \begin{verbatim}
- \begin{Operator}[replace]{=>}
- \end{verbatim}
- References should then be directed towards the alphanumeric name.
- \item {\bf Function}: similar to Operator.
- \item {\bf Statement}: description of a syntax extension. \verb|<node-name>|
- is the leading keyword or the statement.
- \item {\bf Command}: description of a command type syntax extension.
- \verb|<node-name>| is the leading keyword or the command.
- \item {\bf Declaration}: description of a declaration type syntax
- extension. \verb|<node-name>| is the leading keyword or the declaration
- statement.
- \item {\bf Switch}: description of a switch. \verb|<node-name>| is the
- switch name. Note that the body of a Switch node must give information of
- the default setting.
- \item {\bf Variable}: description of a global (share) variable.
- \verb|<node-name>| is the variable name.
- \item {\bf Constant}: description of a Constant. \verb|<node-name>| is the
- constant name.
- \item {\bf Concept}: used to introduce a description of a term that does
- not fit into one of the other classes, E.g. ``kernel''. \verb|<node-name>|
- is the target keyword.
- \end{itemize}
- In all cases \verb|<node-name>| must be written exactly as used in all
- references (correct case, no additional blanks etc.). For \REDUCE 3.5 and
- later versions, this is lower case for most items. Special characters
- other than underscore should be avoided whenever possible because these
- are often not accepted by the target systems.
- \subsection{Node Structure}
- Inside a node the default state is ``normal text". Special environments (%
- \verb|\begin{..}| -- \verb|\end{..}| contexts) are supported that allow you
- to format text. These are
- \begin{itemize}
- \item {\bf Syntax}: description of the syntax for an operator, statement or
- command. This is translated into a fixed font. For special advice see below.
- \item {\bf Examples}: description of prototypical applications, including
- input and output. Here special formatting is performed - see below.
- \item {\bf verbatim}: text is printed unchanged in fixed font.
- \item {\bf Tex}: a text that allows full \LaTeX{} functionality; such a
- piece of information is ignored during compilation for help.
- \item {\bf Info}: a text which is processed when compiling for help and
- which is ignored during \LaTeX{} processing.
- \end{itemize}
- Typically \verb|Tex| and \verb|Info| are used one after the other in order
- to describe the same context in an advanced (Tex) and a simple (Info) style.
- \subsubsection{Normal Text}
- This is text translated to a proportional font (where applicable). An empty
- line causes a new paragraph to be started. Only a very limited \TeX{}
- compatibility is given: Use the backslash for protecting special characters
- like \{ and \}. Additionally formatting elements are available:
- \begin{itemize}
- \item \verb|\|verb
- \item \verb|\|ldots
- \item \verb|\|cdots
- \item \verb|\|pi
- \item \verb|\|em (may be without effect for some targets)
- \item \verb|\|meta\{x\}: write $x$ as meta symbol for a syntax
- description. In general this will lead to an output similar to $x$.
- \item \verb|\|name\{x\}: write $x$ as a \REDUCE symbol. This form should be
- used for all keywords, operator names etc.
- \item \verb|\|nameref\{x\}: write $x$ as a \REDUCE symbol and generate a
- reference to a node with the name $x$. This features is used to establish
- the cross links in the information structure.
- \item \verb|\|index\{x\}: generate an index entry. $x$ does not appear in
- the target text.
- \end{itemize}
- Additionally there is a new command
- \begin{quotation}
- \verb|\IFTEX{|\TeX{} text\verb|}{|info text\verb|}|
- \end{quotation}
- that allows you to write parts of the text in two forms, one fancy form for
- \LaTeX{} processing and a simpler form for the help environment. For
- example, a mathematical formula like $\exp (x)$ must be written as follows:
- \begin{verbatim}
- \IFTEX{$\exp(x)$}{exp(x)}
- \end{verbatim}
- Note: the \verb|*| variants of \verb|\verb| and \verb|verbatim| cannot be
- used. Informal guidelines:
- \begin{itemize}
- \item The text should have a nice structure. When the text has many lines
- insert paragraph breaks such that the eye of the reader finds fixing points.
- \item All \verb|\|index entries should follow immediately the header line
- of the node.
- \item Ensure that the spelling of index entries is unified, e.g. use only
- singular and lower case (except for proper names).
- \item Use \verb|\|nameref for as many names as possible. The
- interrelations help the user to navigate through your document. Mention
- every related node at least once in a \verb|\|nameref; if a related node
- does not have a ``natural'' place in the text add a ``See also'' paragraph
- at the end of the node.
- \item Don't repeat \verb|\|nameref for the same object in one node unless
- the distance between the citation points is rather big (nore than half a
- page) - use \verb|\|name for repeated occurrences.
- \end{itemize}
- \subsubsection{Syntax Context}
- This section contains the formal pattern of the introduced operator or
- statement. The following items must be preceded by a backslash: {\bf round
- brackets}, {\bf curly brackets}, {\bf underscore}, {\bf dollar}. Use
- \verb|\meta| in the description for the variable items and explain these
- using the same forms in the following plain text. The fixed items should be
- encoded using \verb|\name|.
- Examples:
- \begin{verbatim}
- \begin{Syntax}
- \meta{logical\_expression} \name{and} \meta{logical\_expression}
- \end{Syntax}
- \begin{Syntax}
- \name{<<}\meta{statement}\{; \meta{statement} \name{or}
- \$\meta{statement}\}\optional \name{>>}
- \end{Syntax}
- \end{verbatim}
- \subsubsection{Examples Context}
- This section gives prototypical application examples. The text here has to
- follow a special format where the line breaks in the input are unimportant
- (except in the multiline option):
- \begin{enumerate}
- \item Each example must be terminated by a double backslash. This signals
- that the next example starts (which should begin on the next line) or that
- the last example is complete.
- \item An example starts with the input line. This will be printed in
- verbatim style with fixed font.
- \item If the example has an associated output, this is started by an
- ampersand (\verb|&|) character. The output must be either coded as \TeX{}
- math line with restricted math facilities, using only
- \begin{itemize}
- \item \verb|^| for raised exponents and
- \item \verb|\rfrac| for fractions (similar to \verb|\frac| in \TeX{}),
- \end{itemize}
- or the output may be a sequence of several lines that are then printed in
- verbatim style. In the second case the lines must be enclosed in a pair
- \verb|\begin{multilineoutput}| \verb|\end{multilineoutput}|.
- \end{enumerate}
- Informal guidelines:
- Write short examples. Take into account that the space is very restricted
- when using an online help system. In particular, the lines are rather short.
- Examples:
- \begin{verbatim}
- \begin{Examples}
- alist := \{1,2,\{a,b\}\}; & ALIST := \{1,2,\{A,B\}\} \\
- blist := \{3,4,5,sin(y)\}; & BLIST := \{3,4,5,SIN(Y)\} \\
- append(alist,blist); & \{1,2,\{A,B\},3,4,5,SIN(Y)\} \\
- append(alist,\{\}); & \{1,2,\{A,B\}\} \\
- append(list z,blist); & \{Z,3,4,5,SIN(Y)\}
- \end{Examples}
- \begin{Examples}
- solve(log(sin(x+3)),x); &
- \begin{multilineoutput}{6cm}
- 4*arbint(1)*pi + pi - 6 4*arbint(1)*pi + pi - 6
- \{x=-------------------------,x=-------------------------\}
- 2 2
- \end{multilineoutput}
- \end{Examples}
- \end{verbatim}
- \section{\LaTeX{} Translation}
- This should not cause any difficulties as long as the style files accessible.
- \section{Help System Transformation}
- In the \REDUCE library a set of utilities is available that allow you to
- transform a reference style input file into an input to a target system.
- These are source files in \REDUCE syntax, and you need a \REDUCE 3.5 or later
- executable to use these. At present the source files are
- \begin{itemize}
- \item comphelp.red: driver and input analysis,
- \item helpwin.red: output for MS Windows syntax
- \item helpunx.tex: output for GNU Info format
- \item minitex.red: formula formatting
- \end{itemize}
- First you must compile these using the script file $compile$. The result
- will be binaries $cmphelpu.b$ and $cmphelpw.b$. For running these use
- scripts $mkhelpu$ or $mkhelpw$ that take the name of the input file as
- argument. This file may contain \verb|\include| or \verb|\input| statements
- for secondary sources. During processing a list of sections and nodes is
- printed to the standard output. The conversion process stops if a context
- error is found - then the actual context hierarchy is printed. When the
- analysis phase has been successful, in a second phase the target file is
- generated. This is either a file $*.x$ (Info), to be further processed by
- the GNU makeinfo, or a file $*.rtf$ that is input for the Microsoft help
- compiler HC.
- \end{document}
|