Commit 960385fe authored by Akim Demaille's avatar Akim Demaille
Browse files

2006-07-26 Akim Demaille <akim@epita.fr>

	* data/automata/b/Makefile.am: Document b1.

	* data/automata/z/b1.xml: New
	* data/automata/z/Makefile.am: Adjust.
	* data/automata/z/c1.cc: Comment.
	* doc/manual/examples/b1.xml: Remove.
	* doc/manual/examples/add1_rt.xml,
	* doc/manual/examples/quot_3_rt.xml: Rename as...
	* doc/manual/examples/add1-rw.xml,
	* doc/manual/examples/quot-3-rw.xml: these.

	* doc/manual/extex.pl: Recognize `power' arguments.
	* doc/manual/taf-kit.tex: Move macros...
	* doc/manual/vaucanson-user-manual.tex: here.
	* doc/manual/taf-kit.tex: More automatic generation.
	Map _ to -.
	Map rt to rw.

	* include/vaucanson/xml/xml_chooser.hxx (TParmFMP): No longer use it.

	* data/automata/tdc/Makefile.am,
	* taf-kit/src/Makefile.am,
	* src/demos/demo.mk,
	* src/demos/function_library/Makefile.am,
	* src/demos/transducers/Makefile.am,
	* src/demos/vgrep/Makefile.am,
	* src/tests/xml/Makefile.am: Adjust to the location of vaucanson.mk.
parent 9528a743
2006-07-26 Akim Demaille <akim@epita.fr>
* data/automata/b/Makefile.am: Document b1.
* data/automata/z/b1.xml: New
* data/automata/z/Makefile.am: Adjust.
* data/automata/z/c1.cc: Comment.
* doc/manual/examples/b1.xml: Remove.
* doc/manual/examples/add1_rt.xml,
* doc/manual/examples/quot_3_rt.xml: Rename as...
* doc/manual/examples/add1-rw.xml,
* doc/manual/examples/quot-3-rw.xml: these.
* doc/manual/extex.pl: Recognize `power' arguments.
* doc/manual/taf-kit.tex: Move macros...
* doc/manual/vaucanson-user-manual.tex: here.
* doc/manual/taf-kit.tex: More automatic generation.
Map _ to -.
Map rt to rw.
* include/vaucanson/xml/xml_chooser.hxx (TParmFMP): No longer use it.
* data/automata/tdc/Makefile.am,
* taf-kit/src/Makefile.am,
* src/demos/demo.mk,
* src/demos/function_library/Makefile.am,
* src/demos/transducers/Makefile.am,
* src/demos/vgrep/Makefile.am,
* src/tests/xml/Makefile.am: Adjust to the location of vaucanson.mk.
2006-07-26 Michal Cadilhac <michael.cadilhac@lrde.epita.fr>
* include/vaucanson/xml/xerces_parser.hxx: Fix typo.
......@@ -11,7 +41,7 @@
Automata library for vcsn-tdc.
* data/automata/b/a1.cc,
* data/automata/z/c1.cc: Describe from which article or book these
* data/automata/z/c1.cc: Describe from which article or book these
automata come from.
* data/automata/Makefile.am: Add tdc to SUBDIRS.
* data/automata/tdc: New.
......
......@@ -11,7 +11,7 @@
##
## The Vaucanson Group consists of people listed in the `AUTHORS' file.
include $(top_srcdir)/src/vaucanson.mk
include $(top_srcdir)/vaucanson.mk
EXTRA_PROGRAMS = a1 b1 divkbaseb ladybird double_ring
......@@ -32,6 +32,7 @@ $(srcdir)/a1.xml: a1.cc $(top_srcdir)/configure.ac
./a1$(EXEEXT) xml >$@.tmp
mv $@.tmp $@
# Accepts words with a `b'.
b1_SOURCES = b1.cc
$(srcdir)/b1.xml: b1.cc $(top_srcdir)/configure.ac
$(MAKE) $(AM_MAKEFLAGS) b1$(EXEEXT)
......
......@@ -11,7 +11,7 @@
##
## The Vaucanson Group consists of people listed in the `AUTHORS' file.
include $(top_srcdir)/src/vaucanson.mk
include $(top_srcdir)/vaucanson.mk
EXTRA_PROGRAMS = t1 u1
......
......@@ -11,16 +11,22 @@
##
## The Vaucanson Group consists of people listed in the `AUTHORS' file.
include $(top_srcdir)/src/vaucanson.mk
include $(top_srcdir)/vaucanson.mk
# Z automata.
EXTRA_PROGRAMS = c1
dist_z_automata_DATA = \
dist_z_automata_DATA = \
$(srcdir)/b1.xml \
$(srcdir)/c1.xml
MAINTAINERCLEANFILES = $(dist_z_automata_DATA)
# This automaton counts the number of bs.
$(srcdir)/b1.xml: $(top_srcdir)/data/automata/b/b1.xml
sed -e 's/set="B"/set="Z"/g' $< >$@.tmp
mv $@.tmp $@
c1_SOURCES = c1.cc
$(srcdir)/c1.xml: c1.cc $(top_srcdir)/configure.ac
$(MAKE) $(AM_MAKEFLAGS) c1$(EXEEXT)
......
......@@ -9,16 +9,16 @@
<content>
<states>
<state name="s0"/>
<state name="s2"/>
<state name="s1"/>
</states>
<transitions>
<transition src="s0" dst="s0" label="a"/>
<transition src="s0" dst="s0" label="b"/>
<transition src="s0" dst="s2" label="b"/>
<transition src="s2" dst="s2" label="a"/>
<transition src="s2" dst="s2" label="b"/>
<transition src="s0" dst="s1" label="b"/>
<transition src="s1" dst="s1" label="a"/>
<transition src="s1" dst="s1" label="b"/>
<initial state="s0"/>
<final state="s2"/>
<final state="s1"/>
</transitions>
</content>
</automaton>
......@@ -20,7 +20,7 @@ using namespace vcsn;
using namespace vcsn::z_automaton;
#include <vaucanson/tools/dumper.hh>
// This guy comes from ETA p. 435, example 2.5.
/*------------------------------------------------------------.
| This automaton comes from the book ETA (Fig 2.6 p.437 ). |
`-----------------------------------------------------------*/
......
No preview for this file type
% These two commands are recognized by extex which will extract the
% code to run to produce the generated files. LaTeX will later
% include them.
%
% If you know a simpler means to do that, be my guest...
%
% Note that this system "caches" the result, and uses a Makefile to
% avoid useless recompilation of snippets that did not change.
\newcommand{\includegenerateddot}[1]{\includegraphics[scale=.6]{#1}}
\newcommand{\execcaption}[2]{\input{#1}}
\chapter{The \Vauc toolkit}
This chapter prevents a simple interface to \Vauc: a set of programs
......@@ -23,7 +12,7 @@ Six programs are planned to be shipped in a forthcoming version:
\item[vcsn-z] automata over $(\mathbb{Z},+)$;
\item[vcsn-z-min-plus] automata over $(\mathbb{Z},min)$;
\item[vcsn-z-max-plus] automata over $(\mathbb{Z},max)$;
\item[vcsn-rt-tdc] realtime transducers;
\item[vcsn-rw-tdc] realtime transducers;
\item[vcsn-tdc] automata over free monoid products.
\end{description}
......@@ -35,12 +24,38 @@ Currently, only \command{vcsn-b}, \command{vcsn-z}, and
\section{Boolean automata}
This section focuses on the program \Index{\command{vcsn-b}}, the
TAF-Kit component dedicated to Boolean automata. To know the list of
existing verbs:
TAF-Kit component dedicated to Boolean automata.
\subsection{First Contacts}
\command{vcsn-b} and its peer components of \tafkit all share the same
simple interface:
\begin{shell}
# vcsn-b \var{function} \var{automaton} \var{arguments...}
\end{shell}
\noindent
The \var{function} is the name of the operation to perform on the
\var{automaton}, specified as an XML file. Some functions, such as
evaluation, will require additional arguments, such as the word to
evaluate. Some other functions, such as \samp{exp-to-aut} do not have
an \var{automaton} argument.
\tafkit is made to work with Unix \emph{pipes}, that is to say, chains
of commands which feed each other. Therefore, all the functions
produce a result on the standard output, and if an \var{automaton} is
\samp{-}, then the standard input is used.
Other than that, the interface of the \tafkit components is usual,
including options such as \option{--version} and \option{--help}:
\execcaption{vcsn-b-help}{vcsn-b --help}
The whole list of supported commands is available via
\option{--list-commands}:
\execcaption{vcsn-b-commands}{vcsn-b --list-commands}
In the following, some of these commands are detailed.
\subsection{A first example}
......@@ -52,27 +67,35 @@ In the following, some of these commands are detailed.
\begin{figure}[ht] \centering
\begin{VCPicture}{(0,-2)(6,2)}
% states
\State{(0,0)}{A} \State{(3,0)}{B} \State{(6,0)}{C}
\State{(0,0)}{A}
\State{(3,0)}{B}
\State{(6,0)}{C}
% initial--final
\Initial{A} \Final{C}
\Initial{A}
\Final{C}
% transitions
\EdgeL{A}{B}{a} \EdgeL{B}{C}{b}
\LoopS[.5]{A}{b} \LoopN[.5]{A}{a} \LoopS[.5]{C}{b} \LoopN[.5]{C}{a}
%
\EdgeL{A}{B}{a}
\EdgeL{B}{C}{b}
\LoopS[.5]{A}{b}
\LoopN[.5]{A}{a}
\LoopS[.5]{C}{b}
\LoopN[.5]{C}{a}
\end{VCPicture}
\begin{legend}
The graphical layout of this automaton was described by hand,
using the Vaucanson-G \LaTeX{} package. However, the following
figures are generated by TAF-Kit, giving a very nice layout, yet
slightly less artistic.
The automaton is taken from \citet[Fig. I.1.1, p. 58]{sakarovitch.03.eta}.
\end{legend}
\caption{The automaton \Index{$A_1$}}
\label{A_1}
\caption{The automaton \index{A1@$\mathcal{A}_1$}$\mathcal{A}_1$}
\label{fig:a1}
\end{figure}
Let's consider the Boolean automaton $A_1$ (\autoref{A_1}). It is
part of the standard library, and can be dumped using
\Index{\taffn{dump-automaton}}:
Let's consider the Boolean automaton $\mathcal{A}_1$
(\autoref{fig:a1}). It is part of the standard library, and
can be dumped using \Index{\taffn{dump-automaton}}:
\execcaption{a1-dump}{vcsn-b dump-automaton a1}
......@@ -93,7 +116,7 @@ both.
\end{center}
\subsubsection{Determinization of $A_1$}
\subsubsection{Determinization of $\mathcal{A}_1$}
To determinize a Boolean automaton, call the
\Index{\taffn{determinize}} function:
......@@ -137,7 +160,7 @@ by the automaton.
\Vauc provides functions to manipulate rational expressions associated
to Boolean automata. For instance, computing the language recognized
by a Boolean automaton can be done using \Index{\taffn{aut\_to\_exp}}:
by a Boolean automaton can be done using \Index{\taffn{aut-to-exp}}:
\execcaption{a1.rat}{vcsn-b aut-to-exp a1.xml}
\execcaption{a1det.rat}{vcsn-b aut-to-exp a1det.xml}
......@@ -177,24 +200,6 @@ In the following:
\end{itemize}
% \begin{fnsection}{NAME}
% -----------------------
% A group of taf-kit functions.
% Putting the ending hline in the end section is tempting, but fails.
\newenvironment{fnsection}[1]{%
% \item{NAME}{ARGS}{DOC}
% ----------------------
% Define a taf-kit function.
% We use \item because it has Emacs indentation support.
\renewcommand{\item}[3]{\texttt{##1} \var{##2} & ##3\\}
\tabularx{\textwidth}{|l|X|}%
\hline\multicolumn{2}{|c|}{#1} \\\hline%
}{%
\endtabularx%
}
\begin{fnsection}{Input/output work with automata}
\item{define-automaton}{}{Define an automaton from scratch.}
\item{edit-automaton}{a1}{Edit an existing automaton.}
......@@ -281,7 +286,7 @@ programs:
\begin{description}
\item[vcsn-tdc] considering a transducer as a weighted automaton of a
product of free monoid,
\item[vcsn-rt-tdc] considering a transducer as a machine that takes a
\item[vcsn-rw-tdc] considering a transducer as a machine that takes a
word as input and produce another word as (two-tape automata).
\end{description}
Both views are equivalent and \Vauc provides algorithms to pass from a
......@@ -289,12 +294,7 @@ view to the other one.
\subsection{Example}
The realtime transducer $T_1$ (\autoref{bindiv3}) gives the quotient
by 3 of a binary number and the transducer $T_2$ (\autoref{add1}) adds
1 to a binary number.
\begin{figure}[h]
\begin{figure}[tp]
\begin{center}
\begin{VCPicture}{(0,-2)(6,2)}
% states
......@@ -309,12 +309,13 @@ by 3 of a binary number and the transducer $T_2$ (\autoref{add1}) adds
\ArcL{B}{C}{\IOL{0}{0}}
\ArcL{C}{B}{\IOL{0}{1}}
\end{VCPicture}
\caption{Realtime transducer $T_1$ computing the quotient by 3 of a binary number}
\label{bindiv3}
\caption{Realtime transducer $\mathcal{T}_1$ computing the
quotient by 3 of a binary number}
\label{fig:t1}
\end{center}
\end{figure}
\begin{figure}[h]
\begin{figure}[tp]
\begin{center}
\begin{VCPicture}{(0,-2)(3,2)}
% states
......@@ -328,15 +329,20 @@ by 3 of a binary number and the transducer $T_2$ (\autoref{add1}) adds
\LoopS[.5]{B}{(0,0)}
\EdgeL{A}{B}{(0,1)}
\end{VCPicture}
\caption{Transducer $T_2$ adding 1 to a binary number}
\label{add1}
\caption{Transducer $\mathcal{T}_2$ adding 1 to a binary number}
\label{fig:t2}
\end{center}
\end{figure}
The realtime transducer $\mathcal{T}_1$ (\autoref{fig:t1}) gives the
quotient by 3 of a binary number and the transducer $\mathcal{T}_2$
(\autoref{fig:t2}) adds 1 to a binary number.
\subsubsection{Evaluation}
\begin{shell}
# vcsn-rt-tdc evaluation quot_3_rt.xml '110'
# vcsn-rw-tdc evaluation quot_3_rw.xml '110'
\textit{0.1.0}
\end{shell}
......@@ -344,17 +350,17 @@ by 3 of a binary number and the transducer $T_2$ (\autoref{add1}) adds
The transducer $T$ only accepts binary number which are divisible by 3
as input.
\begin{shell}
# vcsn-rt-tdc domain quot_3_rt.xml > divisible_by_3.xml
# vcsn-rw-tdc domain quot_3_rw.xml > divisible_by_3.xml
\end{shell}
Now the file \file{divisible\_by\_3.xml} contains the description of a
Now the file \file{divisible-by-3.xml} contains the description of a
Boolean automaton that accepts only the numbers divisible by 3.
\subsubsection{to-tdc}
Each transucers can be transformed to the other type of transducer
thanks to the \taffn{to-tdc} and \taffn{to-rt-tdc} functions.
thanks to the \taffn{to-tdc} and \taffn{to-rw-tdc} functions.
\begin{shell}
# vcsn-rt-tdc to-tdc quot_3_rt.xml > quot_3.xml
# vcsn-tdc to-rt-tdc add1.xml > add1_rt.xml
# vcsn-rw-tdc to-tdc quot_3_rw.xml > quot_3.xml
# vcsn-tdc to-rw-tdc add1.xml > add1_rw.xml
\end{shell}
\subsubsection{Composing}
......@@ -363,7 +369,7 @@ thanks to the \taffn{to-tdc} and \taffn{to-rt-tdc} functions.
\end{shell}
\subsection{Available functions}
The following functions are available for both \command{vcsn-rt\_tdc}
The following functions are available for both \command{vcsn-rw-tdc}
and \command{vcsn-tdc} programs. To invoke them, run
\samp{\var{program} \var{algorithm-name} [\var{arguments}]}.
......@@ -377,8 +383,8 @@ In the following:
\item \var{w} is a word, for example \samp{"aabb"} if you are working
on an alphabet that contains the letters \samp{a} and \samp{b};
\item \var{a} is a Boolean automaton;
\item \var{t1\_rt} is a realtime transducer;
\item \var{t1\_fmp} is a transducer (seen as an automaton over a free
\item \var{t1-rw} is a realtime transducer;
\item \var{t1-fmp} is a transducer (seen as an automaton over a free
monoid product).
\end{itemize}
......@@ -411,7 +417,7 @@ In the following:
\item{evaluation}{t1}{Compute the evaluation of w by t1.}
\item{evaluation\_aut}{t1}{Compute a Boolean automaton describing the
\item{evaluation-aut}{t1}{Compute a Boolean automaton describing the
words produced by the language described by a evaluated by t1.}
\item{image}{t1}{Compute an automaton describing all output produced
......@@ -423,17 +429,17 @@ In the following:
\end{fnsection}
\begin{fnsection}{Algorithms for transducers}
\item{sub-normalize}{t1\_fmp}{Compute the sub-nomalized transducer of
\var{t1\_fmp}.}
\item{is-sub-normalize}{t1\_fmp}{Test if \var{t1\_fmp} is
\item{sub-normalize}{t1-fmp}{Compute the sub-nomalized transducer of
\var{t1-fmp}.}
\item{is-sub-normalize}{t1-fmp}{Test if \var{t1-fmp} is
sub-normalized.}
\item{composition-cover}{t1\_fmp}{.}%%FIXME
\item{composition-co-cover}{t1\_fmp}{.}%%FIXME
\item{b-compose}{t1\_fmp t2\_fmp}{Compose \var{t1\_fmp} and
\var{t2\_fmp}, two unweighted normalized or sub-normalized
\item{composition-cover}{t1-fmp}{.}%%FIXME
\item{composition-co-cover}{t1-fmp}{.}%%FIXME
\item{b-compose}{t1-fmp t2-fmp}{Compose \var{t1-fmp} and
\var{t2-fmp}, two unweighted normalized or sub-normalized
transducers.}
\item{to-rt-tdc}{t1\_fmp}{Compute the equivalent realtime transducer
of \var{t1\_fmp}.}
\item{to-rw-tdc}{t1-fmp}{Compute the equivalent realtime transducer
of \var{t1-fmp}.}
\item{intersection}{a}{Transform \var{a} in a fmp transducer by
creating, for each word, a pair containing twice this word.}
\hline
......@@ -441,9 +447,9 @@ In the following:
\begin{fnsection}{Algorithms for ``realtime'' transducers}
\item{realtime}{t1\_rt}{Compute the realtime transducer of \var{t1\_rt}.}
\item{is-realtime}{t1\_rt}{Test if \var{t1\_rt} is realtime.}
\item{to-tdc}{t1\_rt}{Compute the equivalent fmp transducer of \var{t1\_rt}.}
\item{realtime}{t1-rw}{Compute the realtime transducer of \var{t1-rw}.}
\item{is-realtime}{t1-rw}{Test if \var{t1-rw} is realtime.}
\item{to-tdc}{t1-rw}{Compute the equivalent fmp transducer of \var{t1-rw}.}
\hline
\end{fnsection}
......@@ -452,96 +458,94 @@ In the following:
This part shows the use of the program \Index{\command{vcsn-z}}, but
all comments should also stand for the programs
\command{vcsn-z\_min\_plus} and \command{vcsn-z\_max\_plus}.
\command{vcsn-z-min-plus} and \command{vcsn-z-max-plus}.
\subsection{Example}
Again, we will toy with some of the automata provided by
\command{vcsn-z}:
\execcaption{vcsn-z-automata}{vcsn-z list-automata}
Let's consider the following $\mathbb{N}$-automaton, \textit{i.e.}
an automaton which label's weights are in $\mathbb{N}$:
\subsection{Counting \samp{b}s}
%%Schema de l'automate B1
\begin{figure}[ht] \centering
\begin{figure}[tp] \centering
\begin{VCPicture}{(0,-2)(3,2)}
% states
\State{(0,0)}{A} \State{(3,0)}{B}
\State{(0,0)}{A}
\State{(3,0)}{B}
% initial--final
\Initial{A} \Final{B}
% transitions
\EdgeL{A}{B}{b}
\LoopS[.5]{A}{b} \LoopN[.5]{A}{a}
\LoopS[.5]{B}{b} \LoopN[.5]{B}{a}
%
\LoopS[.5]{A}{b}
\LoopN[.5]{A}{a}
\LoopS[.5]{B}{b}
\LoopN[.5]{B}{a}
\end{VCPicture}
\caption{The automaton \Index{$B_1$}}
\begin{legend}
Considered without weight, $\mathcal{B}_1$ accepts words with a
\samp{b}. With weights, it counts the number of \samp{b}s.
\end{legend}
\caption{The automaton \index{B1@$\mathcal{B}_1$}$\mathcal{B}_1$}
\label{fig:b1}
\end{figure}
This time the evaluation of the word \var{w} by the automaton $B_1$
will produce a number, rather than simply accept or reject \var{w}.
For instance let's evaluate \samp{abab} and \samp{bbab}:
Let's consider $\mathcal{B}_1$ (\autoref{fig:b1}, an
$\mathbb{N}$-automaton, \textit{i.e.} an automaton whose label's
weights are in $\mathbb{N}$. This time the evaluation of the word
\var{w} by the automaton $\mathcal{B}_1$ will produce a number,
rather than simply accept or reject \var{w}. For instance let's
evaluate \samp{abab} and \samp{bbab}:
\subsubsection{Evaluation}
\begin{shell}
# vcsn-z eval b1.xml 'abbb'
\textit{3}
# vcsn-z eval b1.xml 'abab'
\textit{2}
\end{shell}
\execcaption{b1.abbb}{vcsn-z dump-automaton b1 | vcsn-z eval - 'abbb'}
\execcaption{b1.abab}{vcsn-z dump-automaton b1 | vcsn-z eval - 'abab'}
The automaton $B_1$ ``counts'' the number of \samp{b} contained in
\var{w}.
\noindent
Indeed, $\mathcal{B}_1$ counts the number of \samp{b}s.
\subsubsection{Power}
Now let's consider the $B_1^n$, where
Now let's consider the $\mathcal{B}_1^n$, where
\begin{displaymath}
B_1^n = \prod_{i=1}^n B_1, n > 0
\mathcal{B}_1^n = \prod_{i=1}^n \mathcal{B}_1, n > 0
\end{displaymath}
\noindent
This is implemented by the \Index{\taffn{power}} function:
\execcaption{b4}{vcsn-z dump-automaton b1 | vcsn-z power - 4 >b4.xml}
\begin{shell}
# vcsn-z power b1.xml 4 > b1_4.xml
# vcsn-z power b1.xml 4 > b4.xml
\end{shell}
Now the file \file{b1\_4.xml} contains the automaton $B_1^4$. Lets see
what the evaluation of the words \samp{abab} and \samp{bbab} gives
with this automaton:
\noindent
The file \file{b4.xml} now contains the automaton $\mathcal{B}_1^4$.
Lets see what the evaluation of the words \samp{abab} and \samp{bbab}
gives with this automaton:
\begin{shell}
# vcsn-z eval b1_4.xml 'bbab'
\textit{81}
# vcsn-z eval b1_4.xml 'abab'
\textit{16}
\end{shell}
\execcaption{b4.abbb}{vcsn-z eval b4.xml 'abbb'}
\execcaption{b4.abab}{vcsn-z eval b4.xml 'abab'}
This time one can notice that the automaton $B_1^4$ returns the
evaluation of $B_1$ at power 4.
This time one can notice that the automaton $\mathcal{B}_1^4$ returns
the evaluation of $\mathcal{B}_1$ at power 4.
\subsubsection{Quotient}
One drawback of doing successive products of an automaton is
that it creates a lot of new states and transitions.
\begin{shell}
# vcsn-z power b1.xml 4 | vcsn-z info -
\textit{States: 16}
\textit{Transitions: 97}
\textit{Initial states: 1}
\textit{Final states: 1}
\end{shell}
\execcaption{b1.info}{vcsn-z dump-automaton b1 | vcsn-z info -}
\execcaption{b4.info}{vcsn-z info b4.xml}
One way of reducing the size of our automaton is to use the
``quotient'' algorithm.
\begin{shell}
# vcsn-z power b1.xml 4 | vcsn-z quotient - | vcsn-z info -
\textit{States: 5}
\textit{Transitions: 15}
\textit{Initial states: 1}
\textit{Final states: 1}
\end{shell}
\Index{\taffn{quotient}} algorithm.
\execcaption{b4.quot.info}{vcsn-z quotient b4.xml | vcsn-z info -}
\subsection{Available functions}
In this section you will find a brief definition of all functions for
manipulating weighted automata. The following functions are available
for both. They are called using \command{vcsn-z},
\command{vcsn-z\_max\_plus}, and \command{vcsn-z\_min\_plus} run as
\command{vcsn-z-max-plus}, and \command{vcsn-z-min-plus} run as
\samp{\var{program} \var{algorithm-name} [\var{arguments}]}.
\smallskip
......
......@@ -7,17 +7,22 @@
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{myhyperref}
\usepackage{xspace}
\usepackage{textcomp}
\usepackage{tabularx}
\usepackage{alltt}
\usepackage{url}
\usepackage{vaucanson-g}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{texi}
\usepackage{misc}
% The same argument is output and put in the index.
\usepackage{makeidx}
\makeindex
\newcommand{\Index}[1]{\index{#1}#1}
% Bibliography.
\usepackage{natbib}
\usepackage{mylistings}
\lstset{%
......@@ -39,59 +44,75 @@
\setboolean{developer}{true}
\fi
% The same argument is output and put in the index.
\newcommand{\Index}[1]{\index{#1}#1}
% Document a figure.
\newenvironment{legend}{%
\begin{quote}%
}{%
\end{quote}%
}
\newenvironment{cmp}{%
\begin{center}
\begin{minipage}{\textwidth}%
}{%
\end{minipage}