% prelim.tex copyright 1992 Victor Eijkhout
%                  copyright 2014--2016 Vafa Khalighi
%
%
%    This program is free software: you can redistribute it and/or modify
%    it under the terms of the GNU General Public License as published by
%    the Free Software Foundation, either version 3 of the License, or
%    (at your option) any later version.
%
%    This program is distributed in the hope that it will be useful,
%    but WITHOUT ANY WARRANTY; without even the implied warranty of
%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%    GNU General Public License for more details.
%
%    You should have received a copy of the GNU General Public License
%    along with this program.  If not, see <http://www.gnu.org/licenses/>.
%
%
\Chapter[chap:prelim] Preliminaries

\Section What is Lollipop?

Lollipop is `\TeX\ made easy'. Lollipop is a macro package
that functions as a toolbox for writing \TeX\ macros. It was my
intention to make macro writing so easy that implementing a fully new
layout in \TeX\ would become a matter of less than an hour for an
average document, and that it would be a task that could be
accomplished by someone with only a very basic training in \TeX\
programming.

Lollipop is an attempt to make structured text formatting available
for environments where previously only wysiwyg packages could be used
because adapting the layout is so much more easy with them than with
traditional \TeX\ macro packages.

\Section But is it compatible?

Lollipop, like \LaTeX, is not compatible with plain \TeX. I~don't
consider this a real problem. Most plain \TeX\ commands will work in
\Lollipop\ with the exception of anything output routine related.
(See also below.)

\Lollipop\ is also not compatible with \LaTeX, although it has a lot
of the same functionality. There are two reasons why \Lollipop\ still
has a reason for existing, even though \LaTeX\ is used pretty much
all over the scientific world.

For one, Lollipop is targeted in part
to different users than the typical plain \TeX\ or
\LaTeX\ user. For another, I~have a vain hope that I~can capture some
of the \LaTeX\ market share. Since developing styles in \Lollipop\ is
so much more easier than in \LaTeX, I~may stand a fighting chance.

\SubSection \Lollipop\ and plain \TeX

Having said the above, I'll conceded that \Lollipop\ is more
compatible with plain \TeX\ than with \LaTeX. You can use quite some
plain \TeX\ commands in \Lollipop. However, stay away from the
following:\Description\item \cs{everypar}
This one is heavily used by \Lollipop. You may use \cs{EveryParagraph}
instead, which functions pretty much like \cs{everypar}; see
section~\ref[sec:everypar].\item \cs{everymath}
This one is heavily used by \Lollipop. You may use \cs{EveryMath}
instead, which functions pretty much like \cs{everymath}; see
section~\ref[sec:everymath].\item \cs{everydisplay}
This one is heavily used by \Lollipop. You may use \cs{EveryDisplay}
instead, which functions pretty much like \cs{everydisplay}; see
section~\ref[sec:everydisplay].\item \cs{output}
Page output is done so very differently from plain \TeX\ that all
commands pertaining to page numbers and head/footlines have been
eradicated. (Well, \cs{pageno} still gives the page number.) See
chapter~\ref[chap:output].
 \>

The current version of \Lollipop\ is based on the plain \TeX\ file
that comes with \TeX\ version~3.141592653.

\SubSection \Lollipop\ and \TeX\ programming

The tools in \Lollipop\ allow you to program in a simple manner quite
complicated macros. Still you may want to have some knowledge of
ordinary \TeX\ macro programming. If you are just starting in \TeX\
you can pick up the basics from the book by Seroul and
Levy~\bibref[SeLe:book], 
and after that there is the book by
the original author of \TeX~\bibref[Kn:book] and my own \TeX\
reference guide~\bibref[E:book].

 \Section How to Use \Lollipop

The following files comprise the Lollipop format:
\Ver>
    lollipop-define.tex            lollipop-document.tex        
    lollipop-float.tex             lollipop-fontdefs.tex
    lollipop-fonts.tex             lollipop-heading.tex
    lollipop-lists.tex             lollipop-output.tex
    lollipop-plain.tex             lollipop-text.tex
    lollipop-tools.tex             lollipop.tex<Rev


To process a file, say \file{test.tex}, with
Lollipop you then type:

\Ver>
> lollipop test.tex <Rev

to get the dvi output.


\Section[sec:style-dump] Processing a Lollipop file

Files that you make to be processed with Lollipop contain of course
the input text, but they also have to contain the design macros that
determine the layout. There are two possibilities for these design
macros:

\Itemize
\item You can simply put them in the same file, either in the
beginning or wherever they are first needed, or
\item You can put the layout definition in a separate file and call this
definition file in your main file. For instance, you can put the layout definition of a
book in a file \file{bookstyle.tex}, and then call this definition file  in your
main Lollipop file by putting 

\Ver>
\InputLollipop:bookstyle.tex <Rev

somewhere in your main Lollipop file.



If you have used \TeX\ before, you will notice that the page numbers
get reported slightly differently from the usual way. See
section~\ref[sec:page-counter] for the explanation.

\Section The errors of \Lollipop / known bugs

Since \Lollipop\ is an order of magnitude more powerful
(and hence complicated) than formats such as \LaTeX, its error
messages can also be an order of magnitude more cryptic (see
section~\ref[sec:error-msg] for the possible origin of some of the
more obscure error messages). 

Fortunately, \Lollipop\ is also quite a
bit better than existing formats at catching potential errors. Typos
in a style definition will usually lead to warning messages, and also
during run time \Lollipop\ is able to track down ommisions.

In addition, you can switch on various trace modes to get more
detailed information about \Lollipop's thought processes. See
chapter~\ref[chap:tracing].

These are the known bugs in \Lollipop\ at the moment.

\Enumerate\item Local references have been insufficiently tested,
and the code definitely is buggy.
\item The `firstpage' test in the page grids does not work.
\item The table of contents example is slightly wrong.
\item Titles get written to the aux file with double spaces.
This shouldn't cause any problem, but it has to be fixed.
\item Rules in page grids get white space around them.
\item External items shouldn't declare \cs{FooTitle} or 
\cs{FooCounter}.
\item \cs{ToExternalFile} doesn't work.
\> 

 
If you find any other issues, or if you have any fixes/workarounds
for any existing issues, then please post them on GitHub.

