From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/generic/lecturer/doc/lecturer-doc.tex | 2372 ++++++++++++++++++++++++++
 1 file changed, 2372 insertions(+)
 create mode 100644 macros/generic/lecturer/doc/lecturer-doc.tex

(limited to 'macros/generic/lecturer/doc/lecturer-doc.tex')

diff --git a/macros/generic/lecturer/doc/lecturer-doc.tex b/macros/generic/lecturer/doc/lecturer-doc.tex
new file mode 100644
index 0000000000..7165c27f3a
--- /dev/null
+++ b/macros/generic/lecturer/doc/lecturer-doc.tex
@@ -0,0 +1,2372 @@
+% This is the documentation for the Lecturer package.
+% Author: Paul Isambert
+% Date: July 2010.
+%
+\input pitex
+
+\newif\ifextraline
+\output{%
+  \ifnum\outputpenalty=10000
+    \outputpenalty=0
+  \fi
+  \ifextraline
+    \global\vsize=\dimexpr\vsize-\baselineskip\relax
+    \ifnum\outputpenalty=\widowpenalty
+      \global\extralinefalse
+      \unvbox255
+    \else
+      \Shipout
+    \fi
+  \else
+    \ifnum\outputpenalty<\widowpenalty
+      \Shipout
+    \else
+      \ifnum\outputpenalty=10000
+        \Shipout
+      \else
+        \global\extralinetrue
+        \global\vsize=\dimexpr\vsize+\baselineskip\relax
+        \unvbox255 \penalty0
+      \fi
+    \fi
+  \fi
+  }
+\def\Shipout{%
+  \removependingtitles
+  \processmarginalia
+  \shipout\vbox{%
+      \box255
+      \ifpagenum
+        \kern\numexpr3\ifextraline-1\fi\baselineskip
+        \hbox to \hsize{\sectionfont\hfil\the\pageno}%
+      \fi
+    }%
+  \global\extralinefalse
+  \global\pagenumtrue
+  \advancepageno
+  }
+\newif\ifpagenum
+
+
+
+\setparameter document:
+  author   = "Paul Isambert"
+  title    = "\ltr's documentation"
+  pdftitle = "Lecturer's documentation"
+  version  = 1.0
+  date     = "07/23/2010"
+  display  = outlines
+  
+
+\setparameter page:
+%  pagewidth  = 20cm
+  pageheight = 26cm
+  left       = 4cm
+  top        = 3cm
+  lines      = 44
+  hsize      = 13cm
+
+\setparameter font:
+  command = \mainfont
+  name    = ChaparralPro-
+  size    = 10pt
+  roman   = Regular
+  bold    = Bold
+  italic  = Italic
+
+\setparameter font:
+  command = \notefont
+  name    = ChaparralPro-
+  size    = 8pt
+  roman   = Regular
+  bold    = Bold
+  italic  = Italic
+
+\setparameter font:
+  command = \sectionfont
+  name    = ChaparralPro-
+  size    = 12pt
+  roman   = Regular
+  bold    = Bold
+  italic  = Italic
+
+\setparameter font:
+  command = \titlefont
+  name    = ChaparralPro-
+  size    = 60pt
+  roman   = Regular
+
+\setparameter font:
+  command = \codefont
+  name    = LTYPE
+  size    = 8pt
+  type    = ttf
+  roman   = {}
+  bold    = B
+  italic  = O
+
+
+\setparameter section:
+  font       = "\sectionfont\sc"
+  beforeskip = 4
+  afterskip  = 1
+  minimum    = 4
+
+\setparameter subsection:
+  beforeskip    = 2
+  minimum       = 2
+  font          = "\sectionfont\it"
+  bookmarkstyle = "/F 1"
+
+\setparameter section subsection:
+  number = none
+  color  = ".8 0 0"
+
+
+\def\yax{%
+  Y\kern-.1em \raise.15em\hbox{\sc a}\kern-.1em \lower.15em\hbox{X}%
+  \antigobblespace
+  }
+\def\ltr{\emph{Lecturer}\antigobblespace}
+\newfornoempty\attrloop{1}#2 {%
+  \reverse\iffemptystring{#1}{#1\rm\char"007C\it}%
+  \passarguments{#2}}[#1]
+
+\newcount\paramcount
+\def\jump{%
+  \vskip-\lastskip
+  \penalty0
+  \ifdim\dimexpr\pagegoal-\pagetotal<\dimexpr 3\baselineskip-\prevdepth\relax
+    \clearpage
+  \else
+    \vskip\baselineskip
+  \fi}
+\def\bookmark#1{%
+  \advance\paramcount1
+  \pdfdest name {param_\the\paramcount} xyz
+  \createbookmark[{/C [.4 .4 .4]}]{4}{#1}{param_\the\paramcount}%
+  }
+
+\setcatcodes{_=12}
+\def\attr#1#2#3{%
+  \jump
+  \bookmark{#1}%
+  \noindent\llap{\attrib{#1} }%
+  \val{\it$<$\attrloop{}{#2 }$>$}\kern1em
+  \reverse\iffemptystring{#3}{{\hskip0pt plus 15em\penalty0\hskip0pt(\it Default:~\tcode{#3})}}
+  \par\noindent\ignorespaces
+  }
+\def\attrib#1{\color{.4 .4 .4}{{\codefont#1}}}
+\def\val#1{\color{.8 0 0}{{\codefont#1}}}
+\def\param#1{{\codefont\bf#1}}
+\def\rcom#1{\attrib{{\com#1}}\antigobblespace}
+\def\defcom{\jump\Defcom}
+\def\Defcom#1#2/{%
+  \noindent\llap{\rcom#1\kern.4em}#2\reverse\iffemptystring{#2}{\par\noindent}\ignorespaces}
+\def\draw#1 #2/{\jump\noindent\llap{\attrib{#1} }\val{#2}\par\noindent\ignorespaces}
+\def\Point#1#2{\tcode{(#1,#2)}}
+\def\point{\Point xy}
+
+\newdimen\seeindent
+\setbox0\hbox{\it See }
+\seeindent=\wd0
+\def\sectionaction#1{%
+  \note{%
+    \hangindent1\seeindent \hangafter1
+    See \color{\usevalueor section:color {0 0 0}}{#1}}%
+  }
+\newif\ifrightdemo
+\def\demo#1 #2 {%
+  \ifrightdemo \rightdemofalse \else \rightdemotrue \fi
+  \def\demofile{\tcode{LecturerDemo-#1.pdf}\antigobblespace}%
+  \pdfximage height \dimexpr(10\baselineskip-4pt) page #2 {LecturerDemo-#1.pdf}%
+  \setbox0=\hbox{\pdfrefximage\pdflastximage}%
+  \def\par{%
+    \endgraf
+    \ifdim\prevgraf\baselineskip<10\baselineskip
+      \kern\dimexpr(10\baselineskip-\prevgraf\baselineskip)
+    \fi
+    \let\par\endgraf}%
+  \vskip\baselineskip
+  \penalty0
+  \ifdim\dimexpr(\pagegoal-\pagetotal)<\ht0
+    \clearpage
+  \fi
+  \vbox to 8pt{%
+    \ifrightdemo
+      \hbox to\hsize{\hfill \pdfrefximage\pdflastximage}
+    \else
+      \hbox{\pdfrefximage\pdflastximage}
+    \fi
+    \vss}%
+  \kern-\baselineskip
+  \nointerlineskip
+  \parshape 11
+  \ifrightdemo
+    \repeatuntil{10}{0pt \dimexpr(\hsize-\wd0-\dimexpr(\baselineskip-1ex))}
+  \else
+    \repeatuntil{10}{\dimexpr(\wd0+1em) \dimexpr(\hsize-\wd0-1em)}
+  \fi
+  0pt \hsize
+  \noindent\vrule height 12pt depth 0pt width 0pt\ignorespaces
+  }
+
+
+
+
+
+
+
+
+
+
+
+%\input grid
+
+
+
+  
+\vbox to 4\baselineskip{%
+  \vfil
+  \hbox to \hsize{\titlefont \pdfcolorstack0 push {.8 0 0 rg}\pdfliteral {2 Tr}%
+    L\hss e\hss c\hss t\hss u\hss r\hss e\hss r%
+    \pdfliteral {0 Tr}\pdfcolorstack0 pop%
+    }}
+
+\vskip\baselineskip
+\hfill Author: \usevalue document:author \par
+\hfill \tcode{zappathustra@free.fr} \par
+\hfill Date: \usevalue document:date \par
+\hfill Version: \usevalue document:version \par
+
+
+\vfil
+
+
+\noindent\ltr creates presentations mainly based on PDF  features.
+It doesn't manipulate \TeX's typesetting process in a complex way
+to give the impression that slides are being layered,
+but use PDF's so-called optional content to produce exactly this:
+layers. It was originally meant to work with plain \TeX, but since
+writing for plain is one step away from writing for
+any format, it is format-independent, though
+the heavy hand it lays on the output routine might make
+it conflict with other code. In plain \TeX, things are innocuous;
+in La\TeX, though not thoroughly tested, \ltr works good,
+provided it is not in conflict with other packages; since it
+is pretty self-contained for what it's designed, things should
+work nicely. Finally, \ltr seems to be usable with Con\TeX t MkII,
+but not MkIV (except perhaps to make a handout). I welcome comments
+on use of \ltr in those formats, so I can improve it.
+
+As for engines, \ltr currently works with pdf\TeX\ and
+Lua\TeX\ only, because the code is dependent on pdf\TeX's
+primitives. My apologies to Xe\TeX\ users. I welcome drivers.
+
+The main drawback in using \ltr is it requires
+a `conforming reader,' as they say at Adobe, to work
+properly, that is a reader that understands advanced PDF code
+and a little bit of JavaScript. Which basically means Adobe's reader, available
+mostly everywhere, and free, but `as in free beer,' to make
+a quote.
+
+The main advantage is that typesetting (\TeX) and presentation
+flow (PDF) are neatly divided: each slide is a page \ital{typeset} by
+\TeX\ and \ital{manipulated on the screen} by PDF code. Beside the
+intellectual satisfaction, there are more direct benefits: for
+instance, the handout is already in the slide, even if it's not
+directly prepared as such. Better still, there's no need to prepare
+the manuscript in any way to adapt to the requirements of a
+presentation. A list or a table, for instance,
+can be displayed stepwise without changing the usual way you type
+them in: interspersed \rcom\step commands will do.
+\note{% 
+    If you don't feel like reading 30 pages of documentation,
+    switch to the demonstrations distributed with \ltr. For
+    an overview, go to the the
+    \let\sectionaction\unbrace
+    \tosection{demonstrations}{\color{\usevalueor section:color {0 0 0}}{Demonstrations}}
+    section.}%
+%
+
+And the best feature in \ltr, as far as I'm concerned, is that
+you can put anything anywhere with a few commands.
+
+\stoppage
+
+
+
+\section{Basic things}
+
+\subsection{Loading}
+
+\noindent\ltr should be loaded as is customary in the format at work,
+i.e. in plain TeX:
+
+\example
+\input lecturer
+\example/
+
+\noindent in La\TeX:
+
+\example
+\usepackage{lecturer}
+\example/
+
+\noindent and in Con\TeX t:
+
+\example
+\usemodule[lecturer]
+\example/
+
+
+
+
+
+\subsection{First things first}
+
+\noindent In \ltr, the content of a document is organized in
+slides, with steps to make things appear progressively on the screen
+when you're in fullscreen mode.
+A (default) slide is anything that appears between the following two commands:
+
+\defcom\slide\oarg{attributes}/
+\Defcom\endslide/
+In La\TeX\ you can use \verb"\begin{slide}" and \verb"\end{slide}", and
+in Con\TeX t \com\startslide and \com\stopslide. The
+\com\slide/\com\endslide pair can be used in all formats, though,
+which is why I'll use \com\slide and \com\endslide for the examples
+in this documentation.
+
+\defcom\step\oarg{attributes}/
+To make the content of a slide appear progressively on the screen,
+%
+\note{%
+    To advance in the presentation, use either a left click
+    or a right arrow key; to move backward, use a right click or a left
+    arrow; and you can also use \emph{\string\nextstep} and
+    \emph{\string\prevstep} with buttons.}%
+%
+this command is used where necessary. By default, it
+does nothing else, i.e. it doesn't disturb typesetting and simply
+creates the flow of the presentation with PDF code. Here's an example:
+
+\example
+\slide
+Something visible.
+\step My first proposition.
+
+\step And then... \step this.
+\endslide
+\example/
+
+\noindent which on the screen produces a paragraph
+with `\ital{Something visible. My first proposition.}' and
+another one with `\ital{And then... this.}' as is usual with
+\TeX. Except these paragraphs don't appear at once.
+
+A \com\step means you'll have to click
+to move on, and what follows it will appear on screen, whereas
+it is otherwise invisible (by default at least). In the example,
+`\ital{Something visible}' is already on the screen, since it is
+not in the scope of a \com\step command, but the rest appears
+piecewise, and it takes three clicks to reach the end of the slide.
+Conversely, when moving backward, either with a right click or
+a left arrow key, steps disappear.
+
+
+The \com\step command affects the content of what follows only,
+up to the next \com\step or to the slide's end. Something between
+the beginning of the slide and the first step is always visible.
+
+Everything between \com\slide and \com\endslide is only one page.
+Steps appear gradually because they are instructed to do so, but
+they are on the same page, as physically as is possible for a
+collection of bytes (which can be printed, though).
+
+\defcom\slideno\relax/
+\Defcom\slidenumber/
+The first of those is a count register holding the slide's number
+(i.e. \verb"\count0"). The second is a macro that returns its value.
+
+Now you know the best part of how things work. The rest, i.e. the
+optional \arg{attributes} and a bunch of other things, is only
+decoration, although it might be of interest too to enliven your
+slides.
+
+
+
+
+
+\subsection{Presentation and handout}[handout]
+
+\noindent\ltr allows you to easily produce a presentation for screen
+and a handout out of the same file. The output depends on
+the value of the \attrib{mode} attribute in the \param{job}           \tosection{job}{Attributes for the job}
+parameter. If it is set to \val{presentation}, then steps
+behave as defined above. If it is set to \val{handout},
+then only those steps that have the value \val{true} for
+the \attrib{handout} parameter appear on the page. Other
+steps are still present, but hidden; they can be turned on
+in the reader's layers panel, though. By default, all steps are
+visible in a handout. The following three commands take
+a more radical way.
+
+\defcom\presentationonly\arg{material}/
+In presentation mode, \arg{material} is simply typeset.
+In handout mode, however, it is gobbled. Thus, it takes no
+space on the page, and can't be retrieved.
+
+\defcom\handoutonly\arg{material}/
+The same thing the other way around.
+
+\defcom\presentationorhandout\arg{presentation}\arg{handout}/
+In \val{presentation} mode, the first argument is executed, and
+the second one in \val{handout} mode.
+
+Note the difference between
+
+\example
+\step A\step[handout=false] B\step C
+\example/
+
+\noindent and
+
+\example
+\step A\presentationonly{\step B}\step C
+\example/
+
+\setbox0=\hbox{B}
+\noindent In presentation mode, both will produce `ABC'.
+In handout mode, though, the first example will produce `A\kern\wd0C',
+%
+\note{%
+    In Adobe Reader, the \emph{layers panel} is in the
+    navigation panel on the left, represented by two squares overlapping,
+    usually below thumbnails and bookmarks.}%
+%
+with `B' still retrievable from the layers panel,
+and the second example will produce `AC', with no `B' anywhere.
+
+Both \com\presentationonly and \com\handoutonly ignore any space
+following their argument when they gobble it.
+
+
+
+
+
+
+\section{Settings things globally and locally}
+
+\noindent Slides and steps can have attributes that modify
+their behavior. These attributes can be set locally or globally,
+meaning they either affect the current slide/step or
+all slides/steps or all slides/steps belonging to
+a certain type defined with \com\setslide/\com\setstep.
+
+The way attributes are used is a matter of inheritance.
+At the top of the hierarchy, there are the \param{slide} and
+\param{step} parameters. Attributes to those parameters
+aplly to all slides and steps, unless they are given other
+values lower in the hierarchy. At the bottom of the hierarchy,
+each individual slide or step can be followed by attribute settings
+between brackets. The values given there override all inherited
+values, but they hold for the current slide or step only. In
+between, new types of slides and steps can be defined; they
+inherit attributes from the corresponding parameters, and transmit
+their own attributes to slides and steps of their kind.
+
+
+
+\subsection{Global settings}
+
+\defcom\setparameter \arg{parameter}:/
+\noindent This is used to set the values to attributes for
+\arg{parameter}. 
+%
+\note{%
+    There are only three parameters in \ltr: \emph{job}, \emph{slide},
+    and \emph{step}. They're sufficient to build a presentation,
+    and don't need to be created beforehand. Nonetheless, \yax's parameter
+    syntax is used everywhere.}%
+%
+The syntax for the attributes, which is used in many other places
+in \ltr, is as follows:
+
+\example
+\setparameter parameter:
+  attribute1 = valueA
+  attribute2 attribute3 = valueB
+  ...
+\par
+\example/
+
+\noindent You might find this syntax somewhat bizarre, but it
+is handy. It is the \yax syntax, and if you want to know more
+about it, see the \yax documentation. 
+Here's how it works: after \com\setparameter you type either
+\param{slide} or \param{step} (or \param{job}, as we'll see
+later). Then a colon, which might be preceded by a space.
+Then you type the name of an attribute, or the names of several
+attributes separated by a space, and then a `=' sign. Finally
+you give your value, which is ended by the following space.
+If a value must contain a space, or if it's empty, you must give it
+between braces or double quotes, as in:
+
+\example
+\setparameter step:
+  attribute1 = "my value"
+  attribute2 = {}
+  ...
+\example/
+
+\noindent Or, if a value begins or ends with a control sequence,
+%
+\note{%
+    If you have any doubt, you can always rely on braces and quotes.}
+%
+it should be enclosed between braces or double quotes again,
+unless it is made of a single control sequence. Thus:
+
+\example
+\setparameter step:
+  attribute3 = "\command{argument}"
+  attribute4 = \controlsequence
+  ...
+\example/
+
+\noindent Finally, and most importantly, a \com\setparameter
+declaration is ended by \com\par which, and that's the cool
+thing, can be a blank line, since \TeX\ inserts a \com\par at
+each blank line.
+
+The \com\setparameter declaration can be used as often as you
+wish; there's no need to respecify each attribute on each declaration:
+they retain their last declared value, which \ltr uses when it needs it.
+
+
+
+\subsection{Local settings}
+
+\noindent Attributes are set locally when they are given
+between brackets after the \com\slide or \com\step commands.
+They will be used for this particular \com\slide or \com\step.
+%
+\note{%
+    Quotes and braces are removed anyway. So you can
+    use them too, although they're completely useless:
+    the delimitator is the comma.}%
+%
+The syntax is the custom \verb"key=value" fashion: first the
+attribute, then the value, then a comma. Here you can forget
+what's just been said about values: no need for quotes or
+braces.
+On the other hand, you can't set several attributes
+at once, each one must take its own value.
+
+Thus the following step
+
+\example
+\step[ myatt = myval ] And now something terrific...
+\example/
+
+\noindent will have the value \verb"myval" for the attribute
+\verb"myatt" (note how unwanted space is ignored), instead of
+the value given in the \com\setparameter
+declaration... or in its type, which we turn to right now (and
+then I promise we'll see what those attributes are).
+Any space after the right bracket is ignored, so that you don't
+have to put \verb"%" signs here and there.
+
+
+
+
+\subsection{Type settings}
+
+\noindent You can create new types of slides or steps and set
+their parameters with the \com\setslide and \com\setstep commands respectively.
+Note that there is no difference between creating and setting the attributes
+of a new slide/step, and simply setting the attributes to an already
+created slide/step : the same commands are used in both cases.
+
+
+\defcom\setslide\arg{list of slides}/
+The \com\setslide command sets parameters for all slides in the space-separated
+\arg{list of slides} (and creates them if they don't exist yet), as in:
+
+\example
+\setslide{myslide myotherslide}
+  attribute1 = valueA
+  attribute2 = valueB
+  ...
+\par
+\example/
+
+\noindent To use the slide \verb"myslide", in plain \TeX\ you call
+\com\myslide and \com\endmyslide, in La\TeX\ you do \verb"\begin{myslide}"
+and \verb"\end{myslide}", and in Con\TeX t you use \com\startmyslide
+and \com\stopmyslide. Actually \com\myslide and \com\endmyslide work
+in all three formats, but they're not customary.
+
+Slides thus created inherit values from the \param{slide} parameter,
+except when new values are specified. In our example, \com\myslide and
+\com\myotherslide will have \verb"valueA" and \verb"valueB" for \verb"attribute1"
+and \verb"attribute2" respectively, instead of the values defined
+for those attributes in the \com\setparameter declaration. Both
+commands can still be followed by local settings between
+brackets, and they'll override the ones given here. So in
+
+\example
+\myslide[attribute2=myval]
+...
+\endmyslide
+\example/
+
+\noindent \com\myslide will have the values \verb"myval" for
+\verb"attribute2", \verb"valueA" for \verb"attribute1", and
+the values defined in the \com\setparameter declaration for
+all the other attributes.
+
+\defcom\setstep\arg{list of steps}/
+This takes a list of commands, i.e. control sequences,
+as its first argument, and then attributes and values as in \com\setparameter.
+The commands are just concatenated, with nothing to separate them.
+Thus
+
+\example
+\setstep{\mystep \myotherstep}
+  attribute1 = valueA
+  attribute2 = valueB
+  ...
+\par
+\example/
+
+\noindent creates or modifies \com\mystep and \com\myotherstep,
+which in a slide will create a
+step with \verb"valueA" and \verb"valueB" for \verb"attribute1"
+and \verb"attribute2" respectively, overriding the value of
+the \param{step} parameter. The commands can still take values
+between brackets to set attributes locally.
+
+
+
+
+
+
+
+
+
+\section{Attributes for slides}
+
+\noindent The attributes that follow are to be used in the \com\setparameter 
+declaration for the \param{slide} parameter, in the \com\setslide declaration,
+and as optional arguments to the \com\slide command and equivalent commands
+created with \com\setslide, for which I'll use \com\slide generically.
+
+
+
+\subsection{PDF and navigation}[pdfslides]
+
+\noindent First of all, if a \com\slide command takes anything
+between brackets, and if among it there is something that doesn't
+contain a `=' sign, i.e. something that is obviously no attribute
+setting, then this thing, let's call it a string, becomes the
+slide's title, and it is recorded in a macro called \com\slidetitle,
+which you can use in the slide itself. It is also used in bookmarks
+(if the slide is to be bookmarked), which leads us to our first
+attribute.
+
+
+\attr{pdftitle}{string}{slide's title}
+Suppose you want a slide with title \verb"Something about \TeX". Then
+if that string is used in a bookmark, the bookmark won't look
+very good, because of the \TeX\ operations contained in the \com\TeX
+command, which bookmarks don't understand, since bookmarks are
+pretty limited. This attribute sets the title of the slide for
+use in bookmarks (and in the layers panel too).
+%
+\note{%
+    Layers, i.e. steps, are grouped in the layers panel under the
+    heading of the slide where they belong.}%
+%
+It doesn't make
+much sense except as a local attribute, unless you define it
+with a command whose definition changes from slide to slide,
+involving for instance a counter.
+
+I a slide has no title, pdf or not, `Page \ital{n}' is used in
+bookmarks and layers, but the \com\slidetitle command remains empty
+(not undefined).
+
+\attr{bookmark}{true false}{true}
+If this is set to \val{true}, a bookmark is created with the
+slide's title.
+
+\attr{bookmarklevel}{number}{1}
+The level of the slide's bookmark. The higher the \val{number}, the       \tosection{bookmarks}{Creating bookmarks}
+lower the slide in the hierarchy. The \val{number} needs not be
+an integer.
+
+\attr{bookmarkstyle}{{bookmark options}}{none}
+The style of the bookmark, i.e. the optional argument in the
+\rcom\createbookmark command.
+
+\attr{anchor}{name}{none}
+An anchor to navigate to the slide with a \rcom\goto command.
+%
+\note{%
+    You can actually specify the \emph{anchor} for several
+    slides at once, provided the value is a command that holds
+    a variable changing with slides.}%
+This the optional \arg{anchor} in \rcom\createbookmark.
+Since two anchors can't have the same name, this attribute can be used
+with \com\slide only, not in the \com\setparameter and \com\setslide
+declarations.
+
+
+
+%
+%\needspace{7\baselineskip}
+\subsection{Dimensions}[dimensions]
+
+\attr{width}{dimension}{15cm}
+The width of the slide.
+
+\attr{height}{dimension}{12cm}
+The height of the slide.
+
+\attr{hsize}{dimension}{slide's \attrib{width} minus twice its \attrib{left}}
+The width of lines.
+
+\attr{left}{dimension}{2cm}
+The left margin, i.e. the distance between the slide's left
+border and the textblock.
+
+\attr{right}{dimension}{unspecified}
+The right margin, i.e. the distance between the textblock and
+the slide's left border. If present, this parameter is always obeyed,
+in the following way: if neither \attrib{left} nor \attrib{hsize}
+is specified, \attrib{left} is set to the value of \attrib{right}
+and \attrib{hsize} is computed accordingly;
+%
+\note{%
+    Thus, to center the textblock on the slide, specify the \emph{right}
+    attribute only. The same holds for \emph{bottom} to center
+    vertically, and for areas it is also true of \emph{right},
+    \emph{bottom}, \emph{hshift*} and \emph{vshift*}.}%
+%
+if one is specified
+but not the other, the unspecified one is computed according
+to the specified one and \attrib{right}; and if both are present,
+\attrib{hsize} is ignored and the previous rule applies.
+
+What is inherited from global to type to local settings is the
+result of this calculation, i.e. values for \attrib{left} and
+\attrib{hsize}. If these are changed \attrib{right} won't be
+taken into account. Conversely, if \attrib{right} is specified,
+then \attrib{left} and \attrib{hsize} aren't inherited. If things
+were otherwise, \attrib{left} would always be specified (since
+inherited) and it'd be impossible to compute it according
+to \attrib{right} and \attrib{hsize}, since it always wins
+against the latter. Thus, assuming a slide width of 10cm, 
+with the following:
+
+\example
+\setparameter slide:
+  left  = 2cm
+  right = 1cm
+
+\setslide{slideA}
+  left  = 1cm
+
+\setslide{slideB}
+  right = 2cm
+  hsize = 5cm
+\example/
+
+\noindent we have a default slide with a left margin 2cm wide,
+right margin 1cm, and a line length of 7cm. For \verb"slideA"
+nothing is recomputed, thus the left margin is 1cm but the line
+length is still 7cm, which gives a right margin of 2cm. And
+\verb"slideB" has a \attrib{right} attribute, which triggers
+a computation; \attrib{left} isn't inherited, thus only \attrib{hsize}
+is specified and \attrib{left} is computed accordingly (to 3cm,
+as you might imagine).
+
+\attr{vsize}{dimension}{slide's \attrib{height} minus twice its \attrib{top}}
+The height of the textblock. This isn't important for page breaks,
+since no page break occurs in \ltr, but for the \attrib{vpos}
+attribute, and the scaling of the page if any.
+
+\attr{top}{dimension}{1cm}
+The upper margin, i.e. the distance between the slide's top
+border and the textblock.
+
+\attr{bottom}{dimension}{unspecified}
+The bottom margin, i.e. the distance between the textblock
+and the slide's bottom border. Works exactly as \attrib{right}
+in the vertical dimension, i.e. it is al ways obeyed, but
+not inherited, etc.
+
+Note that in full screen mode, readers set the page so that
+its smallest dimension goes from one side of the screen to
+the other. Thus, with
+
+\example
+\setparameter slide:
+  height = 12cm
+\par
+\setlide{myslide}
+  height = 14cm
+\par
+\example/
+
+\noindent \com\slide and \com\myslide will actually look like
+they have the same height but not the same width. And the type
+will appear smaller in \com\myslide. By the way, the 
+dimensions 12cm and 15cm are default simply because they
+make \TeX's default 10pt Computer Modern look readable.
+
+\attr{baselineskip}{{dimension or glue}}{12pt}
+The baseline distance for the slide. Glue means something
+like \verb"2pt plus 1fill", which can be useful (see
+the \attrib{vpos} attribue below).
+
+\attr{topskip}{{dimension or glue}}{12pt}
+The distance between the first line's baseline and the top
+of the textblock.
+
+\attr{parskip}{{dimension or glue}}{0pt}
+The distance between paragraphs.
+
+\attr{parindent}{dimension}{0pt}
+The width of the paragraph's indentation for this slide.
+
+You might want the previous dimensions to be connected in
+%
+\note{%
+    The slide's font, if any (see the \emph{<font>} attribute below),
+    is called before these dimensions are set, so the \emph{em}
+    and \emph{ex} dimensions works properly.}%
+some way. For instance, by default, \attrib{hsize} is connected
+to the slide's \attrib{width} and \attrib{left}. This is because
+the latter two attributes set the \TeX\ dimensions that the \attrib{hsize}
+attribute refers to. So the order in which those dimensions are set is important.
+Here are the dimensions and the attributes that set them, in the
+order of the assignement:
+
+\def\setdim#1#2{\par\noindent\com#1 = \attrib{#2}}
+\vskip\baselineskip
+\setdim\baselineskip{baselineskip}
+\setdim\topskip{topskip}
+\setdim\parskip{parskip}
+\setdim\pdfpagewidth{width}
+\setdim\pdfpageheight{height}
+\setdim\pdfhorigin{left}
+\setdim\pdfvorigin{top}
+\setdim\hsize{hsize}
+\setdim\parindent{parindent}
+\par\noindent\attrib{vsize}
+\vskip\baselineskip
+
+\noindent Thus, the default value for the \attrib{hsize} 
+attribute is \attrib{width} minus twice \attrib{left} for each slide,
+because it is set as:
+
+\example
+  hsize = "\pdfpagewidth-2\pdfhorigin"
+\example/
+
+\noindent Which leads to an important point: in \ltr, a \arg{dimension}
+can be an expression, since it is then embedded in a \com\dimexpr primitive.
+
+
+\attr{hpos}{ff fr rf rr}{fr}
+This controls the slide's horizontal justification. The values mean:
+\val{ff} is flushleft/flushright (i.e. text justified on both
+sides), \val{fr} is flushleft/raggedright (commonly called raggedright),
+\val{rf} is raggedleft/flushright (called raggedleft),
+and \val{rr} is raggedleft/raggedright (i.e. text centered).
+Here second-order infinite glue is used.
+
+\attr{vpos}{top center bottom}{center}
+This sets how the lines are set in the textblock. Slides
+typically doesn't have the same number of lines, so we can't
+simply treat them as usual pages in typesetting. This is
+how the text of a slide is vertically positionned in the 
+area defined by \attrib{vsize}. The \val{top} value
+means the text is flushed at the top, the \val{bottom}
+value is the same thing at the bottom, and \val{center}
+means the text will be centered in the area. This positioning
+is done with first-order infinite stretch, so you can use
+some too, or higher-order stretch, in the slide's content,
+to achieve some effects.
+
+\attr{scale}{true false}{false}
+If the main content of a slide is higher than \attrib{vsize}, it is
+scaled to the desired dimension if this attribute is set to \val{true}.
+The bad news is it is also scaled horizontally, to keep proportions.
+
+
+
+
+
+
+\subsection{Content}
+
+\attr{everyslide}{code}{nothing}
+Material inserted at the beginning of each slide (in vertical mode).
+For instance after                                                       \tosection{areas}{Adding material to areas}
+
+\example
+\setslide{myslide}
+  everyslide = "\position{title}{\slidetitle}"
+\example/
+
+\noindent the title's slide will be inserted in the \verb"title"
+area for each slide called with the \com\myslide command. 
+
+\attr{areas}{{list of areas}}{all}
+This denotes the areas that may appear
+on a given slide. The keyword \val{all}, which is default, means that
+all areas will be painted (provided they are visible or contain material).
+Otherwise, \val{list of areas} enumerates allowed areas, separating them
+with space. If an area isn't painted on a slide but nonetheless contains
+material, this material is lost (and not even processed in the first place).
+
+\attr{areas*}{{list of areas}}{none}
+The list of excluded areas, i.e. the reverse of the previous attribute.
+Areas belonging to that list aren't painted on the slide. If an area appears
+in both \attrib{areas} and \attrib{areas*}, it is painted unless
+is is simply implicitely present in \attrib{areas} with \val{all}.
+
+
+
+\subsection{Style}
+
+\attr{background}{{named color or shade or color expression}}{white}
+The background color of the slide.                                            \tosection{colors}{Colors, shades, and images}
+
+\attr{foreground}{{named color or color expression}}{black}
+The slide's foreground color.
+
+\attr{image}{image}{none}
+An image inserted in the slide's background, above the background color.      \tosection{images}{Images}
+The image is inserted at the slide's upper left corner, and has the width
+and height it was declared with. Since this
+parameter is inherited, to cancel it give as \arg{image} any name that is
+not a declared image; \ltr is in the middle of a shipout when it reads
+this attribute, so don't worry, you'll get no error message.
+
+\attr{font}{{font command}}{job's font}
+The font used to typeset the slide.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. If this attribute is used,
+it should be specified for all slide types, or the
+\param{job} parameter should have a value to its own 
+\attrib{font} attribute. Otherwise, if a slide with a font
+information is followed by a slide without such information,
+the latter will use the font of the former.
+
+\pdfdest name {backtrans} xyz
+\attr{transition}{{named transition}}{none}
+This is the way the PDF reader will display, animate, enliven, \tosection{transitions}{Transitions}
+and perhaps discredit your presentation. A transition is
+a little animation conforming readers play when they go
+from one slide to the next. They work in full screen only.
+A \val{named transition} should be recorded beforehand with \rcom\newtransition
+unless you use the default values, in which case you can use at
+once \val{split}, \val{blinds}, \val{box}, \val{wipe},
+\val{dissolve}, \val{glitter}, \val{fly} (no less), \val{push},
+\val{cover}, \val{uncover} and \val{fade}.
+
+
+
+
+
+
+
+
+
+
+
+\section{Attributes for steps}
+
+\noindent The attributes that follow are to be used in the \com\setparameter 
+declaration for the \param{step} parameter, in the \com\setstep declaration,
+and as optional arguments to the \com\step command and equivalent commands
+created with \com\setstep, for which I'll use \com\step generically.
+
+\subsection{PDF and navigation}
+
+\noindent As with slides, an entry without a `=' sign
+in the optional argument to the \com\step command becomes
+the step's name (which should be unique on a given slide).
+This name is mainly useful for referencing
+with the \attrib{on} and \attrib{off} attributes and the
+\com\showorhide command, but it is also
+used as the step's name in the layers panel of the reader
+(if it has one). Hence:
+
+\attr{pdftitle}{string}{step's default name}
+Set the name used in the reader's layers panel. Thus you
+can have a nice title here and keep
+an uninformative-but-less-painful-to-type name
+to refer to a step in the attributes that follow.
+(If a step has no name, it is referred to in the layers
+panel with `step \ital{n}' with \ital{n} set back to zero
+at each slide.)
+
+\attr{on}{{list of steps}}{none}
+This sets the steps that make the current step appear.
+%
+\note{%
+    When moving backward, just like the controlling step will
+    toggle its visibitity, steps tied with \emph{on} and \emph{off}
+    will too.}%
+%
+If there is no \attrib{on} attribute, a step appears
+at its position in the source. If there's an \attrib{on} attribute,
+then it appears when the steps referred to in the list
+are reached. If the list of steps contains the keyword \val{here},
+then the step also appear by itself. Steps in the list are
+separated by space.
+
+\attr{off}{{list of steps}}{none}
+This is the same thing as \attrib{on} in reverse: the step
+disappears when the steps in the list are reached. The \val{here} keyword
+can't be used.
+
+Note that a step with an \attrib{on} and/or \attrib{off} list
+%
+\note{%
+    This means there's no transitivity in the \emph{on} and \emph{off}
+    attributes: if step A is tied to step B and step B to step C, this
+    doesn't mean A is tied to C (it can, too, of course).}%
+%
+doesn't follow the steps in those lists, i.e. it doesn't appear/disappear
+when they do, but simply when they are reached in the linear sequence
+of steps in the source (which coincide more often than not).
+
+In the following example, the first step will appear
+by itself. Then the second step appears, along with
+the fourth, and the first one disappears. Finally,
+when the third step appears the first reappears.
+Since the fourth step has no autonomy, after the third
+step a click will lead to the next slide (provided
+it's the end of the slide, of course).
+
+\example
+\step[on=here B,off=A] First.
+\step[A] Second.
+\step[B] Third.
+\step[on=A] Fourth.
+\example/
+
+\attr{handout}{true false}{true}
+Steps whose value is \val{true} for this attribute are visible    \tosection{handout}{Presentation and handout}
+on the page when the document is processed as a handout (i.e.
+\val{handout} is the value of the \attrib{presentation} attribute
+for the \param{job} parameter), no
+matter how they appear during a presentation. Thus the document
+can be printed without manipulating layers beforehand.
+
+\attr{visible}{true false}{false}
+When this attribute is \val{true}, then the step is visible on
+the page when it is opened.
+\note{%
+    This kind of step of course doesn't take a click during
+    the presentation. In the example on the left, you need
+    only two clicks to display \emph{Three}.}%
+%
+For instance, in a slide with:
+
+\example
+\step One.
+\step[visible=true] Two.
+\step[handout=true] Three.
+\example/
+
+\noindent the following happens: if we're in normal presentation
+mode, then the second step will be visible on the slide when it is displayed,
+whereas the other two will appear when clicking. On the other hand, in a
+handout, only the third step will be visible. With:
+
+\example
+\setparameter step:
+  visible handout = true
+\example/
+
+\noindent all steps will be visible by default, in both modes.
+
+
+
+
+\subsection{Content}
+
+\attr{left}{dimension}{0pt}
+The distance between the textblock's left border%
+\note{%
+    You can create list items and sub-items by simply
+    creating steps with positive \emph{left} and/or
+    \emph{right}.}%
+%
+(defined by the slide's \attrib{left} attribute and the left)
+and the border of the step's text.
+
+\attr{right}{dimension}{0pt}
+Same as \attrib{left}, on the right.
+
+\attr{vskip}{skip}{0pt}
+The value of the vertical glue inserted each time a \com\step
+occurs in vertical mode.%
+\note{%
+    As with slides, the step's font, if any (see below), is
+    called before those dimensions are used, so the \emph{em}
+    and \emph{ex} dimensions have the proper values.
+    Note that there's already the \emph{parskip} glue between
+    vertical steps.}%
+%
+
+\attr{everyvstep}{code}{nothing}
+Material inserted when a \com\step occurs in vertical mode.
+The insertion takes place after \attrib{vskip} (and doesn't
+switch to horizontal mode by itself).
+
+\attr{hskip}{skip}{0pt}
+The value of the horizontal glue inserted each time a \com\step
+occurs in horizontal mode.
+
+\attr{everyhstep}{code}{nothing}
+Material inserted when a \com\step occurs in horizontal mode,
+after \attrib{hskip}
+
+\attr{group}{true false}{false}
+If this is set to \val{true}, the content of the step (including
+the value of \verb"every(v/h)step") happens inside a group.
+
+
+
+\subsection{Style}
+
+\attr{font}{{font command}}{slide's font}
+The font used to typeset the step.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. If this attribute is used,
+it should be specified for all step types, or the slide or job
+should have its own \attrib{font} attribute, or the step should
+have \attrib{group} set to \val{true}. Otherwise, font will
+bleed to the rest of the slide.
+
+\attr{color}{{Named color or color expression}}{slide's foreground}
+The color of the step, overriding the slide's foreground color.       \tosection{realcolors}{Colors}
+
+\attr{transition}{{named transition}}{none}                           \tosection{transitions}{Transitions}
+The animation used to display the step, as with \com\slide.
+Note that the \val{push}, \val{cover}
+and \val{uncover} transitions make more sense with slides,
+since they affect the entire slide and not the step only.
+
+
+
+
+
+
+
+
+
+\section{Attributes for the job}[job]
+
+\noindent This section describes attributes pertaining to the entire document.
+They are set with the \com\setparameter command with \param{job}
+as the parameter's name.
+
+\attr{author}{string}{nothing}
+The author's name. It is stored in a command called \com\Author,
+and used in the document's properties, unless \attrib{pdfauthor}
+is defined.
+
+\attr{pdfauthor}{string}{nothing}
+This is used in the document's properties instead of \attrib{author}.
+
+\attr{title}{string}{\string\jobname}
+The document's title. It is stored in a command called \com\Title,
+and used in the document's properties, unless \attrib{pdftitle}
+is defined.
+
+\attr{pdftitle}{string}{nothing}
+This is used in the document's properties instead of \attrib{title}.
+
+\attr{date}{string}{\arg{month}/\arg{day}/\arg{year}}
+The document's date, recorded in the macro \com\Date.
+
+\attr{background}{{named color or color expression}}{reader's default}
+This sets the color of the reader's background (if the reader allows        \tosection{realcolors}{Colors}
+such a thing to be done). You can set it to the color of the slide's
+background, so that slides appear to have the screen's dimensions.
+
+\attr{font}{{font command}}{nothing}
+The default font for the job.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries. It is wise to give a value to this
+attribute, so that fonts can be safely used in slides and steps.
+
+\attr{mode}{presentation handout}{presentation}
+Selects how the document should be displayed. In \val{handout}, only      \tosection{handout}{Presentation and handout}
+those steps whose value for the \attrib{handout} attribute is \val{true}
+are displayed. The other ones nonetheless take space on the slide and
+can be turned on in the reader's layers panel. The \com\handoutonly,
+\com\presentationonly a,d \com\presentationorhandout commands
+are more radical yet, since they gobble the discarded material, which
+isn't typeset.
+
+\attr{fullscreen}{true false}{false}
+If this is turned to \val{true}, the document is opened in full screen,
+which will probably make the reader send a message for confirmation.
+
+\attr{autofullscreen}{true false}{false}
+If this is turned to \val{true}, the document is displayed in full screen
+before navigating to a destination (when a bookmark is clicked, for instance),
+so that the destination is properly reached.
+
+\attr{normal}{none outlines thumbs layers}{outlines}
+Selects what must be displayed in the reader's navigation panel when not
+in full screen: \val{outlines} is, well, outlines (or bookmarks), \val{thumbs}
+is thumbnails, and \val{layers} shows the layers panel, where the steps
+can be turned on and off; \val{none} folds the navigation panel.
+
+\attr{menutext}{text}{***}
+The text to be displayed at the top of a submenu in the              \tosection{bookmarks}{Creating bookmarks}
+navigation pop-up menu, to represent the current bookmark
+
+
+
+
+
+
+
+\section{Areas}
+\noindent Material normally declared is typeset following \TeX's usual rules,
+building paragraphs in the slide's textblock.
+However, in \ltr you can put material anywhere, thanks to areas.
+Areas can also be used simply as decorations, since they're basically
+colored squares.
+
+
+
+\subsection{Using a grid}
+
+\defcom\showgrid[\arg{left},\arg{top}]\arg{increment}\oarg{named color or color expression}\oarg{line width}/
+This displays a grid on top of the slides
+%
+\note{%
+    Grids can also be used as decorations, with a little
+    imagination.}%
+%
+(following the command) to ease the creation of a display.
+Lines are drawn at a distance
+of \arg{increment} from each other. The grid starts from the upper left
+corner by default, but the optional \arg{left} and \arg{top} set horizontal and
+vertical shifts respectively (\arg{top} being a vertical distance \ital{� la \TeX},
+i.e. going downward). If no optional color is given, the grid is painted grey,
+and the default line width is .2pt.
+There can be as many such declarations as wanted, each grid being painted
+on top of the previous one. For instance:
+
+\example
+\showgrid[2cm,2cm]{1mm}
+\showgrid{1cm}[red][.4pt]
+\example/
+
+\noindent displays a grid in millimeters in grey, starting at 2cm from both the
+upper and left border, and a grid in centimers on top of it in red, with
+a line width twice the previous one, starting
+from the upper left corner. Note that there should be no space before
+the last two optional arguments (if it was allowed there'd
+be risks of unwanted space gobbling).
+
+
+\defcom\hidegrids/
+Hides all grids on following slides, as if \com\showgrid had
+never been called.
+
+
+
+
+\subsection{Adding material to areas}[areas]
+
+\defcom\position\arg{area}[\arg{left},\arg{top}]\arg{material}/
+This puts \arg{material} inside \arg{area}.
+%
+\note{%
+    If \emph{<left>} or \emph{<top>} are 0pt, they can be omitted.
+    Not the brackets and comma, though.}%
+%
+However, things
+differ greatly whether the optional argument is present or not. In
+case it isn't, \arg{material} is put below previous
+material in \arg{area}, as if continuing a page. On the other
+hand, if the optional argument is present, then \arg{material}
+is typeset so that its left border is at a distance of \arg{left} from the
+left border of the \arg{area}'s textblock and its baseline at a distance of
+(\arg{top} + \arg{area}'s \attrib{topskip})
+%
+\note{%
+    The calculation includes \emph{<topskip>} so the connection
+    between freely positioned material and normally position material
+    is preserved. When using it, this formula proves far more intuitive
+    than it seems.}
+%
+from its upper border. Thus, if both
+\arg{left} and \arg{top} are 0pt, then \arg{material} is typeset normally.
+Material already in the area has no effect on this process, and \arg{material}
+will have no effect either on incoming material, which is why
+\verb"\position{area}{material}" and \verb"\position{area}[0pt,0pt]{material}"
+aren't the same thing at all.
+
+The \com\position obeys the flow of the presentation, and appears
+only when the \com\step where it belongs appears. In this example:
+
+\example
+\step \position{myarea}{One}
+\step \position{myarea}{Two}
+\step \position{myarea}{Three}
+\example/
+
+\noindent `One', `Two' and `Three' will appear one after the other,
+and one above the other. On the other hand with:
+
+\example
+\step[off=B]   \position{myarea}[12pt,12pt]{One}
+\step[B,off=C] \position{myarea}[12pt,12pt]{Two}
+\step[C]       \position{myarea}[12pt,12pt]{Three}
+\example/
+
+\noindent `One', `Two' and `Three' will admittedly appear one
+after the other, but also disappear when one appears and
+take the place of the previous one, since they share the same position. All areas are
+emptied at each new slide. Remember that to be painted on a given slide,
+an area must be in the list of areas that is the value of
+the \attrib{areas} attribute for this slide, or shouldn't appear
+in the slide's \attrib{areas*} attribute. By default, slides accept
+all areas.
+
+\defcom\setarea\arg{list of areas}/
+To create an area, or to modify an existing one, this command is
+used with \arg{list of areas} being area names separated by space;
+thus attributes similar for several areas can be declared at once.
+The command then takes attributes and values like \com\setslide
+above. For instance the following code creates or modifies two areas, 
+verb"badidea" and \verb"ugly":
+
+\example
+\setarea{badidea ugly}
+  background = red
+  foreground = green
+  ...
+\par
+\example/
+
+
+
+
+
+\subsection{Dimensions}
+
+\attr{width}{dimension}{slide's width}
+The area's width, i.e. the width of the painted zone.
+%
+\note{%
+    As far as dimensions are concerned, areas are very
+    similar to slides.
+    See the \emph{Visual Doc} for an illustration of
+    this claim.}%
+
+\attr{hshift}{dimension}{0pt}
+The distance between the area's left border and the slide's left border.
+
+\attr{hshift*}{dimension}{unspecified}
+The distance between the area's right border and the slide's right border.
+The \attrib{hshift*} attribute is always obeyed if present. 
+If neither \attrib{width} nor \attrib{hshift} are specified, then
+\attrib{hshift} is set to \attrib{hshift*} and \attrib{width} is
+computed accordingly, which is convenient to center an area on a slide.
+If one of \attrib{width} or \attrib{hshift} is present but not the other,
+then the latter is computed with the given value and \attrib{hshift*}.
+If both are present, \attrib{width} is ignored and the previous rule applies.
+
+
+\attr{height}{dimension}{slide's height}
+The area's height. This defines the vertical dimension of the painted zone.
+
+\attr{vshift}{dimension}{0pt}
+The distance between the area's top and the slide's top.
+
+\attr{vshift*}{dimension}{unspecified}
+The distance between the area's bottom and the slide's bottom.
+It works like \attrib{hshift*} in the vertical dimension, and
+is consequently always obeyed.
+
+\attr{hsize}{dimension}{area's width}
+The line's length in the area.
+
+\attr{left}{dimension}{0pt}
+The area's left margin, i.e. the distance between its left border
+and the left border of its textblock.
+
+\attr{right}{dimension}{unspecified}
+The area's right margin, i.e. the distance between its right border
+and the right border of its textblock. Like the same attribute for slides, it is always
+obeyed, i.e. if specified \attrib{hsize} and/or \attrib{left} are set accordingly.
+For the rule governing those values are computed, see the discussion
+on the \attrib{right} attribute for slides, or on the \attrib{hshift*} attribute
+for areas just above, which works similarly. 
+
+\attr{hpos}{ff fr rf rr}{fr}
+This controls the area's horizontal justification. The values mean:
+\val{ff} is flushleft/flushright (i.e. text justified on both
+sides), \val{fr} is flushleft/raggedright (commonly called raggedright),
+\val{rf} is raggedleft/flushright (called raggedleft),
+and \val{rr} is raggedleft/raggedright (i.e. text centered).
+
+\attr{vsize}{dimension}{area's height}
+The height of the area's textblock, not for page breaks, obviously,
+but for the \attrib{vpos} attribute below.
+
+\attr{top}{dimension}{0pt}
+The area's top margin, i.e. the distance between its upper border and
+the top of its textblock.
+
+\attr{bottom}{dimension}{unspecified}
+The area bottom margin, i.e. the distance between its textblock's bottom
+and its bottom border. It works like \attrib{right} in the vertical
+dimension.
+
+\attr{vpos}{top center bottom}{top}
+The vertical justification of the area's content in the textblock (defined
+as \attrib{vsize}).
+%
+\note{%
+    Freely positioned material is unfolded (including its vertical
+    displacement) at the top of normally positioned material.
+    Hence its vertical justification might seem somewhat unpredictable
+    unless \emph{<vpos>} is set to \emph{top}, though it isn't by \TeX's standard.
+    As a rule of thumb, take the top of the justified textblock as the
+    vertical reference, and consider that freely positioned material
+    is insensitive to vertical justification.}%
+%
+
+\attr{baselineskip}{{dimension or glue}}{current \com\baselineskip}
+The baseline distance for the area.
+
+\attr{topskip}{{dimension or glue}}{current \com\topskip}
+The distance between the baseline of the area's first box and
+the area's top. Unlike \TeX's \com\topskip, this distance is always
+respected, no matter the height of the box.
+
+\attr{parskip}{{dimension or glue}}{0pt}
+The distance between paragraphs in the areas, including between
+two normal \com\position.
+
+\attr{parindent}{dimension}{0pt}
+The width of the paragraph indent for the area.
+
+
+
+
+
+\subsection{Content}
+
+
+\attr{visible}{true false step}{true}
+If this attribute is set to \val{true},
+then the area is visible on the slide even if it contains no material.
+With \val{false}, it is painted only on the slides where it is filled.
+In the latter case, using \val{step} means the area will follow the
+first step where the first \com\position command is issued. Empty material
+freely positioned may be useful to control the area, for instance:
+
+\example
+\step[on=start,off=stop]\position{mayarea}[0pt,0pt]{}
+\example/
+
+\noindent This will make the area appear with \verb"start", probably
+its first real content, and disappear with \verb"stop", which probably
+also controls the disappearance of the last material in the area.
+
+Two remarks: the first \com\position means the first occurrence of
+the command in the source, not necessarily the first to be shown on
+screen; thus, to work properly, the previous example should be put
+at the very beginning of a slide. Second, in this example, it is important
+that the material be freely positioned, i.e. with \verb"[0pt,0pt]",
+so as to make the subsequent \com\position think (?) the area is
+still empty.
+
+
+\attr{everyposition}{code}{nothing}
+Code to be added before \arg{material} each time
+%
+\note{%
+    All material is actually added in vertical mode
+    with the \emph{\string\position} command.}%
+%
+\com\position\barg{area}\barg{material} is called. This material
+is added in vertical mode.
+
+\attr{everyfreeposition}{code}{nothing}
+Same as before, except it is used when \com\position is called
+with the optional argument for free position.
+
+
+
+\subsection{Style}
+
+
+\attr{background}{{named color or shade or color expression}}{none}
+The color of the area's background. If none is given, the area is transparent.    \tosection{colors}{Colors, shades, and images}
+
+\attr{foreground}{{named color or color expression}}{black}
+The area's foreground color.
+
+\attr{image}{image}{none}
+An image inserted in the area's background, above the background color.
+The image is inserted at the area's upper left corner, and has the width
+and height it was declared with. Since this
+parameter is inherited, to cancel it give as \arg{image} any name that is
+not a declared image; no error message will ensue.
+
+\attr{font}{{font command}}{nothing}
+The font used to typeset material in the area.
+This is actually just a placeholder for font commands, e.g.
+\com\it or \com\bfseries.
+
+\attr{frame}{{attribute-value pairs}}{none}
+This sets the area's frame, if you want any. The value itself is a setting
+of attributes, each one being accessible in the main declaration as
+\tcode{frame_\arg{attribute}}. I.e.
+
+\example
+  frame = "width = 1pt, color = blue"
+\example/
+
+\noindent and
+
+\example
+  frame_width = 1pt
+  frame_color = blue
+\example/
+
+\noindent are equivalent.
+
+\attr{frame_width}{dimension}{0pt}
+The frame's width. If positive, the frame is painted around the area.
+If negative, it is painted inside the area, with the the \arg{dimension}'s
+absolute value as its width. An area with no frame simply has a \attrib{frame_width}
+of 0pt.
+
+\attr{frame_color}{{named color or shade or color expression}}{area's \attrib{background}}
+The frame's color.                                                                         \tosection{colors}{Colors, shades, and images}
+
+\attr{frame_corner}{miter round bevel}{miter}
+This is a \val{miter} corner:\kern4pt
+\pdfliteral {q 4 w 0 0 m 0 4 l 8 4 l S Q}\kern9pt,
+this is a \val{round} one:\kern4pt
+\pdfliteral {q 4 w 1 j 0 0 m 0 4 l 8 4 l S Q}\kern9pt,
+and this is a \val{bevel} one:\kern4pt
+\pdfliteral {q 4 w 2 j 0 0 m 0 4 l 8 4 l S Q}\kern9pt.
+
+\attr{frame_dash}{numbers}{none}
+The frame's dash pattern, meaning the frame is on (visible)
+for \ital{n1} points, then off (invisible) for \ital{n2} points,
+then on for \ital{n3} points, etc., where the \ital{n}'s are
+the \val{numbers}. This is cyclic, so that it starts again when
+\val{numbers} are exhausted. For instance a value of \verb"3 5 2"
+makes the frame visible for 3pt, then invisible for 5pt, then
+visible for 2pt, then invisible for 3pt, then...
+
+
+
+
+
+\section{Navigation}
+
+\noindent \ltr is made for fullscreen mode and navigation is no exception.
+Thus, bookmarks (and anchors in the next subsection) work properly in
+this mode only; when not in fullscreen, using a link leads
+to the page where the target appears, but not to the step in which it
+is embedded. Turning \attrib{autofullscreen} to \val{true} in the \param{job}
+parameters makes the reader go into fullscreen when clicking a link
+and thus navigation hits its target.
+
+\subsection{Creating bookmarks}[bookmarks]
+\noindent A presentation can be structured thanks to bookmarks (also
+called outlines), and these are accessible in the reader's outlines panel,
+or in the presentation via a pop-up menu.
+To create a bookmark, one uses the following command.
+
+\defcom\createbookmark\oarg{options}\arg{level}\oarg{anchor}\arg{text}/
+This creates a bookmark with \arg{text} as the text displayed in
+the outline panel and the pop-up menu. Bookmark hierarchy is managed with
+\arg{level}, according to the following principle: bookmarks with
+larger \arg{level} are children to bookmarks with smaller one. Thus,
+\arg{level} must be a number, but it need not be an integer nor a positive number.
+For instance:
+%
+\note{%
+    This means you don't need to redefine all your sections
+    if you want to add intermediate ones; just give the latter any
+    value in the interval where you want them to occur in the hierarchy.}%
+%
+
+\example
+\createbookmark{0}{Part}
+\createbookmark{.5}{Section}
+\slide[Slide]
+...
+\createbookmark{1.5}{Step1}
+...
+\createbookmark{1.5}{Step2}
+...
+\endslide
+\example/
+
+\noindent will create bookmarks with the following hierarchy:
+
+\example
+> Part
+  > Section
+    > Slide
+      > Step1
+      > Step2
+\example/
+
+\noindent because by default slides are bookmarked and have bookmark
+level 1. If sections of widest scope are eventually needed in this
+example, one can create them using bookmarks with a negative \arg{level}.
+
+The \arg{options} are any combination of the following keywords,
+separated by commas: \val{bold}, \val{italic} and \val{bolditalic}, which specify
+how the bookmark is to be typeset in the outlines panel, and \val{open}
+and \val{closed}, which specify whether the bookmark displays its children
+by default or not. Finally, \val{nosubmenutext} applies to the pop-up
+menu displayed with \rcom\showbookmarks, as explained below. 
+
+Any other material in \arg{options} is supposed to
+be a triplet of numbers ranging between 0 and 1, to denote the bookmark's
+color in an RGB model. For instance:
+
+\example
+\createbookmark[italic,open,1 0 0]{0}{Bookmark}
+\example/
+
+\noindent creates a red bookmark in italic that displays its children when
+the document is opened in the reader.
+
+The \arg{anchor} is a reference so that one can go to the bookmarked place
+with \rcom\goto, and is equivalent to using \rcom\anchor (next subsection).
+
+Note that \arg{options} and \arg{level} are specified for a slide (if it         \tosection{pdfslides}{PDF and navigation for slides}
+is bookmarked) the \attrib{bookmarkstyle} and \attrib{bookmarklevel}
+attributes.
+
+\defcom\showbookmarks\oarg{optional style}\arg{text}/
+This creates an hbox containing \arg{text} (which can be anything,
+like real text, or a symbol, etc.); when clicked, a pop-up
+menu appears, which contains the bookmark hierarchy of the document. 
+The optional style is either \val{flash} or \val{push},
+which sets the little animation used when the link is clicked:
+it reverses its colors or seems to be pushed in the background. The keyword
+\val{none} can also be used to denote no animation.
+
+In the pop-up menu, the children of a bookmark are displayed as a sub-menu.
+Hence this bookmark isn't clickable anymore, because its only function
+is to show the submenu. That's why the first item of
+this sub-menu is clickable and refers to that parent bookmark. The text
+used by this item is the value of the \attrib{menutext} attribute in the
+\param{job} parameter, unless the bookmark has the \val{nosubmenutext} option.
+
+
+
+
+
+\subsection{Navigation commands}
+
+\defcom\anchor\arg{name}/
+This creates an anchor called \arg{name}, which is a destination for
+the \rcom\goto command.
+
+In what follows, all commands create a clickable hbox containing \arg{text},
+with animation specified by \arg{optional style}, as in \com\showbookmarks
+above. That's why I will only describe the action performed by the commands.
+
+\defcom\goto\oarg{optional style}\arg{name}\arg{text}/
+Go to the destination anchored by \arg{name} (which can be the
+value of the \attrib{anchor} argument in a bookmark).
+
+\defcom\gotoA\oarg{optional style}\arg{name}\arg{text}/
+This creates the first item of a bidirectional link called \arg{name}.
+Clicking \arg{text} goes where \com\gotoB with \arg{name}
+has been issued.
+
+\defcom\gotoB\oarg{optional style}\arg{name}\arg{text}/
+This creates the second item of a bidirectional link called \arg{name}.
+Clicking \arg{text} goes where \com\gotoA with \arg{name}
+has been issued. There's no need for \com\gotoA to appear before
+\com\gotoB. Using these macros is just simpler than a pair of
+\com\anchor's with a pair of \com\goto's.
+
+\defcom\firstslide\oarg{optional style}\arg{text}/
+Go to the presentation's first slide.
+
+\defcom\lastslide\oarg{optional style}\arg{text}/
+Go to the presentation's last slide.
+
+\defcom\prevslide\oarg{optional style}\arg{text}/
+Go to the presentation's previous slide.
+
+\defcom\nextslide\oarg{optional style}\arg{text}/
+Go to the presentation's next slide.
+
+\defcom\prevstep\oarg{optional style}\arg{text}/
+Go backward once. Equivalent to a right click.
+
+\defcom\nextstep\oarg{optional style}\arg{text}/
+Go forward once. Equivalent to a left click.
+
+\defcom\showorhide\oarg{optional style}\arg{actions}\arg{text}/
+This shows or hides the steps referred to in \arg{actions}, which
+is made of `\tcode{\arg{action}=\arg{step list}}' pairs separated
+by commas, where \arg{action} is \val{on}, \val{off} or \val{toggle},
+and \arg{step list} is a list of step names separated by space.
+The action is to show, hide, or reverse the visibility of a set of
+steps. For instance:
+
+\example
+\showorhide{on=A B,off=C,toggle=D E F}{Button}
+\example/
+
+\noindent will, when clicked, make the steps named \verb"A" and \verb"B" visible,
+hide step \verb"C", and reverse the visibility of \verb"D", \verb"E" and \verb"F".
+
+
+
+
+
+
+\section{Colors, shades, and images}[colors]
+\noindent Some attributes above take values denoted by the phrases
+\ital{named color or shade or color expression}, or \ital{named color or color expression}.
+Those are explained in this section.
+
+\subsection{Colors}[realcolors]
+\noindent A color can either be a \ital{named color} or a \ital{color expression}.
+The latter is the simpler. It is a \arg{color model} followed by as many \arg{numbers} as
+required, ranging from 0 to 1. A color model is one of the keywords
+\val{grey} (or \val{gray}), which takes one \arg{number} (0 is black, 1 is
+white), \val{rgb}, which takes three \arg{numbers} (red, green and blue), and
+is additive, and \val{cmyk}, which takes four numbers (cyan, magenta, yellow, black),
+and is substractive. Hence:
+
+\example
+\setparameter slide:
+  background = "rgb 1 0 0"
+  foreground = "cmyk 1 0 1 0"
+  ...
+\par
+\example/
+
+\noindent sets the slide's background color to red, and its foreground color to
+green. Which is not recommended.
+
+Color expressions aren't very handy, since you have to type them as many times
+as you need them. Which is why there exists the following command to declare
+a \ital{named color}:
+
+\defcom\newcolor\arg{name}\arg{color model}\oarg{opacity}\arg{values}/
+After this declaration you can use \arg{name} to denote a color,
+%
+\note{%
+    Unlike \emph{\string\newslide} or \emph{\string\newarea},
+    \emph{\string\newcolor} and \emph{\string\newshade} below take
+    only one \emph{<name>} (instead of a list).}%
+%
+which itself is somehow as a color expression, i.e. it has
+a \arg{color model} and as many \arg{values} as required. The optional
+\arg{opacity} is a number between 0 and 1, 0 meaning fully transparent
+and 1 fully opaque. If not present, it is set to 1. The following named colors
+are already defined (with full opacity):
+\val{black}, \val{white}, \val{red}, \val{green}, \val{blue},
+\val{cyan}, \val{magenta}, \val{yellow}. I suppose you can see where they
+come from. So our example above could be more easily rewritten as:
+
+\example
+\setparameter slide:
+  background = red
+  foreground = green
+  ...
+\par
+\example/
+
+Finally, colors can be used simply with:
+
+\defcom\usecolor\arg{Named color or color expression}\arg{text}/
+This typesets \arg{text} with the specified color,
+%
+\note{%
+    Beware, the operation of the \emph{\string\usecolor} command
+    isn't executed inside a group, as may be the case with colors
+    in other packages.}%
+%
+overriding whatever is used as the current color wherever
+this command is issued (i.e. step, slide, area).
+
+
+
+
+
+\subsection{Shades}
+\noindent A \ital{shade} is a transition from one color to another. It can
+be used for backgrounds and frames only.
+It takes many parameters, so it is declared with the \yax syntax.
+
+\defcom\newshade\barg{name}/
+The \arg{name} is what is used to refer to this shade where it
+can be used.
+
+\attr{model}{grey gray rgb cmyk}{grey}
+The shade's model for its colors. You can't create a shade with colors
+from different models.
+
+\attr{from}{values}{black}
+The shade's starting color. There must be as many numbers as
+required by the \attrib{model} parameter. If nothing is specified,
+black is supplied.
+
+\attr{to}{values}{white}
+The shade's ending color. There must be as many numbers as
+required by the \attrib{model} parameter. If nothing is specified,
+white is supplied. Neither \attrib{from} nor \attrib{to} can take
+named colors as arguments.
+
+\attr{angle}{angle}{90}
+The shade varies along an axis.
+%
+\note{%
+    Shades' attributes may be more easily understood with
+    the interactive examples in the \emph{Visual Doc}.}%
+%
+This axis starts in the upper left
+corner of the area to be painted and makes an angle of \arg{angle}
+degrees with the area's upper border. The \arg{angle} must range
+between 0 and 90: 0 means that the shade progresses horizontally
+and 90 that it moves verticaly. If \arg{angle} is between 0 and
+-90, its absolute value is taken as its value but the shade starts
+from the upper \ital{right} corner.
+
+The value of \arg{angle} actually refers to a shade painted in a
+square; if the area to be painted isn't a square, this imaginary
+square is scaled and the angle of the shade will follow the scaling.
+For instance, an angle of 45 makes the shade progress from the top left
+corner to the bottom right corner; if the area to be painted is a
+rectangle, the shade will still progress between these two corners,
+and the angle will be skewed.
+
+\attr{speed}{number}{1}
+The speed of the shade's progression: 1 means the shade takes its
+axis' full length to progress; a value between 0 and 1 makes it take
+more than this length (and thus it won't be fully painted in the area)
+whereas a value larger than 1 makes it take less than this length
+(for instance with \verb"speed = 2" it'll take half the axis' length).
+
+\attr{width}{dimension}{none}
+A shade normally adapts to the area it paints. However, if \attrib{width}
+is given, the shade will take the specified dimension; if \attrib{width}
+is larger than the area to be painted, the shade won't be seen in its
+entirety; if it is smaller, part of the area will be painted with the
+shade's \attrib{to} color.
+
+\attr{height}{dimension}{none}
+Same as width in the vertical dimension.
+
+\attr{fixed}{true false}{false}
+By default, a shade is painted from the area's upper left corner (or
+right corner if \attrib{angle} is negative). If \attrib{fixed} is set
+to \val{true}, then it is painted from the slide's upper left (or right)
+corner, although only the area displays it. Note that a fixed shade
+whose width and height are unspecified doesn't make much sense.
+
+\vskip\baselineskip
+To sum up: picture two areas painted with the same shade. If the shade
+has no width nor height and isn't fixed, they will both display the
+entire shade, and if they don't have the same dimensions the shade will
+have different shapes in them. If the shade has a width and a height, both
+areas will display exactly the same shade, although what is revealed of it
+depends on the areas' dimensions. Finally, if the shade is fixed, the areas
+will look like open windows on the same underlying shade.
+
+
+\subsection{Images}[images]
+
+\defcom\newimage\arg{name}[\arg{width},\arg{height}]\arg{file}/
+This loads image file \arg{file},
+%
+\note{%
+    If only one dimension is used, the comma should nonetheless remain,
+    with nothing left or right, in order to indicate which dimension is
+    referred to. Specifying a \emph{<height>} only is done for instance
+    with:~\emph{[,5cm]}. Note that background images in slides and areas (as
+    values to the \emph{image} attribute) aren't scaled to their container's
+    dimensions.}%
+%
+setting its dimensions to \arg{width} and \arg{height}; if none are present,
+the image has its natural width; if only one dimension is given,
+the other ones is scaled accordingly. If both are given, deformations might ensue.
+The image can be used in the background of a slide or area by setting \arg{name}
+as the value for the \attrib{image} attribute, and anywhere else with
+the following command.
+
+\defcom\useimage\arg{name}/
+This returns an hbox containing the image \arg{name}. The height and
+width of the box are the height and width of the image as declared
+with the previous command.
+
+
+
+
+
+
+
+
+\section{Drawing symbols}
+\noindent \ltr provides very basic but still useful drawing facilities aimed at creating symbols
+to whatever end, e.g. a button for navigation or a bullet before each step.
+
+\defcom\newsymbol\arg{command}\oarg{settings}\arg{drawing}/
+This creates a symbol that is called with \arg{command} and designed with
+\arg{drawing}; the symbol is actually an hbox, and its reference point (i.e.
+the intersection of its left border with the baseline) is the origin of
+the coordinate system for \arg{drawing}; in turn, this hbox's width is the
+largest x-coordinate in \arg{drawing}, its height the largest y-coordinate,
+and its depth the smallest negative y-coordinate. Any part of \arg{drawing} on the
+left of the y-axis, i.e. with a negative x-coordinate, is ignored in the box's width
+and will overlap material on the box's left.
+
+In \arg{drawing} goes a set of simple statements separated by commas,
+a statement being an operator sometimes followed by arguments (separated by space), which either
+define paths or paint them. All coordinates are expressed in units, a unit being 1pt
+by default, which can be changed in \arg{settings}. At the beginning the current point is \Point00.
+Here are the operators (in the first two, `\verb"[+]"' means an optional
+\verb"+" character, without the brackets):
+
+\draw move [+] x y/
+If \verb"+" is not present, this moves to \point, which becomes the current point;
+if there is a \verb"+", and the current point is \Point{x'}{y'}, then it moves to
+\Point{x'+x}{y'+y}, which becomes the current point.
+If there was a path being drawn, it is ended and stroked beforehand.
+
+\draw line [+] x y/
+If \verb"+" is not present, this creates a line from the current point to \point, which becomes the current point;
+if there is a \verb"+", and the current point is \Point{x'}{y'}, then it creates a line
+between the current point and \Point{x'+x}{y'+y}, which becomes the current point.
+Note that the \attrib{line} operator is actually optional and any statement of the
+form `\verb"[+] x y"' is understood as `\verb"line [+] x y"'.
+
+\draw circle \arg{direction} \arg{radius}/
+Despite its name, this actually creates a quarter-circle from the current point
+to a point depending on \arg{direction} and \arg{radius}, with the latter being
+a number and the former one of the keywords \val{ul}, \val{ur}, \val{lu}, \val{ru},
+\val{dl}, \val{dr}, \val{ld} or \val{rd}, where each letter denotes \ital{left},
+\ital{right}, \ital{up} or \ital{down}, these in turn being the quarter-circle's
+tangents' directions at the starting (for the first letter) and ending (for the second letter)
+points. For instance, `\verb"circle ur 7, circle rd 7"' creates a quarter-circle of radius 7
+going up and then right, followed by a quarter-circle of the same radius going right and
+then down, which figure mathematicians tend to call a semi-circle, i.e.~%
+\pdfliteral {q .7 0 0 .7 0 0 cm 0 0 m 0 5.52 4.48 10 10 10 c 15.52 10 20 5.52 20 0 c S Q}\kern15pt.
+The current point after a (quarter-)\attrib{circle} is its ending point, i.e. \val{radius}
+units away left or right and below or above from the starting point.
+
+\draw close /
+This closes the path, i.e. appends a line from the current point to the path's
+starting point.
+
+\draw stroke /
+This strokes the current path. This operator is appended at the end of \arg{drawing}
+if there remains a path that hasn't been painted; thus it is useless as the
+very last command.
+
+\draw fill /
+This fills the current path, i.e. the path is closed and the area it delimits is colored.
+%
+\note{%
+    Differences between \emph{fill} and \emph{paint} are
+    visible when the line width, set with \emph{pen}, is large.}%
+%
+
+\draw paint /
+This is similar to fill, except the path is also stroked.
+
+\draw pen \arg{width}/
+This sets the width of the stroking pen to \val{width}.
+
+\draw color \arg{named color or color expression}/
+This changes the current color to the specified value. If several such                  \tosection{realcolors}{Colors}
+commands are issued, the painting operators above use the color most recently
+issued when they are called. If no color is specified, the symbol takes
+the foreground color of the place where it appears.
+
+\vskip\baselineskip
+The optional \arg{settings} to \com\newsymbol are comma-separated `\verb"attribute=value"'
+pairs; there can also be a single \arg{dimension} among them expressing the value of
+a unit in the coordinate system, which is 1pt by default.
+The attributes are \attrib{left}, \attrib{right}, \attrib{top}, \attrib{bottom} and
+\attrib{padding}, and the values are \arg{dimensions}. These attributes set the amount
+of padding on the left, right, top and bottom borders respectively, with \attrib{padding}
+setting them all at once. Padding is somteimes necessary because the drawing's box's (and clipping path's)
+dimensions are defined according to the abstract paths the drawing is made of, not according to the paths
+as they are painted, and a painted path has the width of the pen used to paint it.
+For instance, the simple drawing `\verb"line 0 10"' has no width, even though it might
+be painted with a 10-unit wide pen. If there's no padding, the symbol won't show anything.
+By default, padding is set to 1pt on all sides.
+
+As an example, here's how the alien has been drawn in the demonstration file
+called \tcode{LecturerDemo-KitschScienceFiction.pdf}:
+
+\example
+                % Default unit.
+\newsymbol\alien[1.7em]{%
+  pen .05,
+  color cmyk .2 1 .4 0,
+% The alien's body
+  1 0, circle ul .5, circle ld .5, fill,
+% The left tentacle
+  circle dl .2, circle lu .2,
+% The right tentacle
+  move 1 0, circle dr .2, circle ru .2,
+% The legs
+  move .16 0, + 0 -.3, % stroke is implicit in the next move
+  move .49 0, + 0 -.3,
+  move .82 0, + 0 -.3,stroke,
+% The eyes
+  color cmyk 0 0 1 0,
+  move .2 .25, + .2 0,
+  move + .2 0, + .2 0 % stroke is implicitly added at the end
+  }
+\example/
+
+\defcom\symbolwidth\arg{command}/
+\Defcom\symbolheight\arg{command}/
+\Defcom\symboldepth\arg{command}/
+When a symbol is defined, its dimensions can be queried with those macros,
+where \arg{command} is the symbol's command.
+
+
+
+
+\section{Transitions}[transitions]
+
+\noindent Transitions are basic animations played when a step (dis)appears on the
+slide or when one advances to the next slide. The \attrib{transition} attribute
+for slides and steps can take a \arg{named transition}
+as its value, and one declares a named transition with the following command:
+
+\defcom\newtransition\arg{name}/
+This command takes several attributes, which are:
+
+\attr{type}{split blinds box wipe dissolve glitter fly push cover uncover fade}{none}
+(These values can also have an uppercase first letter.) This is the type of the
+%
+\note[2\baselineskip]{%
+   The \emph{Visual Doc} has a slide illustrating those transitions.}%
+%
+animation being played. The predefined transitions already available in \ltr
+are those animations with the following parameters set to their default values.
+
+\attr{motion}{inward outward}{inward}
+(Only for transitions of type \val{split}, \val{box}, and \val{fly}.)
+The direction of motion, either from or to the center of the page.
+
+\attr{direction}{lr bt rl tb dx}{lr}
+(Only for moving transitions.)
+The direction of movement: left to right, bottom to top, right to left,
+top to bottom, and diagonal (top-left to bottom-right).
+
+\attr{dimension}{horizontal vertical}{horizontal}
+(Only for \val{split} and \val{blinds}.)
+Whether the splitting is horizontal or vertical.
+
+\attr{scale}{number}{1}
+(Only for \val{fly}.)
+The scale at which elements affected by the transition are drawn
+at the beginning of the transition (if its motion is \val{inward}) or at the
+end (if it is \val{outward}).
+
+\attr{duration}{number}{1}
+The length of the transition, in seconds.
+
+
+
+
+
+
+
+\section{Inserting PDF code}
+\noindent\ltr relies heavily on PDF code and unfortunately pdf\TeX's management of
+some PDF objects is far from optimal. Consequently, if you want to insert
+some PDF constructs things might go wrong. Hence the following macros,
+where arguments are always expanded immediately.
+
+\defcom\addtopageobject\arg{code}/
+This adds \arg{code} to the Page object for the current page.
+
+\defcom\addtoeachpageobject\arg{code}/
+This adds \arg{code} to the Page object for all pages. This command
+and the previous one fill the \com\pdfpageattr token list, which
+after each shipout is emptied of material added with \com\addtopageobject.
+
+\defcom\addtopageresources\arg{code}/
+This adds \arg{code} to the Resources dictionary for all pages.
+This uses the \com\pdfpageresources token list. For the Properties,
+Shading and ExtGState resources, the following command should be used.
+
+\defcom\addproperties\arg{name}\arg{object number}/
+Maps \arg{name} to \arg{object number} in the Properties dictionary
+of the current page's Resources. For instance,
+
+\example
+\addproperties{foo}{3}
+\example/
+
+\noindent produces the following in the page's Resources:
+
+\example
+...
+/Properties << ... /foo 3 0 R ... >>
+...
+\example/
+
+\defcom\addshading\arg{name}\arg{object number}/
+Same as \com\addproperties, but for the Shading dictionary. And
+this is added to all pages' Resources, not just the current one.
+
+\defcom\addgstate\arg{name}\arg{object number}/
+Same as \com\addshading, but for the ExtGState dictionary.
+
+\defcom\addOCG\arg{object number}/
+Adds the Optional Content Group \arg{object number} to the document's
+catalog, with base state {\sc off}. It is also turned off when one arrives
+on the page where it's been added.
+
+\defcom\addvisibleOCG\arg{object number}/
+Same as \com\addOCG, except base state is {\sc on}.
+
+
+
+
+\clearpage
+
+\section{Demonstrations}[demonstrations]
+
+
+\demo VisualDoc 4
+The present documentation might appear as a dull list of
+attributes. That's why it is distributed with a Visual
+Documentation (\demofile),
+which isn't really a demonstration, in the sense that it is
+not supposed to be an imaginary presentation but a visual display of many
+features of \ltr. Thus commands and attributes can make sense
+at once. One should nevertheless keep in mind that this visual documentation
+doesn't show everything in \ltr, and that the reference documentation
+remains the present one.
+The source isn't terribly user-friendly (and requires Lua\TeX\ and
+non-free fonts to compile), but still interesting constructions
+are used and can be copied, in particular with \com\showorhide.
+\let\par\endgraf
+
+\vskip\baselineskip
+The visual documentation explains how to use \ltr; the following
+demonstrations show what it can do. Barring \verb"LecturerDemo-SquaresOfAs", they have
+been typeset with the default Computer Modern fonts, so the sources
+can be modified and compiled again to see how things work. To do
+so, one should use the plain \TeX\ format with either pdf\TeX\ or Lua\TeX.
+
+\demo Mondrian 3
+\demofile is a simple presentation based on the work of one famous Dutch
+painter. It illustrates what you can do with areas, setting the
+main text in one square (although the text is not \com\position'ed
+but typed in as the slide's content, see below),
+the maths (synced with the main text) in another one,
+and footnotes, which are turned on and off with the \com\showorhide
+command, in a third square. The other squares are just decorations.
+The alignment of the squares is made easy
+by grouped attribute declarations with the \com\setarea command. For instance,
+the three squares on the left are declared as:
+
+\example
+\setarea{area1 area2 matharea}
+  width = 3cm
+\example/
+
+\noindent and the first two, which have the same height and color, are
+specified further again with:
+
+\example
+\setarea{area1 area2}
+  height     = 4.3cm
+  background = white
+\example/
+
+\noindent after which \verb"area1" doesn't need anything; another
+declaration sets \verb"area2"'s \attrib{vshift}, and still another one
+is used for \verb"matharea" to display its content. 
+
+The slide's background
+is painted black so lines appear between the areas (which is also why
+the \val{white} color must be specified as some areas' \attrib{background},
+otherwise they'd be transparent). The main text is set in the slide's
+textblock (i.e. not \com\position'ed), and a red area is painted below,
+which gives the impression that the text is set in an area, whereas it
+is simlpy asymmetrically shifted.
+
+\demo SquaresOfAs 3
+\demofile was inspired by some Con\-\TeX t presentations, and uses only areas
+to typeset its material. Barring the last slide, there's nothing in the main
+textblock. On the first slide, the \attrib{visible} attribute of the
+areas is set to \val{step}, so areas appear with their content.
+The background of the reader is turned to white, so the slides
+seem to fill the entire screen. The entire presentation is built
+on a single length (\com\squarewidth) in which all dimensions are
+expressed, including font sizes (such cumbersome font sizes
+as \verb"1.83\squarewidth" are meant to make all letters appear
+at the same height). Thus the presentation is totally scalable.
+Like in the Mondrian presentation, attributes are declared
+mostly for all areas at once, so the design can be easily modified.
+The frames of the areas have negative width, so they are painted
+inside the areas and they don't have to be taken into account
+when computing positions. Actually, their contribution to the
+design resides in their rounded corner only, since they have the
+same \attrib{background} color as the areas.
+
+The presentation itself is a wandering
+among several guises of the letter \ital{a}, with several non-free
+TrueType fonts (requiring Lua\TeX), and thus you should change those to
+fonts you own and can manage if you want to compile the source.
+(If you think it is inhuman to make the part of the letters below
+the baseline disappear in the white background, just change the latter.
+Jovica Veljovi\char"0107's \ital{Esprit} will regain its spirit indeed.)
+
+
+\demo SimplePresentation 4
+\demofile uses a very simple display, built on a millimetric grid, which
+can be displayed by uncommenting the first lines of the file.
+Some subtleties are included in the presentation's flow; for instance,
+the triangles at the left of each vertical step are already painted on the
+slide before the steps appear. This is done by creating two steps, one
+for the triangle with \attrib{visible} set to \val{true},and one
+for the step's content, a process which is automated by a simple
+code:
+
+\example
+\def\Step{%
+  \step[visible=true]\quitvmode\llap{\stepsym\kern.2cm}%
+  \step}
+\example/
+
+\noindent where \com\stepsym is the symbol's command. Note the
+necessary \com\quitvmode: those steps are called in vertical
+mode and plain \TeX's \com\llap macro creates a box which
+should be inserted in horizontal mode to get things right. The
+\attrib{everyvstep} attribute could also have been used, but care
+should be taken to ensure that no loop occurs, by creating to
+kinds of step,  the \attrib{everyvstep} of one executing the other.
+
+The horizontal 
+and vertical lines are actually areas with no width but a frame indeed,
+created with:
+
+\example
+\string\setarea{vline hline}
+  frame  = "width = .15pt, color = black"
+
+\setarea{vline}
+  hshift = 3cm
+  width  = 0pt
+
+\setarea{hline}
+  vshift = 2cm
+  height = 0pt
+\example/
+
+When clicked, the circle (a symbol) with the slide number in the
+bottom right corner displays the bookmarks in a pop-up menu. And
+the maths in the blackboark are of course inserted with free
+\com\position's. The next presentation is an elaboration on
+this one.
+
+
+\demo BeamerCambridgeUS 2
+\demofile is an imitation (not terribly faithful) of the Beamer package's
+\tcode{CambridgeUS} theme. It uses \attrib{everyslide} to typeset
+recurrent material, like the date or the slide's title. It also
+mimicks Beamer's display of inactive steps in transparent color.
+This is no feature in \ltr, though, and must be done by hand with
+overlapping elements; which means it's basically undoable for the
+main text. The presentation is also heavy on symbols designed
+with \com\newsymbol used as buttons, and uses bookmarks and anchors for navigation,
+including between the main text and appendices, thanks to
+\com\gotoA and \com\gotoB. The last slide displays
+scaled content, and finally, if the \attrib{mode} attribute is turned
+to \val{handout}, a handout is produced.
+(Which is true of all presentations, except in this case
+care has been taken so that the handout isn't just a presentation
+on a sheet of paper, although the differences are rather slight
+with the original presentation.)
+
+\demo ThePoodleLectures 4
+\demofile (don't ask) is made of five slides each displaying
+a different presentation style, sometimes verging on the PowerPoint-ish.
+The point of this demonstration is that the code for each slide
+remains minimal: you don't need to write hundreds of lines of
+attribute specifications to set up a presentation. Areas are used
+for decoration and the slide's title, and no complex positioning
+is involved. The same steps are reused (with silly text, don't ask
+either) and illustrate the use of the \attrib{left} attribute for
+steps as an easy way to create list items. Most of the effort, though,
+is spent on symbol design, from simple square to music note to
+sea shell. (Note that this demonstration contains such declarations
+as `\verb"hshift hshift* = 2cm"' when \attrib{hshift*} is supposed
+to automatically set \attrib{hshift} if the latter isn't specified;
+but since the same areas are reused for all slides, \attrib{hshift}
+\emph{is} specified after the first slide.)
+
+
+\demo KitschScienceFiction 1
+\demofile is a pathetic attempt at creating a video game with \TeX.
+Obviously there are better ways to do that. Nevertheless, the
+presentation illustrates many \ltr's features, including the use
+of \com\showorhide, free positions, transparent colors, shades,
+and a background image.
+The drawing of symbols is also used to an extent it wasn't designed
+for in the first place. The reader can pay a visit to the layers
+panel (which is displayed by default when not in full screen) to
+see how elements are organized on the screen. Once again an area
+(the green square) is painted below the slide's textblock,
+with similar colors, to give
+the impression of a screen, even though as far as \ltr is concerned
+the textblock and the area are totally unrelated, i.e. the text isn't
+the content of the area. The darker line that appears at the area's
+perimeter is produced by the area and its frame overlapping, an unwanted
+side effect with transparent colors, unavoidable but not so bad-looking
+here.
+
+\pagenumfalse
+
+
+
+
+
+\processbookmarks
+
+
+
+
+\bye
\ No newline at end of file
-- 
cgit v1.2.3

