% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2002-06-04.06}
+\def\texinfoversion{2002-10-13.14}
%
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
-% 2000, 01, 02 Free Software Foundation, Inc.
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
%
% This texinfo.tex file is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
% (and all CTAN mirrors, see http://www.ctan.org),
% and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+%
% The texinfo.tex in any given Texinfo distribution could well be out
% of date, so if that's what you're using, please check.
%
-% Texinfo has a small home page at http://texinfo.org/ and also
-% http://www.gnu.org/software/texinfo.
-%
% Send bug reports to bug-texinfo@gnu.org. Please include including a
% complete document in each bug report with which we can reproduce the
% problem. Patches are, of course, greatly appreciated.
%
\def\gobble#1{}
+% True if #1 is the empty string, i.e., called like `\ifempty{}'.
+%
+\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}%
+\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}%
+
+% Hyphenation fixes.
\hyphenation{ap-pen-dix}
\hyphenation{mini-buf-fer mini-buf-fers}
\hyphenation{eshell}
\hyphenation{white-space}
% Margin to add to right of even pages, to left of odd pages.
-\newdimen \bindingoffset
-\newdimen \normaloffset
+\newdimen\bindingoffset
+\newdimen\normaloffset
\newdimen\pagewidth \newdimen\pageheight
% Sometimes it is convenient to have everything in the transcript file
\openin 1 \jobname.toc
\ifeof 1\else\begingroup
\closein 1
- \indexnofonts
- \def\tt{}
- \let\_ = \normalunderscore
% Thanh's hack / proper braces in bookmarks
\edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
%
\def\chapentry ##1##2##3{}
- \let\appendixentry = \chapentry
- \def\unnumbchapentry ##1##2{}
\def\secentry ##1##2##3##4{\advancenumber{chap##2}}
- \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
- \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
\def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
- \def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
+ \let\appendixentry = \chapentry
+ \let\unnumbchapentry = \chapentry
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
\input \jobname.toc
\def\chapentry ##1##2##3{%
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
- \let\appendixentry = \chapentry
- \def\unnumbchapentry ##1##2{%
- \pdfoutline goto name{\pdfmkpgn{##2}}{##1}}
\def\secentry ##1##2##3##4{%
\pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
- \def\unnumbsecentry ##1##2##3{%
- \pdfoutline goto name{\pdfmkpgn{##3}}{##1}}
\def\subsecentry ##1##2##3##4##5{%
\pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
- \def\unnumbsubsecentry ##1##2##3##4{%
- \pdfoutline goto name{\pdfmkpgn{##4}}{##1}}
\def\subsubsecentry ##1##2##3##4##5##6{%
\pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
- \def\unnumbsubsubsecentry ##1##2##3##4##5{%
- \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
+ \let\appendixentry = \chapentry
+ \let\unnumbchapentry = \chapentry
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
+ %
+ % Make special characters normal for writing to the pdf file.
+ %
+ \indexnofonts
+ \let\tt=\relax
+ \turnoffactive
\input \jobname.toc
\endgroup\fi
}}
\newcount\mainmagstep
\ifx\bigger\relax
% not really supported.
- \let\mainmagstep=\magstep1
+ \mainmagstep=\magstep1
\setfont\textrm\rmshape{12}{1000}
\setfont\texttt\ttshape{12}{1000}
\else
\font\titlei=cmmi12 scaled \magstep3
\font\titlesy=cmsy10 scaled \magstep4
\def\authorrm{\secrm}
+\def\authortt{\sectt}
% Chapter (and unnumbered) fonts (17.28pt).
\setfont\chaprm\rmbshape{12}{\magstep2}
\setfont\shortcontrm\rmshape{12}{1000}
\setfont\shortcontbf\bxshape{12}{1000}
\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
%% Add scribe-like font environments, plus @l for inline lisp (usually sans
%% serif) and @ii for TeX italic
\let\subtitlerm=\tenrm
\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
%
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+ \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}%
%
% Leave some space at the very top of the page.
\vglue\titlepagetopglue
\let\item = \relax
}
-% Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
-% @direntry, and @documentdescription.
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
%
-\def\ignore{\doignore{ignore}}
+\def\direntry{\doignore{direntry}}
+\def\documentdescriptionword{documentdescription}
+\def\documentdescription{\doignore{documentdescription}}
+\def\html{\doignore{html}}
\def\ifhtml{\doignore{ifhtml}}
\def\ifinfo{\doignore{ifinfo}}
-\def\ifplaintext{\doignore{ifplaintext}}
\def\ifnottex{\doignore{ifnottex}}
-\def\html{\doignore{html}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
\def\menu{\doignore{menu}}
-\def\direntry{\doignore{direntry}}
-\def\documentdescription{\doignore{documentdescription}}
-\def\documentdescriptionword{documentdescription}
+\def\xml{\doignore{xml}}
% @dircategory CATEGORY -- specify a category of the dir file
% which this file should belong to. Ignore this in TeX.
% We must actually expand the ignored text to look for the @end
% command, so that nested ignore constructs work. Thus, we put the
% text into a \vbox and then do nothing with the result. To minimize
- % the change of memory overflow, we follow the approach outlined on
+ % the chance of memory overflow, we follow the approach outlined on
% page 401 of the TeXbook: make the current font be a dummy font.
%
\setbox0 = \vbox\bgroup
% Do minimal line-breaking.
\pretolerance = 10000
%
- % Do not execute instructions in @tex
+ % Do not execute instructions in @tex.
\def\tex{\doignore{tex}}%
% Do not execute macro definitions.
% `c' is a comment character, so the word `macro' will get cut off.
\global\let\subsubsection = \numberedsubsubsec
}
+% we use \chapno to avoid indenting back
+\def\appendixbox#1{%
+ \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
+ \hbox to \wd0{#1\hss}}
+
\outer\def\appendix{\parsearg\appendixyyy}
\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
\def\appendixzzz #1{%
\secno=0 \subsecno=0 \subsubsecno=0
\global\advance \appendixno by 1
\message{\putwordAppendix\space \appendixletter}%
-\chapmacro {#1}{\putwordAppendix{} \appendixletter}%
+\chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}%
\gdef\thissection{#1}%
\gdef\thischaptername{#1}%
\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
\unnumbchapmacro {#1}%
\gdef\thischapter{#1}\gdef\thissection{#1}%
\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}{\the\chapno}}}%
\temp
\unnumbnoderef
\global\let\section = \unnumberedsec
\plainsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
- {\the\toks0}{\the\chapno}}}%
+ {\the\toks0}{\the\chapno}{\the\secno}}}%
\temp
\unnumbnoderef
\nobreak
\plainsubsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
- {\the\toks0}{\the\chapno}{\the\secno}}}%
+ {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
\temp
\unnumbnoderef
\nobreak
\plainsubsubsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
- {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
+ {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}%
\temp
\unnumbnoderef
\nobreak
\let\unnumbchapentry = \shortunnumberedentry
% We want a true roman here for the page numbers.
\secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
\rm
\hyphenpenalty = 10000
\advance\baselineskip by 1pt % Open it up a little.
\def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2##3{}
\def\subsecentry ##1##2##3##4##5{}
- \def\unnumbsubsecentry ##1##2##3##4{}
\def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2##3##4##5{}
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
\openin 1 \jobname.toc
\ifeof 1 \else
\closein 1
}
% Appendices, in the main contents.
-\def\appendixentry#1#2#3{\dochapentry{\putwordAppendix{} #2\labelspace#1}{#3}}
+\def\appendixentry#1#2#3{%
+ \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
%
% Appendices, in the short toc.
\let\shortappendixentry = \shortchapentry
}
% Unnumbered chapters.
-\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}}
-\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}}
+\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}}
+\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}}
% Sections.
\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
+\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}}
% Subsections.
\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}}
% And subsubsections.
\def\subsubsecentry#1#2#3#4#5#6{%
\dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
+\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}}
% This parameter controls the indentation of the various levels.
\newdimen\tocindent \tocindent = 3pc
}
% @copying ... @end copying.
-% Save the text away for @insertcopying later.
+% Save the text away for @insertcopying later. Many commands won't be
+% allowed in this context, but that's ok.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
%
-\newbox\copyingbox
-%
\def\copying{\begingroup
- \parindent = 0pt % looks wrong on title page
- \def\Ecopying{\egroup\endgroup}%
- \global\setbox\copyingbox = \vbox\bgroup
+ % Define a command to swallow text until we reach `@end copying'.
+ % \ is the escape char in this texinfo.tex file, so it is the
+ % delimiter for the command; @ will be the escape char when we read
+ % it, but that doesn't matter.
+ \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}%
+ %
+ % We must preserve ^^M's in the input file; see \insertcopying below.
+ \catcode`\^^M = \active
+ \docopying
}
-% @insertcopying.
-%
-\def\insertcopying{\unvcopy\copyingbox}
+% What we do to finish off the copying text.
+%
+\def\enddocopying{\endgroup\ignorespaces}
+% @insertcopying. Here we must play games with ^^M's. On the one hand,
+% we need them to delimit commands such as `@end quotation', so they
+% must be active. On the other hand, we certainly don't want every
+% end-of-line to be a \par, as would happen with the normal active
+% definition of ^^M. On the third hand, two ^^M's in a row should still
+% generate a \par.
+%
+% Our approach is to make ^^M insert a space and a penalty1 normally;
+% then it can also check if \lastpenalty=1. If it does, then manually
+% do \par.
+%
+% Seems pretty fragile, but for the limited use of getting the copying
+% text (which should be quite simple) inserted, we can hope it's ok.
+% %
+{\catcode`\^^M=\active %
+\gdef\insertcopying{\begingroup %
+ \parindent = 0pt % looks wrong on title page
+ \def^^M{%
+ \ifnum \lastpenalty=1 %
+ \par %
+ \else %
+ \space \penalty 1 %
+ \fi %
+ }%
+ \copyingtext %
+\endgroup}%
+}
\message{defuns,}
% @defun etc.
% Allow user to change definition object font (\df) internally
-\def\setdeffont #1 {\csname DEF#1\endcsname}
+\def\setdeffont#1 {\csname DEF#1\endcsname}
\newskip\defbodyindent \defbodyindent=.4in
\newskip\defargsindent \defargsindent=50pt
-\newskip\deftypemargin \deftypemargin=12pt
\newskip\deflastargmargin \deflastargmargin=18pt
\newcount\parencount
\global\let& = \ampnr
}
-% First, defname, which formats the header line itself.
-% #1 should be the function name.
-% #2 should be the type of definition, such as "Function".
-
-\def\defname #1#2{%
-% Get the values of \leftskip and \rightskip as they were
-% outside the @def...
-\dimen2=\leftskip
-\advance\dimen2 by -\defbodyindent
-\noindent
-\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
-\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
-\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
-\parshape 2 0in \dimen0 \defargsindent \dimen1
-% Now output arg 2 ("Function" or some such)
-% ending at \deftypemargin from the right margin,
-% but stuck inside a box of width 0 so it does not interfere with linebreaking
-{% Adjust \hsize to exclude the ambient margins,
-% so that \rightline will obey them.
-\advance \hsize by -\dimen2
-\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}%
-% Make all lines underfull and no complaints:
-\tolerance=10000 \hbadness=10000
-\advance\leftskip by -\defbodyindent
-\exdentamount=\defbodyindent
-{\df #1}\enskip % Generate function name
+% \defname, which formats the name of the @def (not the args).
+% #1 is the function name.
+% #2 is the type of definition, such as "Function".
+%
+\def\defname#1#2{%
+ % How we'll output the type name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \ifempty{#2}%
+ \def\defnametype{}%
+ \else
+ \def\defnametype{[\rm #2]}%
+ \fi
+ %
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \dimen2=\leftskip
+ \advance\dimen2 by -\defbodyindent
+ %
+ % Figure out values for the paragraph shape.
+ \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}%
+ \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+ \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations
+ \parshape 2 0in \dimen0 \defargsindent \dimen1
+ %
+ % Output arg 2 ("Function" or some such) but stuck inside a box of
+ % width 0 so it does not interfere with linebreaking.
+ \noindent
+ %
+ {% Adjust \hsize to exclude the ambient margins,
+ % so that \rightline will obey them.
+ \advance \hsize by -\dimen2
+ \dimen3 = 0pt % was -1.25pc
+ \rlap{\rightline{\defnametype\kern\dimen3}}%
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \advance\leftskip by -\defbodyindent
+ \exdentamount=\defbodyindent
+ {\df #1}\enskip % output function name
+ % \defunargs will be called next to output the arguments, if any.
}
% Common pieces to start any @def...
}
% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip. We also call
-% \setleading{\textleading}, so the caller should define \textleading.
-% The caller should also set \parskip.
+% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
+% physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
%
-\def\internalpagesizes#1#2#3#4#5#6{%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
\voffset = #3\relax
\topskip = #6\relax
\splittopskip = \topskip
\normaloffset = #4\relax
\bindingoffset = #5\relax
%
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ \fi
+ %
\setleading{\textleading}
%
\parindent = \defaultparindent
\textleading = 13.2pt
%
% If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+ \internalpagesizes{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
}}
% Use @smallbook to reset parameters for 7x9.5 (or so) format.
\parskip = 2pt plus 1pt
\textleading = 12pt
%
- \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+ \internalpagesizes{7.5in}{5in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
%
\lispnarrowing = 0.3in
\tolerance = 700
\hfuzz = 1pt
\contentsrightmargin = 0pt
- \deftypemargin = 0pt
\defbodyindent = .5cm
\smallenvironments
}}
% Use @afourpaper to print on European A4 paper.
\def\afourpaper{{\globaldefs = 1
\parskip = 3pt plus 2pt minus 1pt
- \textleading = 12pt
+ \textleading = 13.2pt
%
- \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{51\baselineskip}{160mm}
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
%
\tolerance = 700
\hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
}}
% Use @afivepaper to print on European A5 paper.
\parskip = 2pt plus 1pt minus 0.1pt
\textleading = 12.5pt
%
- \internalpagesizes{166mm}{120mm}{\voffset}{-8mm}{\bindingoffset}{8pt}%
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
%
\lispnarrowing = 0.2in
\tolerance = 800
\hfuzz = 1.2pt
- \contentsrightmargin = 0mm
- \deftypemargin = 0pt
+ \contentsrightmargin = 0pt
\defbodyindent = 2mm
\tableindent = 12mm
%
\smallenvironments
}}
-% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin
-% 29mm, hence bottom margin 28mm, nominal side margin 3cm.
+% A specific text layout, 24x15cm overall, intended for A4 paper.
\def\afourlatex{{\globaldefs = 1
- \textleading = 13.6pt
- %
\afourpaper
- \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
%
- % Must explicitly reset to 0 because we call \afourpaper, apparently,
- % although this does not entirely make sense.
+ % Must explicitly reset to 0 because we call \afourpaper.
\globaldefs = 0
}}
-% Use @afourwide to print on European A4 paper in wide format.
-\def\afourwide{%
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
\afourpaper
- \internalpagesizes{6.5in}{9.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}%
-}
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
% Perhaps we should allow setting the margins, \topskip, \parskip,
\parskip = 3pt plus 2pt minus 1pt
\setleading{\textleading}%
%
- \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+ \dimen0 = #1
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
}}
% Set default to letter.
@let+=@normalplus
@let$=@normaldollar}%$ font-lock fix
-@def@normalturnoffactive{@let"=@normaldoublequote
-@let\=@normalbackslash
-@let~=@normaltilde
-@let^=@normalcaret
-@let_=@normalunderscore
-@let|=@normalverticalbar
-@let<=@normalless
-@let>=@normalgreater
-@let+=@normalplus
-@let$=@normaldollar}%$ font-lock fix
+% Same as @turnoffactive except for \.
+@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
% Make _ and + \other characters, temporarily.
% This is canceled by @fixbackslash.
* Disconnected Operations:: \e$B%*%U%i%$%s=hM}\e(B
* Expire and Archive:: \e$B%a%C%;!<%8$N<+F0:o=|$H%"!<%+%$%V\e(B
* Scoring:: \e$B%a%C%;!<%8$N%9%3%"\e(B
+* Split messages:: \e$B%a%C%;!<%8$N?6$jJ,$1\e(B
* Address Book:: \e$B%"%I%l%9D"\e(B
* Customization:: \e$B%+%9%?%^%$%:\e(B
* Terminology:: \e$BMQ8l$N2r@b\e(B
\e$B?d>)$5$l$k\e(B APEL, FLIM, SEMI \e$B$N%P!<%8%g%s$NAH9g$;$O!"0J2<$NDL$j$G$9!#\e(B
@itemize @minus
-@item APEL 10.3, FLIM 1.14.3, SEMI 1.14.3
+@item APEL 10.4, FLIM 1.14.4, SEMI 1.14.4
@end itemize
\e$B$=$NB>!"\e(BFLIM, SEMI \e$B$K$O$$$m$$$m$JJQ7A%P!<%8%g%s$,B8:_$7$^$9$,!"\e(B
\e$BNc$($P!"0J2<$NAH9g$;$GF0:n$9$k$3$H$,3NG'$5$l$F$$$^$9!#\e(B
@itemize @minus
-@item APEL 10.2, Chao 1.14.1, REMI 1.14.2
-@item APEL 10.2, SLIM 1.14.3, EMY 1.13.9
+@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.4
+@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
@end itemize
APEL, FLIM \e$B$b$7$/$O\e(B SEMI \e$B$N%P!<%8%g%s%"%C%W$r9T$C$?>l9g$O!"\e(BWanderlust \e$B$r\e(B
\e$B$3$l$K4^$^$l$k#6$D$N%U%)%k%@$NI=<($r:G?7$N$b$N$K99?7$7$^$9!#\e(B
@subsubsection \e$B%U%)%k%@$NA*Br\e(B
-\e$B%U%)%k%@$N9T$K%+!<%=%k$rCV$$$F%j%?!<%s\e(B(\e$B%9%Z!<%9\e(B)\e$B%-!<$r2!$9$H$=$N%U%)%k%@$NFbMF$rI=<($9$k%5%^%j%b!<%I$K0\F0$7$^$9!#\e(B
+\e$B%U%)%k%@$N9T$K%+!<%=%k$rCV$$$F%j%?!<%s\e(B(\e$B%9%Z!<%9\e(B)\e$B%-!<$r2!$9$H$=$N%U%)%k%@\e(B
+\e$B$NFbMF$rI=<($9$k%5%^%j%b!<%I$K0\F0$7$^$9!#\e(B
-\e$B$3$N$H$-!"JQ?t\e(B @code{wl-stay-folder-window} \e$B$,\e(B non-nil \e$B$J$i%5%^%j$K0\F0$7$?$H$-$K%U%)%k%@%P%C%U%!$N1&$K%5%^%j$N%P%C%U%!$,8=$l$^$9!#\e(B
+\e$B$3$N$H$-!"JQ?t\e(B @code{wl-stay-folder-window} \e$B$,\e(B non-nil \e$B$J$i%5%^%j$K0\F0\e(B
+\e$B$7$?$H$-$K%U%)%k%@%P%C%U%!$N1&$K%5%^%j$N%P%C%U%!$,8=$l$^$9!#\e(B
@subsection \e$B%-!<%P%$%s%I\e(B
@end table
-@node Scoring, Address Book, Expire and Archive, Top
+@node Scoring, Split messages, Expire and Archive, Top
@chapter \e$B%9%3%"\e(B
@cindex Scoring
@c @cindex Kill File
@end example
-@node Address Book, Customization, Scoring, Top
+@node Split messages, Address Book, Scoring, Top
+@chapter \e$B%a%C%;!<%8$N?6$jJ,$1\e(B
+@cindex Split messages
+
+@code{elmo-split} \e$B$r;H$&$H!"%U%)%k%@\e(B @code{elmo-split-folder} \e$BFb$N\e(B
+\e$B%a%C%;!<%8$rFCDj$N5,B'$K=>$C$F\e(B procmail \e$BIw$K?6$jJ,$1$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$N5!G=$r;H$&$K$O!"$^$:\e(B @file{~/.emacs} \e$B$K0J2<$N$h$&$K@_Dj$7$F2<$5$$!#\e(B
+
+@lisp
+(autoload 'elmo-split "elmo-split" "Split messages on the folder." t)
+@end lisp
+
+@kbd{M-x elmo-split} \e$B$9$k$H\e(B @code{elmo-split-rule} \e$B$K=>$C$F?6$jJ,$1$r\e(B
+\e$B<B9T$7$^$9!#\e(B @kbd{C-u M-x elmo-split} \e$B$H$9$k$H<B:]$K$O?6$jJ,$1$r9T$o$:$K\e(B
+\e$B%j%O!<%5%k$r9T$J$$$^$9!#\e(B
+
+\e$B0J2<$G$O%k!<%k$N5-=R$N;EJ}$r@bL@$7$^$9!#$^$:$O<!$NNc$r8+$F2<$5$$!#\e(B
+
+@lisp
+@group
+(setq elmo-split-rule
+ ;; @r{SPAM \e$B$O\e(B @samp{+junk} \e$B$X\e(B}
+ '(((or (address-equal from "i.am@@spammer")
+ (address-equal from "dull-work@@dull-boy")
+ (address-equal from "death-march@@software")
+ (address-equal from "ares@@aon.at")
+ (address-equal from "get-money@@richman"))
+ "+junk")
+ ;; @r{mule \e$B%a!<%j%s%0%j%9%H$+$i$N%a!<%k$r\e(B @samp{%mule} \e$B$X\e(B}
+ ((equal x-ml-name "mule") "%mule")
+ ;; @r{wanderlust \e$B%a!<%j%s%0%j%9%H$+$i$N%a!<%k$r\e(B @samp{%wanderlust} \e$B$X\e(B}
+ ;; @r{\e$B$=$7$FB3$1$F$=$l0J2<$N5,B'$bI>2A$9$k!#\e(B}
+ ((equal x-ml-name "wanderlust") "%wanderlust" continue)
+ ;; @r{Yahoo \e$BMxMQ<T$+$i$N%a%C%;!<%8$r\e(B @samp{+yahoo-{username}} \e$B$X\e(B}
+ ((match from "\\(.*\\)@@yahoo\\.com")
+ "+yahoo-\\1")
+ ;; @r{\e$B%^%C%A$7$J$+$C$?;D$j$r\e(B @samp{+inbox} \e$B$X\e(B}
+ (t "+inbox")))
+@end group
+@end lisp
+
+\e$B5,B'$N4pK\C10L$O\e(B
+
+@lisp
+(@samp{\e$B>r7o\e(B} @samp{\e$B%U%)%k%@\e(B} [@code{continue}])
+@end lisp
+
+\e$B$H$$$&0lAH$G$9!#\e(B
+\e$BBh0l$NMWAG\e(B @samp{\e$B>r7o\e(B} \e$B$O\e(B sexp \e$B$G$9!#>\$7$/$O$9$08e$G@bL@$7$^$9!#\e(B
+\e$BBhFs$NMWAG\e(B @samp{\e$B%U%)%k%@\e(B} \e$B$O%a%C%;!<%8$N?6$jJ,$1@h$N%U%)%k%@L>$G$9!#\e(B
+\e$B$b$7Bh;0$NMWAG\e(B @code{continue} \e$B$,%7%s%\%k$H$7$FM?$($i$l$k$H!"\e(B
+\e$B$=$N>r7o$,K~$?$5$l$?$H$7$F$b?6$jJ,$15,B'$NI>2A$rB3$1$^$9!#\e(B
+
+@samp{\e$B>r7o\e(B} \e$B$N5-K!$O0J2<$N$h$&$K$J$j$^$9!#<B:]$N=q$-J}$O>e$G5s$2$?Nc$r\e(B
+\e$B;29M$K$7$F2<$5$$!#\e(B
+
+@enumerate
+@item
+@samp{\e$B%U%#!<%k%IL>\e(B} \e$B$*$h$S\e(B @samp{\e$BCM\e(B} \e$B$r0z?t$H$7$F<h$k4X?t!#\e(B
+(@samp{\e$B%U%#!<%k%IL>\e(B} \e$B$O%U%#!<%k%IL>$rI=$9%7%s%\%k$G$9\e(B)
+
+@table @code
+@item @code{equal}
+\e$B%U%#!<%k%I$NCM$,\e(B @samp{\e$BCM\e(B} \e$B$KEy$7$1$l$P??!#\e(B
+\e$BBgJ8;z>.J8;z$N:9$OL5;k$5$l$^$9!#\e(B
+@item @code{match}
+\e$B%U%#!<%k%I$NCM$,\e(B @samp{\e$BCM\e(B} \e$B$K%^%C%A$9$l$P??!#\e(B
+@samp{\e$BCM\e(B} \e$B$O\e(B @code{\&} \e$B$d\e(B @code{\N} \e$B$r4^$`$3$H$,$G$-$^$9!#\e(B
+\e$B$=$l$i$O$=$NA0$N\e(B @samp{\e$BCM\e(B} \e$B$G\e(B @code{\(\)} \e$B$K%^%C%A$7$?%Q%?!<%s$K\e(B
+\e$BCV$-49$($i$l$^$9!#\e(B
+@item @code{address-equal}
+\e$B$=$N%U%#!<%k%I$K$"$k%"%I%l%9$N$$$:$l$+$,\e(B @samp{\e$BCM\e(B} \e$B$KEy$7$1$l$P??!#\e(B
+\e$BBgJ8;z>.J8;z$N:9$OL5;k$5$l$^$9!#\e(B
+@item @code{address-match}
+\e$B$=$N%U%#!<%k%I$K$"$k%"%I%l%9$N$$$:$l$+$,\e(B @samp{\e$BCM\e(B} \e$B$K%^%C%A$9$l$P??!#\e(B
+@samp{\e$BCM\e(B} \e$B$O\e(B @code{\&} \e$B$d\e(B @code{\N} \e$B$r4^$`$3$H$,$G$-$^$9!#\e(B
+\e$B$=$l$i$O$=$NA0$N\e(B @samp{\e$BCM\e(B} \e$B$G\e(B @code{\(\)} \e$B$K%^%C%A$7$?%Q%?!<%s$K\e(B
+\e$BCV$-49$($i$l$^$9!#\e(B
+@end table
+
+@item
+\e$BG$0U$N?t$N0z?t$r<h$k4X?t!#\e(B
+
+@table @code
+@item @code{or}
+\e$B0z?t$N$$$:$l$+$,??$rJV$9$J$i$P??!#\e(B
+@item @code{and}
+\e$B0z?t$N$9$Y$F$,??$rJV$9$J$i$P??!#\e(B
+@end table
+
+@item
+\e$B%7%s%\%k!#\e(B
+
+\e$B%7%s%\%k$,;XDj$5$l$k$H!"$=$l$rI>2A$7$^$9!#\e(B
+@end enumerate
+
+
+@node Address Book, Customization, Split messages, Top
@chapter \e$B%"%I%l%9D"\e(B
@cindex Address Book
* Disconnected Operations:: Off-Line management
* Expire and Archive:: Automatic expiration and archiving of messages
* Scoring:: Score of the messages
+* Split messages:: Splitting messages
* Address Book:: Management of Address Book
* Customization:: Customizing Wanderlust
* Terminology:: Terminologies
Recommended combination of APEL, FLIM and SEMI are following:
@itemize @minus
-@item APEL 10.3, FLIM 1.14.3 and SEMI 1.14.3
+@item APEL 10.4, FLIM 1.14.4 and SEMI 1.14.4
@end itemize
You can also use many other FLIM/SEMI variants. Combination of the
confirmed to work.
@itemize @minus
-@item APEL 10.2, Chao 1.14.1, REMI 1.14.2
-@item APEL 10.2, SLIM 1.14.3, EMY 1.13.9
+@item APEL 10.4, SLIM 1.14.9, SEMI 1.14.4
+@item APEL 10.4, CLIME 1.14.5, EMIKO 1.14.1
@end itemize
You have to re-install Wanderlust if you upgraded APEL, FLIM or SEMI.
@end table
-@node Scoring, Address Book, Expire and Archive, Top
+@node Scoring, Split messages, Expire and Archive, Top
@chapter Score of the Messages
@cindex Scoring
@c @cindex Kill File
@end example
-@node Address Book, Customization, Scoring, Top
+@node Split messages, Address Book, Scoring, Top
+@chapter Message splitting
+@cindex Split messages
+
+You can use @code{elmo-split} to split message in folder
+@code{elmo-split-folder} a la procmail according to some specified rules.
+To use this feature, set as follows in your @file{~/.emacs} at first.
+
+@lisp
+(autoload 'elmo-split "elmo-split" "Split messages on the folder." t)
+@end lisp
+
+Then you can invoke @kbd{M-x elmo-split} to split messages according to
+@code{elmo-split-rule}. On the other hand, invoke @kbd{C-u M-x elmo-split}
+to do a rehearsal (do not split actually).
+
+We will describe how to specify the rule. First of all, see following
+example, please.
+
+@lisp
+@group
+(setq elmo-split-rule
+ ;; @r{Store messages from spammers into @samp{+junk}}
+ '(((or (address-equal from "i.am@@spammer")
+ (address-equal from "dull-work@@dull-boy")
+ (address-equal from "death-march@@software")
+ (address-equal from "ares@@aon.at")
+ (address-equal from "get-money@@richman"))
+ "+junk")
+ ;; @r{Store messages from mule mailing list into @samp{%mule}}
+ ((equal x-ml-name "mule") "%mule")
+ ;; @r{Store messages from wanderlust mailing list into @samp{%wanderlust}}
+ ;; @r{and continue evaluating following rules}
+ ((equal x-ml-name "wanderlust") "%wanderlust" continue)
+ ;; @r{Store messages from Yahoo user into @samp{+yahoo-{username}}}
+ ((match from "\\(.*\\)@@yahoo\\.com")
+ "+yahoo-\\1")
+ ;; @r{Store unmatched mails into @samp{+inbox}}
+ (t "+inbox")))
+@end group
+@end lisp
+
+The basic unit of the rule is a combination like
+
+@lisp
+(@samp{CONDITION} @samp{FOLDER} [@code{continue}])
+@end lisp
+
+The 1st element @samp{CONDITION} is a sexp. Its grammar will be
+explained below. The 2nd element @samp{FOLDER} is the name of the folder
+to split messages into. When the 3rd element @code{continue} is
+specified as symbol, evaluating rules is not stopped even when the
+condition is satisfied.
+
+The grammar for @samp{CONDITION} is as follows. See example above to
+learn how to write the condition practically.
+
+@enumerate
+@item
+Functions which accept argument @samp{FIELD-NAME} and @samp{VALUE}.
+(@samp{FIELD-NAME} is a symbol that describes the field name)
+
+@table @code
+@item @code{equal}
+True if the field value equals to @samp{VALUE}.
+Case of the letters are ignored.
+@item @code{match}
+True if the field value matches to VALUE.
+@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute
+from matching @code{\(\)} patterns in the previous @samp{VALUE}.
+@item @code{address-equal}
+True if one of the addresses in the field equals to
+@samp{VALUE}. Case of the letters are ignored.
+@item @code{address-match}
+True if one of the addresses in the field matches to
+@samp{VALUE}.
+@samp{VALUE} can contain @code{\&} and @code{\N} which will substitute
+from matching @code{\(\)} patterns in the previous @samp{VALUE}.
+@end table
+
+@item
+Functions which accept any number of arguments.
+
+@table @code
+@item @code{or}
+True if one of the argument returns true.
+@item @code{and}
+True if all of the arguments return true.
+@end table
+
+@item
+A symbol.
+
+When a symbol is specified, it is evaluated.
+@end enumerate
+
+
+@node Address Book, Customization, Split messages, Top
@chapter Address Book
@cindex Address Book