\Section About this manual

This manual consists of a main file \file{lollipop-manual.tex}, and the
following input files:
\Ver>
titlepag.tex prelim.tex struct.tex head.tex list.tex
out.tex extern.tex opt.tex comm.tex trace.tex appendix.tex<Rev
and the style definition file \file{mandefs.tex}.

In addition, you need \file{comment.tex} which is used to format this
manual, and \file{btxmac.tex} for the Bib\TeX\ interface, but these
are not really a part of \Lollipop.

If you format this manual (which you'll have to do three times
to get the page numbering and the table of contents straight) you'll
notice something strange. The file \file{example.tex} is read in
many, many times. This is because this manual formats its examples
along the way, first writing them out, and then reading them in to
show both their code and their output. This way it is guaranteed that
the examples in the manual will always work.

As a result of formatting this manual you will wind up with, apart
from the usual \file{pdf} and \file{log} file, with \file{lollipop-manual} files
with extensions \file{aux}, \file{toc}, and \file{imp}; 
\file{oix} and \file{cix} for indexes of options and commands,
and
\file{tct}, file{tix} which are for the examples. For the
bibliography there are the Bib\TeX\ input file \file{lollipop-manual.bib} and
output file \file{lollipop-manual.bbl}.

This manual needs quite some resources: here's what \TeX\ told me
it needed.
\Ver>Here is how much of TeX's memory you used:
 1194 strings out of 496579
 16173 string characters out of 6202690
 72655 words of memory out of 5000000
 3270 multiletter control sequences out of 15000+600000
 11241 words of font info for 40 fonts, out of 8000000 for 9000
 19 hyphenation exceptions out of 8191
 24i,4n,24p,187b,562s stack positions out of 5000i,500n,10000p,200000b,80000s<Rev


Because of all the examples this manual takes quite some time to
process. A~factor of four over the time for a regular document of
similar length should be expected. Ordinary Lollipop documents will
proceed far faster.

\Section The most boring section in this manual

There are a few things about \Lollipop\ that I~want to be clear about.

\SubSection I am going to hurt you and I am not sorry

In the secret handbook for the software industry it says that the
final test phase of a product consists of putting it in stores and
having innocent suckers pay good money for it. (You guessed it, this
is the disclaimer section.) So let me just say that 
\Lollipop\ is probably good for nothing, at least, I~don't claim it
is. And if you hurt yourself by using it, don't blame me. I~warned
you.

\SubSection Get a \Lollipop, give one away

\Lollipop\ is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

The easiest way to get the current copy of \Lollipop\ is to use
a more recent \TeX{} distribution (\TeX Live or Mik\TeX).

\SubSection The status of \Lollipop

\Lollipop\ is still under development. Although I~will try not to
make any drastic changes in the user interface (this says nothing
about the internals!) I~really cannot guarantee anything.
However, I~do listen to complaints and suggestions. 

If you have suggestions or complaints about the
useability of \Lollipop\ or the implementation, feel free to contact
me at \n{persian-tex@tug.org} on the Internet. 

\SubSection[sec:wish:list] The wish list

\Lollipop\ is not quite perfect. Here's a list of things that I~am
going to be adding in the near future. If you want to add items to
this list, just open a ticket on the tickets.

\Enumerate\item Raggedbottom should really, really be added. Soon!

\item Capitalization and initial capping of titles. If a
title appears in mixed case, it should be possible to have it in all
uppercase in running heads. Some code has been disabled now.

\item A better multi-column mode.

\item Interface to Bib\TeX\ seems to largely in place; what happens
if you don't load btxmac?

\item Inserts, in particular footnotes. At the moment floating
figures are entirely lacking. (As a matter of fact, the plain \TeX\
macros are availble, but I'm not telling that.)

\item A `nomarks' option to prevent wasting two token lists.
Maybe other recourse saving optio for the expert designer?

\item More sophisticated white space right before and after
page breaks. (Use at least so and so much.)

\item Dynamic topskip.

\item Sup­port for RTL lan­guages (such as Per­sian).


{\PopIndentLevel\Indent:no The following points are debatable:
maybe I~should just steal a few components from \LaTeX. Maybe this
sort of stuff does not belong in \Lollipop.\par}

\item A tabular mode. Personally I~always felt \cs{halign} to be more
than sufficient, but some people seem to think otherwise.

\item Maths constructs. Some things in the \cs{eqalign} vein would be
nice.

\>

\SubSection A bit of history

The \Lollipop\ format was begun in late 1989 to typeset Victor Eijkhout's Ph.D.
thesis, `{\Style:italic Vectorizable and Parallelizable
Preconditioners for the Conjugate Gradient Method}'. At that time 
Victor~was using \TeX\ on an Atari 1040ST.
Loading the style definition for the thesis took about two minutes.
\Lollipop\ was heavily augmented in late 1991 to typeset his book
`{\Style:italic \TeX\ by Topic}', for which he~used Sun~3 and Sun~4
computers. Writing this manual brought \Lollipop\ to its version 0.96; the first public release (version~0.9) was announced on the
internet in October 1992. 

Between 1992 and 2014, Lollipop was unmaintained and Vafa Khalighi took over the
development of Lollipop in April 2014.

The name `\n{Lollipop}' refers to a quote by Alan
Perlis~\bibref[Pe:epigrams], quoted on page 365 of the \TeX
book~\bibref[Kn:book]. In a way it's rather pretentious. The philosophy
of the \n{Lollipop} format is described~\bibref[EL:Cork,E:Portland].

\endinput

% 2014/04/13 Added some notes about \EveryMath,
% and \EveryDisplay. Also \EveryPar changed to
% \EveryParagraph
% 2014/04/12 Added note about xelollipop format
% 2014/04/11 Updated the manual
% 92/10/22 historical remark about name added
% 92/11/03 section 'Lollipop and plain TeX' added;
%          remarks about IniTeX in Textures
% 92/11/26 uses bibrefs
