summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/lhelp
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lhelp
Initial commit
Diffstat (limited to 'macros/latex/contrib/lhelp')
-rw-r--r--macros/latex/contrib/lhelp/Makefile71
-rw-r--r--macros/latex/contrib/lhelp/lhelp.dtx2361
-rw-r--r--macros/latex/contrib/lhelp/lhelp.ins27
-rw-r--r--macros/latex/contrib/lhelp/lhelp.pdfbin0 -> 256695 bytes
4 files changed, 2459 insertions, 0 deletions
diff --git a/macros/latex/contrib/lhelp/Makefile b/macros/latex/contrib/lhelp/Makefile
new file mode 100644
index 0000000000..87e3be1b21
--- /dev/null
+++ b/macros/latex/contrib/lhelp/Makefile
@@ -0,0 +1,71 @@
+PKGNAME=lhelp
+VERSION=`grep '^\\\\def\\\\packageversion' $(PKGNAME).dtx | sed 's/^[^{]*{\\([^}]*\\).*/\\1/'`
+SRCDIR=$(PKGNAME)
+DISTFILES=\
+ $(SRCDIR)/Makefile \
+ $(SRCDIR)/$(PKGNAME).dtx \
+ $(SRCDIR)/$(PKGNAME).ins \
+ $(SRCDIR)/$(PKGNAME).pdf
+
+TEXMFLOCAL:=`kpsewhich --expand-path='$$TEXMFLOCAL'`
+STYDIR=$(TEXMFLOCAL)/tex/latex/$(PKGNAME)
+DOCDIR=$(TEXMFLOCAL)/doc/latex/$(PKGNAME)
+
+
+.SUFFIXES:
+.SUFFIXES: .sty .ins .dtx .dvi .ps .pdf
+
+.ins.sty:
+ latex $<
+
+.dtx.dvi:
+ latex $<
+ latex $<
+ makeindex -s gind.ist $(*D)/$(*F).idx
+ makeindex -s gglo.ist -o $(*D)/$(*F).gls $(*D)/$(*F).glo
+ latex $<
+ latex $<
+
+.dvi.ps:
+ dvips -o $(*D)/$(*F).ps $(*D)/$(*F)
+
+.dtx.pdf:
+ pdflatex $<
+
+
+all: $(PKGNAME).sty $(PKGNAME).dvi $(PKGNAME).ps $(PKGNAME).pdf
+
+tarfile=$(PKGNAME)-$(VERSION).tar.gz
+tar:
+ @echo "**************************"
+ @echo Creating: $(tarfile)
+ @echo "**************************"
+ @-rm -f $(tarfile)
+ tar -cz -C .. --owner 0 --group 0 --mode=a+r -f $(tarfile) $(DISTFILES)
+
+install: all
+ if [ ! -d $(STYDIR) ]; then mkdirhier $(STYDIR); fi
+ if [ ! -d $(DOCDIR) ]; then mkdirhier $(DOCDIR); fi
+ for file in *.sty; do \
+ install -m644 $$file $(STYDIR); \
+ done
+ for file in *.dvi; do \
+ install -m644 $$file $(DOCDIR); \
+ done
+ mktexlsr
+
+clean:
+ @-rm -f $(PKGNAME).glo $(PKGNAME).gls $(PKGNAME).idx $(PKGNAME).ilg
+ @-rm -f $(PKGNAME).ind $(PKGNAME).aux $(PKGNAME).toc
+# @-rm -f $(PKGNAME).drv $(PKGNAME).log
+ @-rm -f *~
+
+distclean: clean
+ @-rm -f $(PKGNAME).drv $(PKGNAME).log
+ @-rm -f $(PKGNAME).sty $(PKGNAME).dvi \
+ $(PKGNAME).ps $(PKGNAME).pdf $(PKGNAME).ps.pdf
+
+
+$(PKGNAME).sty: $(PKGNAME).ins $(PKGNAME).dtx
+$(PKGNAME).dvi: $(PKGNAME).sty
+$(PKGNAME).pdf: $(PKGNAME).ins $(PKGNAME).dtx $(PKGNAME).dvi
diff --git a/macros/latex/contrib/lhelp/lhelp.dtx b/macros/latex/contrib/lhelp/lhelp.dtx
new file mode 100644
index 0000000000..ec25238f26
--- /dev/null
+++ b/macros/latex/contrib/lhelp/lhelp.dtx
@@ -0,0 +1,2361 @@
+% \iffalse meta-comment
+% %%----------------------------------------------------------------------------
+%
+%% File: lhelp.dtx
+%% Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2003,
+%% 2004 Volker Kuhlmann
+%% All rights are reserved.
+%%
+% \fi
+%
+\def\packagedate{2004/07/13}
+\def\packageversion{2.1}
+\def\packagesummary{collection of little helpers (VK)}
+\edef\packageinfo{\packagedate\space v\packageversion\space\space\packagesummary}
+%
+% \iffalse
+%
+%<package>\typeout{Package: lhelp \packageinfo}
+%<*dtx>
+ \NeedsTeXFormat{LaTeX2e}[1998/06/01]
+ \ProvidesFile{lhelp.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}[1998/06/01]
+%<package>\ProvidesPackage{lhelp}
+%<driver> \ProvidesFile{lhelp.drv}
+%
+% \fi
+%^^A REMEMBER to also update the version in \usepackage of the driver code!
+% \ProvidesFile{lhelp.dtx}
+ [\packageinfo]
+%
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \iffalse
+%<*driver>
+
+\NeedsTeXFormat{LaTeX2e}[1998/06/01]
+\documentclass{ltxdoc}
+%%\IfFileExists{ltxdoc.cfg}{}{\OnlyDescription\RecordChanges\CodelineIndex}
+
+\usepackage[units,ddmonthyyyy]{lhelp}[\packagedate]
+\IfFileExists{amssymb.sty}{\usepackage{amssymb}}{\typeout{*** Package amssymb
+not found - bad output from \string\diameter}}
+
+ %\OnlyDescription % uncomment to suppress code line listing
+ \RecordChanges % uncomment for a change history
+ %\CodelineIndex\EnableCrossrefs % uncomment for command index
+\GetFileInfo{lhelp.dtx}
+
+\begin{document}
+\DocInput{lhelp.dtx}
+%%\IfFileExists{ltxdoc.cfg}{}{\PrintChanges\PrintIndex}
+ \PrintChanges % uncomment for a change history
+ %\PrintIndex % uncomment for command index
+\end{document}
+
+%</driver>
+% \fi
+%
+%
+%
+% \GetFileInfo{lhelp.dtx}
+% \CheckSum{1323}
+%
+% \title{The \textsf{lhelp} Package\thanks
+% {This file has version number \fileversion,
+% last modified \filedate.}}
+% \author{Volker Kuhlmann\thanks{%^^A
+% Email:\ \url{VolkerKuhlmann@GMX.de}.
+% For a postal address refer to the license section.}}
+% \date{\filedate}
+%
+% \parskip 0.6ex plus.2ex minus0.1ex
+%
+%
+% %^^A MACROS used for this document
+%
+% \let\package\textsf
+% \let\option\textsf
+% \let\env\textsf
+% \let\url\texttt
+%
+% \providecommand\MF{\textsc{meta-font}}
+% \newcommand\optmeta[1]{[\meta{#1}]}
+% %^^A this fixes a bug in doc.cls - too much vspace after verbatim:
+% \providecommand\fixendverbatim{\vspace{-\bigskipamount}}
+%
+% \newdimen\tableindentamount
+% \tableindentamount 25mm
+% \newcommand\tableindent{\noindent\hspace*{\tableindentamount}}
+%
+% \newdimen\exampleindentamount
+% \exampleindentamount 3em
+% \newcommand\exampleindent{\noindent\hspace*{\exampleindentamount}}
+% \newcommand\examplepar{\hangindent\exampleindentamount\hangafter 1\relax}
+%
+% \newdimen\pckcmdindentamount
+% \pckcmdindentamount 4em
+% \newenvironment{pckcmd}{%^^A
+% \ifvmode \else \par\vspace{-\parskip}\fi
+% \vspace{1mm}\noindent
+% \hangindent\pckcmdindentamount\hangafter 0\ignorespaces
+% }{%^^A
+% \par\vspace{1mm}\vspace{-\parskip}}
+%
+% \renewenvironment{quote}{%^^A
+% \list{}{\leftmargin=0.5\leftmargin\rightmargin\leftmargin}\item\relax
+% }{%^^A
+% \endlist
+% }
+%
+% \makeatletter
+% \providecommand\DescribeWord[1]{%
+% \leavevmode\@bsphack
+% \marginpar{\raggedleft\PrintDescribeEnv{#1}}%^^A
+% \@bsphack\index{#1\actualchar{\protect\ttfamily#1}\encapchar usage}\@esphack
+% \@esphack\ignorespaces
+% }
+% \makeatother
+%
+% \providecommand\DescribeOption[1]{\DescribeWord{#1}}
+% %^^A We also need a \begin{option}{NAME}
+%
+%
+%
+% \changes{v2.1}{2004/07/13}
+% {Added \cs{timehhmm}, \cs{eg} \cs{ie} \cs{etc} \cs{ca} \cs{resp},
+% \cs{muunit}, \cs{thinthinspace}, \cs{EPSfileext}, \cs{putdraftmarkps};
+% package options hh:mm, unitxspace, epspdf. unitelec: added \cs{muW}.
+% Improved index (still not finished). Draft mark slightly darker. Use
+% \cs{providecommand} with \cs{ohm}. Select hyphenation patterns by
+% \cs{selectXX} even if babel isn't used.}
+% ^^A Corrected docs for \draftname (which said \drafttext}
+%
+% \changes{v2.0e}{2001/09/14}
+% {Added \cs{Pgref}, package option draftmarkpsonly.
+% Changed \cs{phref}, \cs{Phref} to \cs{providecommand}.}
+%
+% \changes{v2.0d}{2001/07/18}
+% {Added \cs{Fref}, \cs{Tref}, \cs{Phref}.}
+%
+% \changes{v2.0c}{2001/05/09}
+% {Added option yyyymmdd.}
+%
+% \changes{v2.0b}{2000/07/05}
+% {Minor changes to documentation.}
+%
+% \changes{v2.0}{2000/06/06}
+% {Many little improvements.
+% First public release.}
+%
+%^^A 1.92ß 21Dec97 Option refshortcuts (always provided before).
+%^^A 1.9ß 22Oct97 \..lap, empty boxes, rules; countryselect; slightly rearranged
+%^^A 1.8ß 02Oct97 Option morefontsizes.
+%^^A 1.75ß 29Sep97 \placeEPS now writes filenames in \normalsize.
+%^^A 1.74ß 25Jun97 Made color draftgray darker because HP LJ 5 is very light.
+%^^A 1.73ß 19Jun97 Played with \ssref.
+%^^A 1.72ß 28Mar97 Fixed options draftmark, draftmarkps; commented more.
+%^^A 1.7ß 04Nov96 Options draftmark, draftmarkps.
+%^^A 1.6ß 21Oct96 Option shorttoc. \fref, ..., \textsubscript, \VLL,
+%^^A \kVLL, \rms, \pgref, \phref. Fixed \ac, \dc, \@degree
+%^^A 1.54ß 10Jul96 Changed space in \mus.
+%^^A 1.53ß 03May96 \placeEPS now only requires graphicx, not epsfig.
+%^^A 1.52 03Mar96 Added \addEPSopt.
+%^^A 1.5 15Mar95 Fixed \notes.
+%^^A 1.46 06Mar95 Now providing (\providecommand) both \degree and \Degree
+%^^A for a degree symbol, if not previously defined.
+%^^A 1.45 01Mar95 \let \Degree to \degree (clash with thesis packages).
+%^^A 1.44 27Feb95 Added \nnotes.
+%^^A 1.43 26Feb95 Changed doc for include level stuff.
+%^^A 1.42 22Jan95 Added opt arg to \xyfparbox. See note \@Sanitize.
+%^^A 1.4 21Jan95 Added \placepos, option verbose, \notesfont.
+%^^A 1.39 20Jan95 Put \@Sanitize in \placeEPS.
+%^^A 1.38 18Jan95 Now \edef for \w, \h in \placeEPS. Option epsdraft,
+%^^A \EPSopt. \ddmonthyyyy.
+%^^A 1.37 11Jan95 Fixed \placeEPS, there must have been changes in the
+%^^A keyval package. \phonesym now in dingsym.sty.
+%^^A 1.36 17Dec94 Added \placeEPS, include level stuff; \ac, \dc.
+%^^A 1.35 14Dec94 \ensureonecolumn, \ensuretwocolumn, \ensurecolumnend.
+%^^A 1.32 02Dec94 Reorganised unit options slightly.
+%^^A 1.3 01Dec94 Minor stuff. \fparbox, \xyfparbox. Option ddmonthyyyy.
+%^^A 1.2 02Nov94 Added \floatfraction.
+%^^A 1.1 29Oct94 Added more stuff from Vgeneral, and other things.
+%^^A 1.0 20Oct94 Created from Vgeneral 1.9 2Sep94, Vphysics 1.32 10Dec93.
+%
+% \changes{v1.0}{1994/10/20}
+% {Created from Vgeneral 1.9 2Sep94, Vphysics 1.32 10Dec93.}
+%
+%
+%
+% \maketitle
+%
+% \begin{abstract}
+% This LaTeX2e package defines macros which are useful for many documents. It is
+% a large collection of simple ``little helpers'' which do not really warrant a
+% separate package on their own.
+%
+% Included are, among other things, definitions of common units with preceeding
+% thinspaces and optionally following space, framed boxes where both width and
+% height can be specified, starting new odd or even pages, draft markers, notes,
+% conditional includes, including EPS files, and versions of enumerate and
+% itemize which allow the horizontal and vertical spacing to be changed.
+% \end{abstract}
+%
+% \begingroup
+% \parskip 0ex plus1pt
+% \parindent 0em
+% \tableofcontents
+% \par
+% \endgroup
+%
+%
+%
+% \section{License}
+%
+% This package is copyright \textcopyright\ 1993--2004 by:
+%
+% \begin{quote}
+% Volker Kuhlmann,
+% c/o University of Canterbury,
+% ELEC Dept, Creyke Road,
+% Christchurch, New Zealand\\
+% E-Mail: \url{VolkerKuhlmann@GMX.de}
+% \end{quote}
+%
+% 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 2 of the License, or
+% (at your option) any later version.
+%
+% To obtain a copy of the license, write to the
+% Free Software Foundation, Inc.,
+% 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA,
+% or browse \url{http://www.fsf.org/}.
+%
+%
+%
+% \section{Introduction}
+%
+% This package is a collection of helpful short macros which are not related to
+% each other.
+%
+% Most of these macros are generally useful, but some will be useful to only a
+% few people, if at all. They are combined here because any document I write
+% uses at least some of them.
+%
+% The first version of this package dates back to 1994, and combined bits and
+% pieces from older \LaTeX2.09 packages into this one. This package was made
+% specifically for \LaTeXe.
+%
+%
+%
+% \section{User Manual}
+%
+%
+% \subsection{Units}
+%
+% A selection of units is defined. Because the names are short and could easily
+% clash with something else, units are only defined when the respective package
+% option is used. All defined units have the thinspace between the
+% number and the unit already included, so '|123\cm|' gives '123\,cm'.
+%
+% The units defined by \option{unitBasic} redefine existing control sequences.
+%
+% A degree symbol and commands for degree celsius and fahrenheit are provided.
+% Because |\degree| clashes with many thesis packages, \package{lhelp} will
+% define both |\degree| and |\Degree| to be the degree symbol (superscript
+% circle), if they are not defined already by the time \package{lhelp} is
+% loaded. Either way, |\celsius| and |\fahren| will work.
+%
+% \DescribeMacro{\muunit}
+% |\muunit| produces just the micro ($\mu$) part of the unit and includes the
+% thinspace. If |\textmu| is defined (by e.g.\ \package{textcomp}), it will be
+% used instead of |$\mu$|.
+%
+% \DescribeOption{unitxspace}
+% With package option \option{unitxspace}, all defined units are followed by an
+% |\xspace|, which automatically insert white space if the unit is not followed
+% by punctuation. E.g. '|is 23\m long|' becomes 'is 23\,m\ long' instead of 'is
+% 23\,mlong'. See the |xspace| package for details.
+%
+% \DescribeMacro{\celsius}
+% \DescribeMacro{\fahren}
+% \begin{minipage}[t]{0.48\textwidth}\parskip 1ex
+% Package option \option{unitbasic}:\\
+% \begin{tabular}{ll}
+% |\g| &\g\\
+% |\kg| &\kg\\
+% |\mm| &\mm\\
+% |\mum|&\mum\\
+% |\cm| &\cm\\
+% |\m| &\m\\
+% |\ml|, |\mL| &\mL\\
+% |\ns| &\ns\\
+% |\mus|&\mus\\
+% |\ms| &\ms\\
+% |\s| &\s\\
+% |\h| &\h\\
+% |\muunit| &\muunit\\
+% \end{tabular}
+%
+% Package option \option{unitBasic}:\\
+% \begin{tabular}{ll}
+% |\l| &\l\\
+% |\L| &\L\\
+% |\min| &\min\\
+% \end{tabular}
+% \end{minipage}^^A
+% \hfil
+% \begin{minipage}[t]{0.48\textwidth}\parskip 1ex
+% Package option \option{unittemp}:\\
+% \begin{tabular}{ll}
+% |\degree| &\degree\ (see text)\\
+% |\Degree| &\Degree\ (see text)\\
+% |\celsius| &\celsius\\
+% |\fahren| &\fahren\\
+% \end{tabular}
+%
+% Package option \option{unitelec}:\\
+% \begin{tabular}{ll}
+% |\muA| &\muA\\
+% |\muH| &\muH\\
+% |\muV| &\muV\\
+% |\muW| &\muW\\
+% |\ohm| &\ohm\\
+% |\kohm| &\kohm\\
+% |\Mohm| &\Mohm\\
+% |\ac| &\ac\\
+% |\dc| &\dc\\
+% |\rms| &\rms\\
+% |\Vac| &\Vac\\
+% |\Vdc| &\Vdc\\
+% |\VLL| &\VLL\\
+% |\kVLL| &\kVLL\\
+% \end{tabular}
+% \end{minipage}
+%
+% Package option \option{units}: all of the above.
+%
+%
+% \subsection{Paragraph and page layout}
+%
+% \DescribeOption{page}
+% \DescribeOption{emptypage}
+% \DescribeWord{vmargin}
+% Package option \option{page} sets a zero |\parindent| and a non-zero
+% |\parskip|. Option \option{emptypage} also selects pagestyle empty. If package
+% \package{vmargin} was loaded before package \package{lhelp}, both options also
+% set the paper size to A4 and the margins to some more useful values.
+%
+%
+% \subsection{Draft markers}
+%
+% \DescribeOption{draftmark}
+% Package option \option{draftmark} selects pagestyle plain and changes the page
+% footer to include the current date and the text ``DRAFT''. This works with the
+% standard pagestyles empty (which is not empty then), plain, and headings. It
+% obviously does not work with any custom pagestyles. This option does not
+% affect the page header.
+%
+% \DescribeMacro{\draftname}
+% |\draftname| produces the ``DRAFT'' text.
+%
+% \DescribeMacro{\draftfont}
+% |\draftfont| switches to the font with which the draft text is printed. It
+% takes one argument: the text to typeset in draft font.
+%
+% \DescribeOption{draftmarkps}
+% \DescribeMacro{\putdraftmarkps}
+% Same as option \option{draftmark}, but also writes a big ``DRAFT'' in gray
+% across the page.
+% Required are the \package{color} package, and either the \package{graphics}
+% or \package{graphicx} package.
+% Packages \package{color} and \package{graphics} are loaded if necessary.
+% To load these packages with options, load them before \package{lhelp}.
+% It works with page styles empty, plain, and headings.
+% The page header is changed.
+% This uses a PostScript font (font family phv), so may require a PostScript
+% output device.
+% The actual mark is placed with |\putdraftmarkps|, which may have to be
+% redefined to accomodate a different |\draftname|. Its original definition can
+% be found via the index in the code section of this manual.
+%
+% \DescribeOption{draftmarkpsonly}
+% Same as option \option{draftmarkps}, but only writes a big ``DRAFT'' in gray
+% across the page. I.e., it doesn't change the footer.
+%
+% \subsection{Shortcuts and Symbols}
+%
+% \DescribeOption{refshortcuts}
+% Package option \option{refshortcuts} defines several shortcuts for
+% cross-referencing chapter, tables, etc. This is currently only really useful
+% for English. Usage is the same as for |\ref|, except that ``chapter'' etc.\ is
+% also printed. Those shortcuts starting with an uppercase letter print a word
+% with an uppercase first letter.
+%
+% For chapter, section, appendix, figure, table:
+% |\cref|,
+% |\Cref|,
+% |\sref|,
+% |\Sref|,
+% |\aref|,
+% |\Aref|,
+% |\fref|,
+% |\Fref|,
+% |\tref|,
+% |\Tref|
+%
+% For pages:
+% |\pgref|,
+% |\Pgref|
+%
+% For photos\footnote
+% {(e.g. with the \package{photo} package, also by Volker Kuhlmann,
+% available from CTAN)}:
+% |\phref|,
+% |\Phref|
+%
+% Examples: \examplepar\\
+% |\sref{s:mylabel}| produces |section~\ref{s:mylabel}|,\\
+% |\pgref{somepage}| produces |page~\pageref{somepage}|,\\
+% |\phref{p:photo1}| produces |photo~\ref{p:photo1}|,\\
+% |\Aref{s:a1}| produces |Appendix~\ref{s:a1}|.
+%
+%
+% \noindent
+% \DescribeMacro{\lineout}
+% \DescribeMacro{\ul}
+% \DescribeMacro{\ulbf}
+% Text with attributes. The text is taken as argument by these macros, and can't
+% be broken across lines. If it is necessary to break text into lines, try
+% Donald Arseneau's package \package{ulem}.
+%
+% \tableindent
+% \begin{tabular}{ll}
+% |\ulbf{|\meta{text}|}| &\ulbf{underlined bold}\\
+% |\ul{|\meta{text}|}| &\ul{underlined}\\
+% |\lineout{|\meta{text}|}| &\lineout{lined out}\\
+% \end{tabular}
+%
+% \noindent
+% \DescribeMacro{\textsubscript}
+% More shortcuts.
+% \LaTeX provides a |\textsuperscript|, but no |\textsubscript|, so we make one
+% here. |\textsubscript| is robust, and only defined by \package{lhelp} if it
+% is not already defined, in case \LaTeX\ does provide it in a future version.
+%
+% \tableindent
+% \begin{tabular}{ll}
+% |\bs|, |\texttt{\bs}| &\bs, \texttt{\bs}\\
+% |\careof| &\careof\ (the following space is included)\\
+% |\textsubscript{|\meta{subscript}|}| &Text\textsubscript{subscript}\\
+% \end{tabular}
+%
+% \noindent
+% These symbols produce the same result in text and math mode:\\
+% \tableindent
+% \begin{tabular}{ll}
+% |\larr| &\larr\\
+% |\rarr| &\rarr\\
+% |\PP| &\PP\\
+% |\MM| &\MM\\
+% |\PM| &\PM\\
+% |\about| &\about\\
+% \end{tabular}
+%
+% \noindent
+% \DescribeMacro{\eg}
+% \DescribeMacro{\ie}
+% \DescribeMacro{\etc}
+% \DescribeMacro{\ca}
+% \DescribeMacro{\resp}
+% These macros produce the English abbreviations ``e.g.'', ``i.e.'', and
+% ``etc.'', including the following normal space. This is for those (like
+% me) who always forget the backslash after the second period and thus get a
+% sentence-ending space with |\frenchspacing|.
+%
+% \DescribeMacro{\diameter}
+% This is a bad excuse for a diameter symbol. When the AMS symbols are available
+% (package \package{amssymb}), their |\varnothing| symbol will be used instead,
+% which is an acceptable solution.\\
+% \newcommand\diacludge{\mbox{\raise.15ex\hbox{o}\kern-.5em/}}%^^A
+% \newcommand\diaams{$\csname varnothing\endcsname$}%^^A
+% \tableindent
+% \begin{tabular}{ll}
+% |\diameter| &\diacludge\\
+% |\diameter| &\diaams\ (with package \package{amssymb};
+% else nothing shown here)\\
+% \end{tabular}
+%
+% \noindent
+% \DescribeMacro{\Discuss}
+% \DescribeMacro{\Edit}
+% \DescribeMacro{\Mark}
+% Put some obvious markers into the text, as a reminder that changes to the text
+% are necessary before publication.\\
+% \tableindent
+% \begin{tabular}{ll}
+% |\Discuss| &\Discuss\\
+% |\Edit| &\Edit\\
+% |\Mark| &\Mark\\
+% \end{tabular}
+%
+%
+% \subsection{Boxes and rules}
+%
+% \DescribeMacro{\fparbox}
+% A framed |\parbox|. The text material is set in paragraph mode, not LR-mode.
+% Unlike |\fbox{\parbox{\columnwidth}{...}}|, the width of the box generated by
+% |\fparbox| including the frame is \meta{width}. The default for \meta{width}
+% is |\hsize|. |\fboxrule| and |\fboxsep| are used as for |\fbox|.
+%
+% \begin{pckcmd}
+% |\fparbox|\optmeta{width}|(|\meta{parbox-optargs}|){|\meta{text}|}|
+% \end{pckcmd}
+%
+% \meta{parbox-optargs} are the optional arguments to |\parbox|, namely\\
+% |[POS][HEIGHT][INNER-POS]|.
+%
+% Examples:
+% \par\vskip-\parskip\exampleindent
+% \begin{minipage}{60mm}
+% \begin{verbatim}
+% \fparbox{text...}
+% \fparbox(){text...}
+% \fparbox([t]){text...}
+% \fparbox[50mm]([t][80mm][s]){text...}
+% \end{verbatim}\fixendverbatim
+% \end{minipage}
+%
+% \noindent
+% \fparbox{This box is produced with:\\\hspace*{7mm}\texttt{%^^A
+% \bs fparbox\{This box is produced with:%^^A
+% \bs\bs\bs hspace*\{7mm\}\bs texttt\{...\}\}}}
+% \vskip 1.5ex
+%
+% \DescribeMacro{\xyfparbox}
+% Draws a framed box with \meta{text} in it. \meta{text} is set in a |\parbox|.
+% The outside of the frame has a size of \meta{width} times \meta{height}.
+% \begin{pckcmd}
+% |\xyfparbox|\optmeta{pos}%^^A
+% |{|\meta{width}|}{|\meta{height}|}{|\meta{text}|}|
+% \end{pckcmd}
+% The optional argument \meta{pos} becomes the first optional argument to
+% |\parbox| and defaults to |c|. |\parbox|'s \meta{inner-pos} is set to |c|.
+% |\fboxrule| and |\fboxsep| are used as for |\fbox|.
+%
+% Example:\\
+% \exampleindent
+% \xyfparbox{60mm}{12mm}{\ttfamily \bs xyfparbox\{60mm\}\{12mm\}\{...\}}
+% \vskip 1.5ex
+%
+%
+% \DescribeMacro{\tlap}
+% \DescribeMacro{\blap}
+% Similar to plain's |\llap| and |\rlap|, the following overlapping boxes are
+% provided. All of these boxes have a size of zero. Their content overlaps into
+% adjacent page areas. Horizontal overlap uses |\hbox|, vertical overlap uses
+% |\vbox|.
+%
+% \tableindent
+% \begin{tabular}{ll}
+% |\lrlap| &left and right (i.e. horizontally centred)\\
+% |\tlap| &top\\
+% |\blap| &bottom\\
+% |\tblap| &top and bottom (i.e. vertically centred)\\
+% |\rtlap| &right and top\\
+% |\rblap| &right and bottom\\
+% \end{tabular}
+%
+%
+% The following macros are useful for creating fill-in type forms.
+%
+% \DescribeMacro{\vnull}
+% In analogy to |\null|: an empty |\vbox|.
+%
+% \DescribeMacro{\vnul}
+% An empty |\vbox| right at the top edge of the page. This uses
+% |\offinterlineskip| (and its own level of grouping).
+%
+% \DescribeMacro{\hrulenull}
+% An |\hrule| with zero dimensions.
+%
+%
+% \subsection{Notes}
+%
+% \DescribeOption{printnotes}
+% Package option \option{printnotes}: print all notes in the document. The
+% default is not to.
+%
+% \begin{pckcmd}
+% |\notes{|\meta{anytext}|}|\\
+% |\nnotes{|\meta{anytext}|}|
+% \end{pckcmd}
+%
+% \DescribeMacro{\notes}
+% \DescribeMacro{\nnotes}
+% |\notes| prints \meta{anytext} if package option \option{printnotes} was
+% given, and discards \meta{anytext} otherwise.
+% |\nnotes| always discards \meta{anytext}; instead of deleting any notes you
+% never want printed, rename |\notes| to |\nnotes|.
+%
+% \DescribeMacro{\notesfont}
+% If any notes are printed, they are printed in |\notesfont|.
+%
+% \DescribeMacro{\bnotemark}
+% \DescribeMacro{\enotemark}
+% Printed notes are surrounded by a begin and an end mark which are printed into
+% the margin. These marks are generated by |\bnotemark| and |\enotemark|.
+%
+% \DescribeMacro{\ifprintnotes}
+% The conditional used to decide whether notes are printed is |\ifprintnotes|.
+% It can be used like |\ifprintnotes ... \fi|.
+%
+%
+% \subsection{Conditional includes}
+%
+% The conditional including macros provided here use an ``include level'' to
+% decide whether something is to be included or not. This is more powerful than
+% a binary include switch, and for example allows all xfig figures to be
+% included while no graphical images are. Graphical images are a common cause
+% for exploding file sizes and much increased processing times. For larger
+% documents the time saved while preparing can be considerable. For the final
+% document this is then simply turned off.
+%
+% \DescribeWord{excludelevel}
+% \DescribeMacro{\includelower}
+% The counter |excludelevel| is the document's threshold for whether something
+% is included or not. The default is 5.
+% \begin{pckcmd}
+% |\includelower{|\meta{includelevel}|}{|\meta{yes}|}{|\meta{no}|}|
+% \end{pckcmd}
+% |\includelower| expands to \meta{yes} if \meta{includelevel} is lower than
+% the counter |excludelevel|, otherwise it expands to \meta{no}.
+%
+% Example:
+% \exampleindent
+% \begin{verbatim}
+% \documentclass ...
+% \usepackage{lhelp}
+% \setcounter{excludelevel}{2}
+% \begin{document}
+% \includelower{1}{\input{some-xfig-figure.latex}}{}
+% \includelower{2}{\includegraphics{some-image.eps}}{}
+% \end{verbatim}\fixendverbatim
+% Will include the xfig figure but not the eps image.
+%
+% Set |excludelevel| to a number larger than the largest \meta{includelevel}
+% used to include everything.
+%
+% \DescribeMacro{\ifinclude}
+% An alternative to |\includelower| is
+% \begin{pckcmd}
+% |\ifinclude{|\meta{includelevel}|}| \ldots\ |\else| \ldots\ |\fi|
+% \end{pckcmd}
+% |\ifinclude{|\meta{includelevel}|}| expands to |\iftrue| if
+% \meta{includelevel} is lower than the counter |excludelevel|, and |\iffalse|
+% otherwise.
+%
+%
+% \subsection{Including EPS files}
+%
+% \DescribeMacro{\placeEPS}
+% This macro helps with inserting EPS files into the document, reducing the
+% amount of typing required for the common case. In draft mode (see package
+% option \option{epsdraft} below) only an outline of the EPS is drawn. Missing
+% files will not produce an error, only a warning is written on the screen.
+% \begin{pckcmd}
+% |\placeEPS|\optmeta{moreargs}%^^A
+% |{|\meta{width}|}{|\meta{height}|}{|\meta{filename}|}|
+% \end{pckcmd}
+%
+% Inserts encapsulated postsript file \meta{filename} into the text with width
+% \meta{width} and height \meta{height}. \meta{width} and/or \meta{height} may
+% be empty; default is natural size. \meta{moreargs} is anything that is allowed
+% as argument to |\includegraphics| (\package{graphicx} version), e.g. bounding
+% boxes---see the \package{graphicx} documentation.
+%
+% The standard \package{graphicx} package is required, and must be loaded by the
+% user (\package{lhelp} does not load it). Unfortunately, \package{graphics} is
+% not sufficient, so that a document using |\placeEPS| must use the
+% \package{graphicx} package.
+%
+% If \meta{filename} does not exist, an empty framed box with the given
+% dimensions is drawn with the name of the file in it; if any of \meta{width}
+% and \meta{height} are empty the default for \meta{width} is |.8\hsize|, and
+% for \meta{height} is |40mm|.
+%
+% In short, the advantages of |\placeEPS| over |\includegraphics| are:
+% \begin{itemize}
+% \item \ldots
+% \end{itemize}
+%
+% Example:\\
+% \exampleindent
+% |\placeEPS[bb=20 20 500 500,width=6cm]{}{5cm}{figure1}|\\
+% sets the bounding box to 20 20 500 500, and scales figure1.eps to a width of
+% 6\,cm and a height of 5\,cm.
+% The same could have been achieved with\\
+% \exampleindent
+% |\placeEPS[bb=20 20 500 500]{6cm}{5cm}{figure1}|
+%
+% \DescribeMacro{\addEPSopt}
+% \begin{pckcmd}
+% |\addEPSopt{|\meta{options}|}|
+% \end{pckcmd}
+% |\addEPSopt| adds the given comma-separated \meta{options} to the internal
+% option list for |\placeEPS|, so that these options do not need to be repeated
+% with each |\placeEPS|. |\placeEPS| always passes the internal option list on
+% to |\includegraphics|.
+%
+% \DescribeOption{epsdraft}
+% With package option \option{epsdraft}, a draft keyword is inserted into every
+% |\placeEPS| to get only an outline-box of the eps (same as package option
+% \option{draft} for the \package{graphics} package).
+%
+% \DescribeOption{epspdf}
+% \DescribeMacro{\EPSfileext}
+% The package option \option{epspdf} sets |\EPSfileext| to \url{.eps}, or
+% \url{.pdf} when running under pdflatex. |\EPSfileext| is appended to the
+% filename by |\placeEPS|. This makes it possible to use |\placeEPS| in
+% documents which are compiled with either latex or pdflatex. The default for
+% |\EPSfileext| is empty, for compatibility with existing documents.
+%
+%
+% \subsection{List environments and aides}
+%
+% The following macros extend the functionality of the existing list
+% environments \env{list}, \env{itemize}, and \env{enumerate}.
+%
+% First a few macros which set the spacing of a list environment. They are only
+% useful inside the second argument of the \env{list} environment, which is used
+% for setting various spacing-related variables.
+%
+% \DescribeMacro{\listlabelleft}
+% Sets the horizontal spacing, and the label raggedright.
+% \begin{pckcmd}
+% |\listlabelleft{|\meta{labelindent}|}{|\meta{labelwidth}|}{|%^^A
+% \meta{labelsep}|}{|\meta{rightmargin}|}|
+% \end{pckcmd}
+% \meta{labelindent} is
+% the distance from the left edge of the surrounding text to the left edge of
+% the label, \meta{labelwidth} the width of the label, \meta{labelsep} the
+% distance between the label and the left edge of the list-text, and
+% \meta{rightmargin} the distance between the right edge of the list-text and
+% the right edge of the surrounding text.
+%
+% \meta{labelindent}, \meta{labelwidth}, \meta{labelsep}, the width of the
+% list-text and \meta{rightmargin} added together make up |\columnwidth|. I find
+% this much more user-friendly than the way \LaTeX\ measures the horizontal
+% dimensions in the \env{list} environment.
+% |\listparindent| is set to zero.
+% Currently, |\itemindent| is unchanged but \LaTeX's default is zero.
+%
+% \DescribeMacro{\listlabelleftindent}
+% Some hard-coded values:
+% \begin{pckcmd}
+% |\listlabelleftindent{|\meta{labelwidth}|}|
+% \end{pckcmd}
+% Short for |\listlabelleft{1.5em}{|\meta{labelwidth}|}{1.5em}{4.5em}|.
+%
+% \DescribeMacro{\listshort}
+% |\listshort| sets all vertical spacing to zero: |\topsep|, |\partopsep|,
+% |\itemsep| and |\parsep|. Useful for lists which are not intended to stand out
+% as prominently as \LaTeX's default.
+%
+%
+% \DescribeEnv{Eenumerate}
+% \DescribeEnv{Eitemize}
+% Extend the \env{enumerate} and \env{itemize} environments such that the list
+% spacing can be user-controlled.
+% \begin{pckcmd}
+% |\begin{Eenumerate}{|\meta{formatting for list}|}|\\
+% |\begin{Eitemize}{|\meta{formatting for list}|}|
+% \end{pckcmd}
+% When \env{enumerate} and \env{itemize} call the \env{list} environment,
+% \meta{formatting for list} is inserted into the second argument of the
+% \env{list} environment to allow changing any of the spacing.
+% These can be mixed with \env{enumerate} and \env{itemize}.
+%
+% \DescribeEnv{enumerateshort}
+% \DescribeEnv{itemizeshort}
+% As the \env{enumerate} and \env{itemize} environments, but with reduced
+% vertical spacing.
+% \begin{pckcmd}
+% |\begin{enumerateshort}|\\
+% |\begin{itemizeshort}|
+% \end{pckcmd}
+% These can be mixed with \env{enumerate} and \env{itemize}.
+%
+%
+% \subsection{Starting new pages}
+%
+% This macros start new pages in a variety of ways.
+%
+% \DescribeMacro{\newoddpage}
+% \DescribeMacro{\newevenpage}
+% |\newoddpage| starts a new odd page and |\newevenpage| starts a new even page,
+% creating a blank page if necessary. The behaviour is always the same,
+% regardless whether the document is double-sided (i.e. |\twoside| is in effect)
+% or not.
+%
+% \DescribeMacro{\clearoddpage}
+% \DescribeMacro{\clearevenpage}
+% |\clearoddpage| and |\clearevenpage| are the same as |\newoddpage| and
+% |\newevenpage|, except they call |\clearpage| first, causing all unprocessed
+% floats to be written out.
+%
+% \DescribeMacro{\newoddpage*}
+% \DescribeMacro{\newevenpage*}
+% The star-form of these commands will always advance to the next odd/even page,
+% creating blank pages if necessary, even if the current page is odd/even and
+% empty. This means that they can be used repeatedly in immediate succession:
+% |\newoddpage*||\newoddpage*| starts an odd page and leaves another 2 blank
+% pages.
+%
+% \DescribeMacro{\clearthispage}
+% |\clearthispage| writes out all unprocessed floats, and starts a new page
+% regardless of whether the current page is empty.
+%
+% Currently none of these macros allow to change the pagestyle of any blank
+% pages which are generated (for example to empty when the document's pagestyle
+% is plain).
+%
+% There could be problems with page number references after |\new...|. It might
+% pay to check |\pageref|'s after any of |\new...|.
+%
+%
+% \subsection{One and two columns}
+%
+% \DescribeMacro{\ensureonecolumn}
+% \DescribeMacro{\ensuretwocolumn}
+% \DescribeMacro{\ensurecolumnend}
+% Ensure one or two columns for a part of a document, regardless
+% whether the rest of the document is in one or two columns. Every
+% |\ensureonecolumn|, or |\ensuretwocolumn| must be ended by
+% |\ensurecolumnend|.
+% \begin{pckcmd}
+% |\ensureonecolumn|\\
+% |\ensuretwocolumn|\\
+% |\ensurecolumnend|
+% \end{pckcmd}
+%
+% If nesting is required, the environment form must be used:
+% \begin{verbatim}
+% ... text in one or two columns ...
+% \begin{ensureonecolumn}
+% ... text in one column ...
+% \begin{ensuretwocolumn}
+% ... text in two columns ...
+% \end{ensuretwocolumn}
+% ... text back in one column ...
+% \end{ensureonecolumn}
+% ... text in one or two columns again ...
+% \end{verbatim}\fixendverbatim
+%
+%
+% \subsection{Hanging indentation}
+% \label{s:hanghere}
+%
+% \DescribeMacro{\hanghere}
+% The macro |\hanghere| causes a hanging indentation for the rest of the
+% paragraph, from the actual horizontal position of the |\hanghere|.
+%
+% \emph{NOTE: The code for \texttt{\string\absval} and
+% \texttt{\string\hangindent} is not covered by the copyright of the
+% \package{lhelp} package, and, as published by its author, remains without
+% copyright.}
+%
+% Here is the documentation of |\hanghere|, as published on the newsgroup
+% \url{comp.text.tex}:
+%
+% \begin{verbatim}
+% -- Donald Arseneau (1993) (Not copyright, not supported)
+% asnd@reg.triumf.ca
+%
+% This is a style file that can be used in both LaTeX and plain TeX.
+% To use, put \hanghere in the middle of a paragraph and the rest of
+% the paragraph will be indented to the spot so indicated.
+% Spaces are retained on both sides of \hanghere, but if
+% you want a space
+% afterwards, you
+% should type \hanghere\
+% or \hanghere{} . There is a length parameter, \minlinelen, that sets
+% a minimum length for the lines of text. If the position of \hanghere
+% would cause the line length to be too small, the following lines will
+% start at the left margin, as illustrated twice just above. Multiple
+% uses of \hanghere in a paragraph are cumulative, until the line length
+% gets too short and reverts to the full text width. There are
+% no parboxes used so line spacing and page breaking is normal.
+% There is one problem: if some text on the first line following
+% the \hanghere is very tall, it can overlap the text above
+% instead of doing the line spacing properly. Other instances
+% of tall text work fine.
+% \end{verbatim}\fixendverbatim
+%
+% \DescribeMacro{\absval}
+% The |\absval| macro is used by |\hanghere|, but is generally useful. It
+% returns the ``absolute value of a number or a dimension (if in a dimension
+% register)''.
+%
+% \DescribeMacro{\labelhangindent}
+% Hanging indentation with the width of the printed label.
+% \begin{pckcmd}
+% |\labelhangindent{|\meta{label}|}|
+% \end{pckcmd}
+% This prints \meta{label} and starts a hanging indentation.
+% The hanging indentation remains for all paragraphs in the current group.
+% Because this does not insert any horizontal space after the label, it is
+% probably a good idea to insert a \verb*'\ ' as part of the label.
+% |\labelhangindent| uses |\everypar|.
+% So far, |\labelhangindent| is not cumulative, i.e. only one can be used in a
+% paragraph.
+%
+%
+% \subsection{Misc}
+%
+% \DescribeMacro{\gobble}
+% \DescribeMacro{\gobbletwo}
+% These macros simply discard their argument(s).
+% \begin{pckcmd}
+% |\gobble{|\meta{anything}|}|\\
+% |\gobbletwo{|\meta{anything}|}{|\meta{anythingelse}|}|
+% \end{pckcmd}
+%
+%
+% \DescribeOption{ddmonthyyyy}
+% \DescribeMacro{\ddmonthyyyy}
+% Package option \option{ddmonthyyyy} switches |\today|'s date format to a more
+% user-friendly (and non-American) ``dd Month yyyy''. Regardless of what
+% |\today| happens to be defined as, |\ddmonthyyyy| gives a format of
+% \ddmonthyyyy.
+%
+%
+% \DescribeOption{yyyymmdd}
+% \DescribeMacro{\yyyymmdd}
+% Package option \option{yyyymmdd} switches |\today|'s date format to
+% ``yyyy/mm/dd''. Regardless of what |\today| happens to be defined as,
+% |\yyyymmdd| gives a format of \yyyymmdd.
+%
+%
+% \DescribeOption{hh:mm}
+% \DescribeMacro{\timehhmm}
+% \DescribeMacro{\todayaddtime}
+% The current time is put into |\timehhmm| formatted as HH:MM with leading 0.
+% Package option \option{hh:mm} appends |\timehhmm| to whatever |\today| is
+% defined as, at the beginning of the document. Order of options is
+% important---\option{yyyymmdd} for example redefines |\today|, so an appended
+% time would be lost. |\todayaddtime| appends the time to the definition of
+% |\today|, which is useful if something else has redefined |\today|.
+%
+%
+% \DescribeOption{morefontsizes}
+% Package option \option{morefontsizes} defines the additional font sizes
+% |\HUGE|, |\veryhuge|, |\veryHuge|, and |\veryHUGE|, which is sometimes useful
+% for posters, or very large headings. It should look ok with PostScript fonts,
+% and perhaps computer modern fonts. It is recommended to use this with the
+% type-1 version of the computer modern fonts, or metafont might create some
+% humungous bitmap fonts.
+%
+%
+% \DescribeOption{verbose}
+% Package option \option{verbose} causes some commands to print some
+% output which might be useful sometimes. Currently only |\placeEPS| makes use
+% of it.
+%
+%
+% \DescribeOption{shorttoc}
+% For documents with a zero |\parindent| and a non-zero |\parskip|,
+% |\tableofcontents| generates fairly useless output. Package option
+% \option{shorttoc} restores the previous behaviour for the table of contents.
+%
+%
+% \DescribeOption{countryselect}
+% \DescribeMacro{\selectD}
+% \DescribeMacro{\selectNZ}
+% \DescribeMacro{\selectUK}
+% \DescribeMacro{\selectUSA}
+% These macros are meant to provide a standardised way for selecting
+% country-specific settings, i.e.\ hyphenation patterns and
+% specific language definitions. Theoretically, the \package{babel}
+% package should offer this, but it doesn't---the name for a particular country
+% depends on the name entered into \package{babel}'s configuration file, for
+% which there is no standard. Package option \option{countryselect} defines
+% known names for selecting settings of a specific country.
+% Because using the hyphenation patterns of a language is desirable even
+% without the language-specific macro definitions, these commands now select
+% the hyphenation patterns when available, even if babel is not used by the
+% document. If babel is used, a |\selectlanguage| command is issued.
+%
+% Currently only \package{babel} is supported as underlaying language-switching
+% mechanism. Clearly this also calls for an \package{lhelp} configuration file,
+% matching the entries in \package{babel}'s.
+%
+% So far, |\selectD|, |\selectNZ|, |\selectUK|, |\selectUSA| are
+% defined for Germany, New Zealand, the UK, and the USA.
+%
+%
+% \DescribeEnv{narrowpars}
+% The narrowpars environment temporarily narrows the width of the text body,
+% respectively increases the left and right margins.
+% \begin{pckcmd}
+% |\begin{narrowpars}{|\meta{indentation}|}|
+% \end{pckcmd}
+% Paragraphs are narrowed by \meta{indentation} on the left and
+% \meta{indentation} on the right.
+% It uses |\everypar|, |\hangindent| and |\hangafter|, and changes
+% |\columnwidth| and |\hsize|.
+%
+% It would have been possible to achieve the same effect by using |\leftskip|
+% and |\rightskip|, but either will fail in some cases. Perhaps a narrowpars$*$
+% environment should use these?
+%
+%
+% \DescribeMacro{\thinthinspace}
+% Approximately half a thinspace. A quarterspace?
+%
+%
+% \DescribeMacro{\setTBstruts}
+% \DescribeMacro{\T}
+% \DescribeMacro{\B}
+% In tables created with tabular and array which use horizontal lines, there is
+% often too little space between the text of a line and the adjacent horizontal
+% lines. |\setTBstruts| defines two macros, |\T| and |\B|, which fine-tune the
+% vertical spacing on these lines.
+% Example:
+%
+% \begin{minipage}[t]{.38\textwidth}
+% \vspace{-2ex}
+% \begin{verbatim}
+% text ...\par
+% \setTBstruts
+% \begin{tabular}{ll}
+% \hline\T
+% cell$^2$ & cell\\
+% cell$_3$ & cell \B\\
+% \hline\T
+% cell & cell \B\\
+% \hline
+% \end{tabular}\par
+% text ...
+% \end{verbatim}%^^A\fixendverbatim
+% \end{minipage}\hspace{8mm}
+% \begin{minipage}[t]{.2\textwidth}
+% With |\T| and |\B|:\\[1ex]
+% text ...\par
+% \setTBstruts
+% \begin{tabular}{ll}
+% \hline\T
+% cell$^2$ & cell\\
+% cell$_3$ & cell \B\\
+% \hline\T
+% cell & cell \B\\
+% \hline
+% \end{tabular}\par
+% text ...
+% \end{minipage}\hspace{8mm}
+% \begin{minipage}[t]{.15\textwidth}
+% Without:\\[1ex]
+% text ...\par
+% \begin{tabular}{ll}
+% \hline
+% cell$^2$ & cell\\
+% cell$_3$ & cell\\
+% \hline
+% cell & cell\\
+% \hline
+% \end{tabular}\par
+% text ...
+% \end{minipage}
+%
+% (Taken from "TeX and TUG NEWS", Vol. 2, No. 3, 1993, p. 10.)
+%
+%
+% \DescribeMacro{\placepos}
+% This macro can place anything at an arbitrary position onto the page, without
+% shifting the current position (as much that is possible).
+% \begin{pckcmd}
+% |\placepos{|\meta{right}|}{|\meta{down}|}{|\meta{text}|}|
+% \end{pckcmd}
+% Places \meta{text} (in LR mode) a distance of \meta{right} to the right and
+% \meta{down} down from the current position. \meta{right}, \meta{down} can be
+% negative.
+%
+% |\placepos{..}| has zero size and is equivalent to |\hbox{}|, which is the
+% same as |\mbox{}| without the |\leavevmode|. This means that |\placepos|,
+% unlike |\mbox|, will never start a paragraph. Although |\placepos| has zero
+% size, placing an |\hbox| can have effects on spacing in some circumstances.
+% If |\placepos| is at the beginning of a paragraph of text, it
+% might be necessary to use a |\leavevmode| before the first |\placepos|.
+%
+% To include paragraph material in \meta{text}, use
+% |\parbox{|\meta{width}|}{|\meta{text}|}| as \meta{text}.
+%
+% Spaces following |\placepos| are ignored.
+%
+%
+% \DescribeMacro{\PSadjust}
+% Some older versions of the PostScript fonts had such a tight horizontal
+% spacing that they could essentially not hyphenate a word. As a temporary
+% solution it was suggested to change some line breaking parameters. Putting
+% |\PSadjust| into the preamble will do this.
+% Current versions of the PostScript fonts (from CTAN) don't need this.
+%
+%
+%
+% \section{To Do and Bugs}
+%
+% To do:
+% \begin{itemizeshort}
+% \item
+% |\sref| should become |\aref| when used after |\appendix|
+% \item
+% coloured boxes of specified sizes, e.g. |\fcolorparbox|
+% \item
+% Provide an upright Greek micro for units in roman text.
+% \end{itemizeshort}
+%
+% Any bugs?
+% Please notify the author if you find any, or if the documentation is unclear.
+% These ones were already found:
+% \begin{itemizeshort}
+% \item
+% draftmarkps causes two DRAFT warnings to be printed and logged to .log,
+% ever since draftmarkpsonly was added
+% \end{itemizeshort}
+%
+%
+%
+% %^^A This command extracts all index entries:
+% %^^A sed < lhelp.idx -e 's,indexentry{,,' -e 's,=.*$,,'
+%
+% \DoNotIndex{\ ,\.,\_}%^^A DOES NOT WORK!!
+% \begingroup\catcode `\ 11\relax\DoNotIndex{\ }\endgroup%^^A DOESN'T EITHER!
+% \DoNotIndex{\\,\,,\@M,\@depth,\@draft@even,\@draft@odd,\putdraftmarkps}
+% \DoNotIndex{\@edtext}
+% \DoNotIndex{\@enumctr,\@enumdepth,\@evenfoot,\@evenhead,\@fparbox}
+% \DoNotIndex{\@gobbletwo,\@height,\@ifnextchar,\@ifstar,\@ifundefined}
+% \DoNotIndex{\@itemdepth,\@itemitem,\@minus,\@mkboth,\@more,\@ne,\@neweven}
+% \DoNotIndex{\@newodd,\@oddfoot,\@oddhead,\@plus,\@psdraft@empty}
+% \DoNotIndex{\@psdraft@plain,\@setfontsize,\@showmark,\@tempa,\@tempboxa}
+% \DoNotIndex{\@tempdimb,\@toodeep,\@width,\AtBeginDocument,\AtEndOfFile}
+% \DoNotIndex{\AtEndOfPackage,\DeclareOption,\DeclareRobustCommand}
+% \DoNotIndex{\ExecuteOptions,\IfFileExists,\PackageWarning,\ProcessOptions}
+% \DoNotIndex{\RequirePackage,\Und@fyned,\Und@phined,\abovedisplayshortskip}
+% \DoNotIndex{\abovedisplayskip,\addvspace,\advance,\approx,\backslash}
+% \DoNotIndex{\baselineskip,\begingroup,\belowdisplayshortskip}
+% \DoNotIndex{\belowdisplayskip,\bigtriangledown,\bigtriangleup,\box,\c@page}
+% \DoNotIndex{\char,\circ,\clearpage,\clubsuit,\color,\columnsep,\columnwidth}
+% \DoNotIndex{\cr,\csname,\day,\def,\definecolor,\degree@temperature,\dimen}
+% \DoNotIndex{\dimen@,\dimen@i,\displaywidowpenalty,\doublehyphendemerits,\edef}
+% \DoNotIndex{\else,\emergencystretch,\empty,\emptypage,\endEenumerate}
+% \DoNotIndex{\endEitemize,\endcsname,\endensureonecolumn,\endensuretwocolumn}
+% \DoNotIndex{\endgraf,\endgroup,\endlist,\ensuremath,\epsfig,\escapechar}
+% \DoNotIndex{\everypar,\expandafter,\fbox,\fboxrule,\fboxsep,\fi,\font}
+% \DoNotIndex{\fontdimen,\fontfamily,\fontsize,\footnotesize,\global,\halign}
+% \DoNotIndex{\hangafter,\hangindent,\hb@xt@,\hbox,\hfil,\hfuzz,\hrule,\hsize}
+% \DoNotIndex{\hskip,\hss,\if@twocolumn,\ifcase,\ifdim,\ifinner,\iflh@verbose}
+% \DoNotIndex{\ifnum,\ifodd,\ifx,\ignorespaces,\includegraphics,\itemsep,\kern}
+% \DoNotIndex{\lastskip,\leavevmode,\leftmargin,\leftmark,\leftskip,\let}
+% \DoNotIndex{\lh@verbosetrue,\lhelp@o@ps@headings,\lhelp@paper,\lhelp@pars}
+% \DoNotIndex{\lhelp@toks,\lineskiplimit,\list,\listparindent,\llap,\long,\m@th}
+% \DoNotIndex{\makelabel,\marginparwidth,\mbox,\month,\month@english}
+% \DoNotIndex{\newcommand,\newcounter,\newdimen,\newenvironment,\newif,\newpage}
+% \DoNotIndex{\newtoks,\noalign,\normalsize,\null,\number,\offinterlineskip}
+% \DoNotIndex{\old@addvspace,\old@tableofcontents,\onecolumn,\opt,\or,\p@}
+% \DoNotIndex{\pageref,\pagestyle,\par,\parbox,\parindent,\parsep,\parskip}
+% \DoNotIndex{\partopsep,\penalty,\pm,\predisplaysize,\prevdepth,\protect}
+% \DoNotIndex{\providecommand,\ps@empty,\ps@h@old,\ps@headings,\ps@plain,\raise}
+% \DoNotIndex{\raisebox,\ref,\relax,\renewcommand,\reset@font,\rightarrow}
+% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\romannumeral,\rotatebox}
+% \DoNotIndex{\rule,\selectfont,\selectlanguage,\setbox,\setcounter}
+% \DoNotIndex{\setmarginsrb,\setmargnohfrb,\setpapersize,\sf@size,\sffamily}
+% \DoNotIndex{\skip,\skip@,\slshape,\small,\space,\string,\textbf,\textheight}
+% \DoNotIndex{\textsf,\texttt,\textwidth,\the,\thepage,\thr@@,\today,\tolerance}
+% \DoNotIndex{\topsep,\twocolumn,\typeout,\undefined,\underline,\unpenalty}
+% \DoNotIndex{\unskip,\usecounter,\vadjust,\value,\vbox,\vrule,\vss,\w,\wd}
+% \DoNotIndex{\widowpenalty,\year,\z@,\z@skip}
+% \DoNotIndex{\Eenumerate,\Eitemize,\Omega}
+%
+% \StopEventually{}
+%
+%
+%
+% \section{Implementation}
+% \label{s:implementation}
+%
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Package options}
+%
+%
+% \subsubsection{Units}
+%
+%^^A \begin{option}{unitxspace}
+% \begin{macro}{\lunitbox}
+% \begin{macro}{\luunitbox}
+% \begin{macro}{\muunit}
+% \begin{macro}{\lhelpxspace}
+% With option \option{unitxspace}, suffix all units with |\xspace|.
+% Micro-units have a slightly reduced kerning with the math-mode |\mu|, which is
+% used if |\textmu| is undefined.
+% \begin{macrocode}
+\DeclareOption{unitxspace}{%
+ \def\lhelpxspace{\xspace}%
+}
+\newcommand\lunitbox[1]{\mbox{\,#1}\lhelpxspace}
+\newcommand\luunitbox[1]{\mbox{\muunit #1}\lhelpxspace}
+\newcommand\muunit{\@ifundefined{textmu}{\kern.05em\ensuremath{\mu}}{\,\textmu}}
+\let\lhelpxspace\relax
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%^^A \begin{option}{unitbasic}
+% \begin{macro}{\g}
+% \begin{macro}{\kg}
+% \begin{macro}{\mm}
+% \begin{macro}{\mum}
+% \begin{macro}{\cm}
+% \begin{macro}{\m}
+% \begin{macro}{\ml}
+% \begin{macro}{\mL}
+% \begin{macro}{\ns}
+% \begin{macro}{\mus}
+% \begin{macro}{\ms}
+% \begin{macro}{\s}
+% \begin{macro}{\h}
+% Base units, plus a few more:
+% \begin{macrocode}
+\DeclareOption{unitbasic}{%
+ \newcommand\g{\,g\lhelpxspace}
+ \newcommand\kg{\,kg\lhelpxspace}
+ \newcommand\mm{\,mm\lhelpxspace}
+ \newcommand\mum{\luunitbox{m}}% micro-metre
+ \newcommand\cm{\,cm\lhelpxspace}
+ \newcommand\m{\,m\lhelpxspace}
+ \newcommand\ml{\mL\lhelpxspace}
+ \newcommand\mL{\,mL\lhelpxspace}
+ \newcommand\ns{\,ns\lhelpxspace}
+ \newcommand\mus{\luunitbox{s}}% micro-seconds
+ \newcommand\ms{\,ms\lhelpxspace}
+ \newcommand\s{\,s\lhelpxspace}
+ \newcommand\h{\,h\lhelpxspace}
+}
+% \end{macrocode}
+% \end{macro} \end{macro} \end{macro} \end{macro} \end{macro} \end{macro}
+% \end{macro} \end{macro} \end{macro} \end{macro} \end{macro} \end{macro}
+% \end{macro}
+%^^A
+% These control sequences are already in use, but can be overridden with this
+% option to give these units instead.
+% \begin{macrocode}
+\DeclareOption{unitBasic}{%
+ %\ExecuteOptions{unitbasic}
+ \renewcommand\l{\,L\lhelpxspace}
+ \renewcommand\L{\,L\lhelpxspace}
+ \renewcommand\min{\,min\lhelpxspace}
+}
+% \end{macrocode}
+%
+% ^^A\begin{option}{unittemp}
+% \begin{macro}{\celsius}
+% \begin{macro}{\fahren}
+% Temperature:
+% \begin{macrocode}
+\DeclareOption{unittemp}{%
+ \newcommand\degree@temperature{\ensuremath{^\circ}}
+ \providecommand\degree{\degree@temperature\lhelpxspace}
+ \providecommand\Degree{\degree@temperature\lhelpxspace}
+ \newcommand\celsius{\mbox{\degree@temperature\kern-.05em C}\lhelpxspace}
+ \newcommand\fahren{\mbox{\degree@temperature F}\lhelpxspace}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%^^A
+% Electrical engineering:
+% Use |\providecommand| for |\ohm| to allow precedence of other packages which
+% also provide |\ohm|. Make |\kohm| and |\Mohm| fall back on |\ohm|.
+% \begin{macrocode}
+\DeclareOption{unitelec}{%
+ \newcommand\muA{\luunitbox{A}}
+ \newcommand\muH{\luunitbox{H}}
+ \newcommand\muV{\luunitbox{V}}
+ \newcommand\muW{\luunitbox{W}}
+ \providecommand\ohm{\lunitbox{$\Omega$}}
+ \newcommand\kohm{\mbox{k}\ohm}
+ \newcommand\Mohm{\mbox{M}\ohm}
+ \newcommand\ac{\textsubscript{ac}\lhelpxspace}
+ \newcommand\dc{\textsubscript{dc}\lhelpxspace}
+ \newcommand\rms{\textsubscript{rms}\lhelpxspace}
+ \newcommand\Vac{\lunitbox{V\kern-.16em\ac}}
+ \newcommand\Vdc{\lunitbox{V\kern-.16em\dc}}
+ \newcommand\VLL{\lunitbox{V\kern-.16em\textsubscript{LL}}}
+ \newcommand\kVLL{\lunitbox{V\kern-.16em\textsubscript{LL}}}
+}
+% \end{macrocode}
+%^^A %\newcommand\ac{\ensuremath{_\textrm{ac}}}
+%^^A %\newcommand\dc{\ensuremath{_\textrm{dc}}}
+%^^A
+% All of the above units:
+% \begin{macrocode}
+\DeclareOption{units}{%
+ \ExecuteOptions{unitbasic,unitBasic,unittemp,unitelec}%
+}
+% \end{macrocode}
+%
+%
+% \subsubsection{Paragraph layout (and page layout if vmargin is loaded)}
+%
+% \begin{macrocode}
+\DeclareOption{page}{%
+ \ifx\setpapersize\undefined\else
+ \lhelp@paper
+ \setmarginsrb{30mm}{20mm}{25mm}{10mm}{0pt}{0mm}{}{10mm}
+ \fi
+ \lhelp@pars
+}
+\DeclareOption{emptypage}{%
+ \ifx\setpapersize\undefined
+ \pagestyle{empty}%
+ \else
+ \lhelp@paper
+ \setmargnohfrb{30mm}{20mm}{25mm}{10mm}
+ \fi
+ \lhelp@pars
+}
+\newcommand\lhelp@paper{%
+ \typeout{Package lhelp: setting paper size and margins.}
+ \setpapersize{A4}
+}
+\newcommand\lhelp@pars{%
+ \columnsep 8mm
+ \parskip 2ex \@plus0.5ex \@minus0.5ex
+ \parindent \z@
+}
+% \end{macrocode}
+%
+%
+% \subsubsection{Draft marks}
+%
+% Activate definitions and print notice to screen.
+% \begin{macrocode}
+\newcommand\draftmark@select{%
+ \PackageWarning{lhelp}{DRAFT mark selected}%
+ \pagestyle{plain}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption{draftmark}{%
+ \newcommand\@draft@odd{\llap{\hbox{\draftfont{\today\ \ \draftname}}}}
+ \newcommand\@draft@even{\rlap{\hbox{\draftfont{\draftname\ \ \today}}}}
+ \newcommand\@psdraft@empty{%
+ \def\@oddfoot{\reset@font\hfil\hfil\@draft@odd}%
+ \def\@evenfoot{\reset@font\@draft@even\hfil\hfil}}
+ \newcommand\@psdraft@plain{%
+ \def\@oddfoot{\reset@font\hfil\thepage\hfil\@draft@odd}%
+ \def\@evenfoot{\reset@font\@draft@even\hfil\thepage\hfil}}
+%
+ \add@toks\ps@empty\@psdraft@empty
+ \add@toks\ps@plain\@psdraft@plain
+ %\add@toks\ps@headings\@psdraft@plain
+ %(should be odd foot of pagestyle empty, even foot of pagestyle plain)
+% \end{macrocode}
+% % |\DeclareOption| of LaTeX2e $<$1995/12/01$>$ pl 2 does not
+% % handle macros which in themselves define new macros with
+% % options. Confusion about the number of "\#" in the nested
+% % declarations. (Funnily, it works if option draftmark is called
+% % from within option draftmarkps.) Use alternative:
+% \begin{macrocode}
+ \let\lhelp@o@ps@headings\ps@headings
+ \def\ps@headings{\lhelp@o@ps@headings\@psdraft@plain}%
+%
+ \draftmark@select
+}
+% \end{macrocode}
+%
+% \begin{macro}{\add@toks}
+% Add some tokens to the end of an existing control sequence. This could be good
+% for other things too.
+% \begin{pckcmd}
+% |\add@toks{|\meta{control sequence}|}{|\meta{tokens to add}|}|
+% \end{pckcmd}
+%
+% \begin{macrocode}
+\newtoks\lhelp@toks
+\newcommand\add@toks[2]{%
+ \expandafter\lhelp@toks\expandafter{#1}%
+ \expandafter\def\expandafter#1\expandafter{\the\lhelp@toks #2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\draftname}
+% The ``draft'' text
+% \begin{macrocode}
+\providecommand\draftname{DRAFT}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\draftfont}
+% The font with which the ``DRAFT'' text is printed
+% \begin{macrocode}
+\newcommand\draftfont{\textsf}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\draftmark@watermark}
+% \begin{macro}{\putdraftmarkps}
+% PostScript draft mark.
+% Changes the page header; can't use footer because this mark must be printed
+% before (underneath) the text.
+% \begin{macrocode}
+\newcommand\draftmark@watermark{%
+ \newcommand\putdraftmarkps{%
+ \placepos{.2\textwidth}{.8\textheight}{\rotatebox{65}{%
+ \fontfamily{phv}\fontsize{.2\textheight}\z@\selectfont
+ \color{draftgray}\draftname}}}
+ \@ifundefined{rotatebox}{\AtEndOfPackage{\RequirePackage{graphics}}}{}
+ \@ifundefined{color}{\AtEndOfPackage{\RequirePackage{color}}}{}
+ \AtEndOfPackage{\definecolor{draftgray}{gray}{0.9}} %0.955, 0.93
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\putdraftmarkps\hfil}\let\@evenhead\@oddhead}
+ \let\ps@empty\ps@plain
+ \let\ps@h@old\ps@headings \def\ps@headings{\ps@h@old
+ \def\@oddhead{\putdraftmarkps{\slshape\rightmark}\hfil\thepage}%
+ \def\@evenhead{\putdraftmarkps\thepage\hfil\slshape\leftmark}}%
+ \let\draftmark@watermark\empty
+%
+ \draftmark@select
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% Package options for printing the postscript draft mark with and without the
+% non-postscript mark.
+% \begin{macrocode}
+\DeclareOption{draftmarkps}{%
+ \draftmark@watermark
+ \csname ds@draftmark\endcsname % = \ExecuteOptions{draftmark}
+}
+\DeclareOption{draftmarkpsonly}{%
+ \draftmark@watermark
+}
+% \end{macrocode}
+%
+%
+%^^A \begin{option}{epsdraft}
+% \begin{macro}{\EPSopt}
+% Print only outlines for EPS included with |\placeEPS|.
+%
+% \begin{macrocode}
+\DeclareOption{epsdraft}{\def\EPSopt{draft}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%^^A \begin{option}{epspdf}
+% \begin{macro}{\EPSfileext}
+% Set |\EPSfileext| to \url{.eps}, or \url{.pdf} when running under pdflatex.
+% |\EPSfileext| is appended to the filename by |\placeEPS|.
+%
+% \begin{macrocode}
+\DeclareOption{epspdf}{%
+ \@ifundefined{pdfpagewidth}{\def\EPSfileext{.eps}}{\def\EPSfileext{.pdf}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Cross-referencing}
+%
+% For the lazy typist.
+% |\phref| and |\Phref| may already have been defined by the photo package,
+% therefore use |\providecommand|.
+%
+% \begin{macrocode}
+\DeclareOption{refshortcuts}{%
+ \newcommand\cref{chapter~\ref}
+ \newcommand\Cref{Chapter~\ref}
+ \newcommand\sref{section~\ref}
+ \newcommand\Sref{Section~\ref}
+ \newcommand\aref{appendix~\ref}
+ \newcommand\Aref{Appendix~\ref}
+ \newcommand\fref{figure~\ref}
+ \newcommand\Fref{Figure~\ref}
+ \newcommand\tref{table~\ref}
+ \newcommand\Tref{Table~\ref}
+ \newcommand\pgref{page~\pageref}
+ \newcommand\Pgref{Page~\pageref}
+ \providecommand\phref{photo~\ref}
+ \providecommand\Phref{Photo~\ref}
+}
+% \end{macrocode}
+%^^A %
+%^^A % works, but gives "x, x, x" not "x, x and x"
+%^^A %\newcommand\ssref[1]{%
+%^^A % sections~%
+%^^A % \def\ss@comma{}%
+%^^A % \@for\@ss:=#1\do{\sscomma\def\ss@comma{,\ }\ref\@ss}%
+%
+%
+% \subsubsection{Other}
+%
+%^^A \begin{option}{printnotes}
+% \begin{macro}{\ifprintnotes}
+% A simple conditional whether any notes are printed or not.
+% Notes should be surrounded by |\ifprintnotes ... \fi|.
+% \begin{macrocode}
+\DeclareOption{printnotes}{%
+ \printnotestrue
+}
+\newif\ifprintnotes
+% \end{macrocode}
+% \end{macro}
+%
+%
+%^^A \begin{option}{ddmonthyyyy}
+% \begin{macro}{\ddmonthyyyy}
+% \begin{macro}{\month@english}
+% Date format ``dd Month yyyy''.
+% \begin{macrocode}
+\DeclareOption{ddmonthyyyy}{%
+ \providecommand\month@english{%
+ \ifcase \month \or January\or February\or March\or
+ April\or May\or June\or July\or August\or September\or
+ October\or November\or December\fi}
+ \newcommand\ddmonthyyyy{\number\day\space
+ \month@english\space \number\year}%
+ \AtBeginDocument{\let\today=\ddmonthyyyy}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%^^A \begin{option}{yyyymmdd}
+% \begin{macro}{\yyyymmdd}
+% Date format ``yyyy/mm/dd''
+% \begin{macrocode}
+\DeclareOption{yyyymmdd}{%
+ \AtBeginDocument{\let\today=\yyyymmdd}
+}
+\newcommand\yyyymmdd{\number\year/\number\month/\number\day}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%^^A \begin{option}{hh:mm}
+% \begin{macro}{\hour}
+% \begin{macro}{\minute}
+% \begin{macro}{\timehhmm}
+% Current time of day: hours and minutes
+% \begin{macrocode}
+\DeclareOption{hh:mm}{%
+ \AtBeginDocument{\todayaddtime}%
+}
+\newcount\hour
+\newcount\minute
+\hour\time \divide\hour 60
+\minute-\hour \multiply\minute 60\advance\minute\time
+\edef\timehhmm{\ifnum\hour<10 0\fi\the\hour
+ :\ifnum\minute<10 0\fi\the\minute}
+\newcommand\todayaddtime{\edef\today{\today\,~\timehhmm}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%^^A \begin{option}{morefontsizes}
+% \begin{macro}{\HUGE}
+% \begin{macro}{\veryhuge}
+% \begin{macro}{\veryHuge}
+% \begin{macro}{\veryHUGE}
+% Additional larger font sizes.
+% This is mainly for PostScript fonts, or perhaps the type1 versions of the
+% computer modern fonts.
+% \begin{macrocode}
+\DeclareOption{morefontsizes}{%
+ \newcommand\HUGE {\@setfontsize\HUGE{29.86}{36}}
+ \newcommand\veryhuge{\@setfontsize\veryhuge{35.83}{43}}
+ \newcommand\veryHuge{\@setfontsize\veryHuge{43}{52}}
+ \newcommand\veryHUGE{\@setfontsize\veryHUGE{51.6}{62}}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%^^A \begin{option}{verbose}
+% \noindent
+% Print progress/debugging info in some places (default no)
+% \begin{macrocode}
+\DeclareOption{verbose}{\lh@verbosetrue}
+\newif\iflh@verbose
+% \end{macrocode}
+%
+%
+%^^A \begin{option}{shorttoc}
+% \noindent
+% Shorten the toc (for when |\parskip| is non-zero)
+% \begin{macrocode}
+\DeclareOption{shorttoc}{%
+ \let\old@tableofcontents=\tableofcontents
+ \def\tableofcontents{{%
+ \parskip \z@ \@plus 1pt \parindent \z@
+ \let\old@addvspace=\addvspace
+ \def\addvspace##1{\skip0=##1\relax\old@addvspace{.5\skip0}}%
+ \old@tableofcontents\par
+ }}%
+}
+% \end{macrocode}
+%
+%
+%^^A \begin{option}{countryselect}
+% \begin{macro}{\selectD}
+% \begin{macro}{\selectNZ}
+% \begin{macro}{\selectUK}
+% \begin{macro}{\selectUSA}
+% Selecting country specifics in a standard way.
+% The definition of these macros depends on the underlying format, resp.
+% particular package used to select languages (e.g. babel with file
+% language.dat, german).
+% (Perhaps this should go in lhelp.cfg?)
+% If the hyphenation patterns for these languages are
+% loaded, they will be selected even is babel is otherwise unused.
+%
+% \begin{macrocode}
+\DeclareOption{countryselect}{%
+ \newcommand\selectD{\lhelp@lang@sel{german}}
+ \newcommand\selectNZ{\lhelp@lang@sel{UKenglish}}
+ \newcommand\selectUK{\lhelp@lang@sel{UKenglish}}
+ \newcommand\selectUSA{\lhelp@lang@sel{USenglish}}
+}
+\newcommand\lhelp@lang@sel[1]{
+ \expandafter\ifx\csname date#1\endcsname\relax
+ \PackageWarning{lhelp}{Language '#1' not loaded,
+ selecting hyphenation only}%
+ \@ifundefined{l@#1}%
+ {\PackageWarning{lhelp}{Hyphenation patterns for '#1' unavailable}}%
+ {\language=\csname l@#1\endcsname}%
+ \else
+ \selectlanguage{#1}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{lhelp extension package}
+%
+% Does not exist yet but hey, we plan ahead\ldots
+% \begin{macrocode}
+\DeclareOption{X}{\AtEndOfFile{\RequirePackage{lhelpx}}}
+% \end{macrocode}
+%
+%
+% \subsubsection{Process options}
+%
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%
+%
+% \subsection{Shortcuts and Symbols}
+%
+% \begin{macro}{\textsubscript}
+% Provide a |\textsubscript| in case none is already defined.
+%
+% \begin{macrocode}
+\@ifundefined{textsubscript}{%
+ \DeclareRobustCommand\textsubscript[1]{%
+ \m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@\selectfont #1}}}%
+ }%
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ulbf}
+% \begin{macro}{\ul}
+% \begin{macro}{\lineout}
+% Quick and dirty underline, underline bold, and lineout.
+% For longer text use \package{ulem.sty}.
+% \begin{macrocode}
+\newcommand\ul{\underline}
+\newcommand\ulbf[1]{\underline{\textbf{#1}}}
+\newcommand\lineout[1]{{\setbox0\hbox{#1}\rlap{\raise.4ex\hbox{%
+ \vrule \@height.15ex \@width\wd0 \@depth 0pt}}\box0}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\larr}
+% \begin{macro}{\rarr}
+% A left and a right arrow.
+% \begin{macrocode}
+\newcommand\larr{\mbox{$\leftarrow$}} % leftarrow
+\newcommand\rarr{\mbox{$\rightarrow$}} % rightarrow
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bs}
+% A backslash. (by Donald Arseneau)
+% \begin{macrocode}
+\newcommand\bs{\ifdim\fontdimen3\font=0pt\char`\\% (tt font)
+ \else\ensuremath{\backslash}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PP}
+% \begin{macro}{\MM}
+% \begin{macro}{\PM}
+% A math mode plus, minus, and plusminus.
+% \begin{macrocode}
+\newcommand\PP{\ensuremath{+}}
+\newcommand\MM{\ensuremath{-}}
+\newcommand\PM{\ensuremath{\pm}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\about}
+% An approximate sign which also works in text mode.
+% \begin{macrocode}
+\newcommand\about{\mbox{$\approx$}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eg}
+% \begin{macro}{\ie}
+% \begin{macro}{\etc}
+% \begin{macro}{\ca}
+% \begin{macro}{\resp}
+% Abbreviations ``e.g.'', ``i.e.'', ``etc.'', ``ca.'', and ``resp.'' with the
+% following space included. Using |\providecommand| allows a previous differing
+% definition.
+% \begin{macrocode}
+\providecommand\eg{e.g.\ }
+\providecommand\ie{i.e.\ }
+\providecommand\etc{etc.\ }
+\providecommand\ca{ca.\ }
+\providecommand\resp{resp.\ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Discuss}
+% \begin{macro}{\Edit}
+% Place a visible sign that a text passage needs to be further discussed or
+% edited.
+% \begin{macrocode}
+\newcommand\@edtext[1]{%
+ {\slshape\footnotesize\fboxrule.4mm\fboxsep.4mm\fbox{#1}}}
+\newcommand\Discuss{\protect\@edtext{discuss}}
+\newcommand\Edit{\protect\@edtext{edit}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Mark}
+% Place a visible mark in the text to mark something which is not yet finished.
+% \begin{macrocode}
+\newcommand\@showmark{\fbox{\small$\clubsuit$}}
+\newcommand\Mark{\protect\@showmark}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\diameter}
+% A diameter symbol. This is a bad cludge without AMS symbols.
+% \begin{macrocode}
+\newcommand\diameter{\@ifundefined{varnothing}%
+ {\mbox{\raise.15ex\hbox{o}\kern-.5em/}}%
+ {\,\kern-0.07em\ensuremath{\varnothing}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\careof}
+% A careof symbol. The following space is already included.
+% \begin{macrocode}
+\providecommand\careof{\mbox{\raise.5ex\hbox{c}\kern-.2em/\kern-.2emo~}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Framed parboxes, other boxes, and rules}
+%
+% \begin{macro}{\fparbox}
+% Framed paragraph text.
+%
+% \begin{macrocode}
+\newcommand\fparbox[1][\hsize]{\@ifnextchar({\@fparbox{#1}}{\@fparbox{#1}()}}
+\long\def\@fparbox#1(#2)#3{\mbox{\fbox
+ {\dimen0=#1\advance\dimen0-2\fboxsep\advance\dimen0-2\fboxrule
+ \parbox#2{\dimen0}{#3}}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\xyfparbox}
+% A framed box with both width and height specified.
+%
+% \begin{macrocode}
+\newcommand\xyfparbox[4][c]{\mbox{\fbox{%
+ \dimen0=2\fboxrule\advance\dimen0 2\fboxsep
+ \dimen1=#2\advance\dimen1 -\dimen0
+ \dimen2=#3\advance\dimen2 -\dimen0
+ \parbox[#1][\dimen2][c]{\dimen1}{#4}}}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\lrlap}
+% \begin{macro}{\tlap}
+% \begin{macro}{\blap}
+% \begin{macro}{\tblap}
+% \begin{macro}{\rtlap}
+% \begin{macro}{\rblap}
+% Overlapping boxes. Similar to plain's |\llap|, |\rlap|.
+% Left+right (i.e. centre), top, bottom, top+bottom, right+top, right+bottom.
+% \begin{macrocode}
+\newcommand\lrlap[1]{\hb@xt@\z@{\hss#1\hss}}
+\newcommand\tlap[1]{\vbox to\z@{\vss#1}}
+\newcommand\blap[1]{\vbox to\z@{#1\vss}}
+\newcommand\tblap[1]{\vbox to\z@{\vss#1\vss}}
+\newcommand\rtlap[1]{\rlap{\tlap{#1}}}
+\newcommand\rblap[1]{\rlap{\blap{#1}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \noindent
+% Empty boxes and rules:
+%
+% \begin{macro}{\vnull}
+% Like |\null|, but with |\vbox|.
+% \begin{macrocode}
+\providecommand\vnull{\vbox{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\vnul}
+% An empty |\vbox| right at the top edge of the paper.
+% \begin{macrocode}
+\providecommand\vnul{{\offinterlineskip\vnull}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hrulenull}
+% An |\hrule| with zero dimensions.
+% \begin{macrocode}
+\providecommand\hrulenull{\hrule\@width\z@\@height\z@\@depth\z@}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Notes and remarks}
+%
+% This must all be |\long\def|!
+%
+% \begin{macro}{\notes}
+% \begin{macro}{\nnotes}
+% Take one argument, and print it depending on a switch, or always discard it.
+%
+% \begin{macrocode}
+\newcommand\notes[1]{\ifprintnotes
+ \begingroup\reset@font\notesfont
+ \bnotemark
+ \ignorespaces #1\relax
+ \enotemark
+ \endgroup
+ \fi
+}
+\newcommand\nnotes[1]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bnotemark}
+% \begin{macro}{\enotemark}
+% \begin{macro}{\notesfont}
+% The marks printed into the margin at the beginning and end of a note, and the
+% font with which notes are printed.
+% \begin{macrocode}
+\newcommand\bnotemark{%
+ \leavevmode
+ \vadjust{\vbox to\z@{\vss\llap
+ {\raise1ex\hbox{\footnotesize$\bigtriangledown$}\ \ }}}%
+}
+\newcommand\enotemark{%
+ \leavevmode
+ \vadjust{\vbox to\z@{\vss\llap
+ {\hbox{\footnotesize$\bigtriangleup$}\ \ }\vss}}%
+}
+\newcommand\notesfont{\footnotesize\sffamily}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Including figures, EPS files, etc}
+%
+% \begin{macro}{\includelower}
+% Similar to \LaTeX's |\@ifundefined{NAME}{TRUE}{FALSE}|.
+%
+% \begin{macro}{\ifinclude}
+% |\ifinclude{NUMBER}| translates into |\iftrue| or |\iffalse|.
+%
+% \begin{macrocode}
+\newcommand\includelower[3]{\ifinclude{#1}\def\@tempa{#2}\else
+ \def\@tempa{#3}\fi\@tempa}
+\newcommand\ifinclude[1]{\ifnum#1<\value{excludelevel}}
+\newcounter{excludelevel}
+\setcounter{excludelevel}{5}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\placeEPS}
+% Place an EPS file into the document.
+%
+% \begin{macrocode}
+\providecommand\EPSfileext{}
+\newcommand\placeEPS[4][]{%
+ \begingroup
+ \edef\w{#2}\ifx\w\empty\def\w{\the\z@}\fi
+ \edef\h{#3}\ifx\h\empty\def\h{\the\z@}\fi
+ \edef\eps@fn{#4\EPSfileext}%
+ \normalsize
+ \IfFileExists{\eps@fn}{%
+ %\epsfig{file={\eps@fn}\@more,width=\w,height=\h}%
+ % (obsolete - hangs if \w, \h are 0pt)
+ \edef\opt{\EPSopt,#1}%
+ \ifdim\w=\z@\else\edef\opt{\opt,width=\w}\fi
+ \ifdim\h=\z@\else\edef\opt{\opt,height=\h}\fi
+ \iflh@verbose\typeout{Loading EPS file: \opt\space(\eps@fn)}\fi
+ \expandafter\includegraphics\expandafter[\opt]{\eps@fn}%
+ }{%
+ \typeout{EPS file not found: <\eps@fn>}%
+ \ifdim\w=\z@\def\w{.8\hsize}\fi\ifdim\h=\z@\def\h{40mm}\fi
+ \xyfparbox[b]\w\h{\texttt{\@Sanitize{#1 }\\
+ \@Sanitize{\eps@fn}}}%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@Sanitize}
+% Thanks to Peter Schmitt \url{A8131DAL@AWIUNI11.EDVZ.UniVie.AC.AT}
+% for the |\@Sanitize| trick.
+% Note: If arg is empty "csnameendcsname" is printed.
+% Note: Arg can not be dimen, skip, ...! (syntax error results)
+%
+% \begin{macrocode}
+\newcommand\@Sanitize[1]{{\escapechar=-1
+ \expandafter\string\csname#1\endcsname}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EPSopt}
+% Parameters which will always be inserted into the optional argument of
+% |\includegraphics|.
+% \begin{macrocode}
+\newcommand\EPSopt{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addEPSopt}
+% Specify options to |\includegraphics| which are used for every
+% |\includegraphics|.
+% \begin{macrocode}
+\newcommand\addEPSopt[1]{%
+ \edef\EPSopt{\EPSopt,#1}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{List environments and aides}
+%
+% \begin{macro}{\listlabelleft}
+% \begin{macro}{\listlabelleftindent}
+% Set horizontal list spacing.
+% They are meant to go into the second argument of a list environment.
+%
+% \begin{macrocode}
+\newcommand\listlabelleft[4]{%
+ \leftmargin #1\labelwidth #2\labelsep #3\rightmargin #4
+ \advance\leftmargin\labelwidth\advance\leftmargin\labelsep
+ \def\makelabel##1{##1\hfil}%
+ \listparindent\z@}
+\newcommand\listlabelleftindent[1]{\listlabelleft{1.5em}{#1}{1.5em}{4.5em}}
+% \end{macrocode}
+%^^A \newcommand\listlabelleftindent[1]{\listlabelleft{5mm}{#1}{5mm}{15mm}}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listshort}
+% All vertical spacing is set to zero.
+%
+% \begin{macrocode}
+\newcommand\listshort{\topsep\z@\partopsep\z@\itemsep\z@\parsep\z@}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{environment}{Eenumerate}
+% \begin{environment}{Eitemize}
+% Add an additional, required argument and insert it into the second argument
+% of the \env{list} environment.
+%
+% Would a form of |\begin[formatting for list]{itemize}| have been better? It
+% has a reasonably high risk of conflicting with other packages which also
+% redefine the enumerate and itemize environments.
+%
+% Copied as is from latex.tex (25 Mar 92), `\#1' added.
+% Jun 2000: Modified to be the same as \LaTeXe.
+%
+%^^A LaTeX2e <1995/12/01> patch level 2
+%^^A*\show\enumerate
+%^^A> \enumerate=macro:
+%^^A->\ifnum \@enumdepth >\thr@@ \@toodeep \else \advance \@enumdepth \@ne \edef \@
+%^^Aenumctr {enum\romannumeral \the \@enumdepth }\expandafter \list \csname label\@
+%^^Aenumctr \endcsname {\usecounter \@enumctr \def \makelabel ##1{\hss \llap {##1}}
+%^^A}\fi .
+%^^A*\show\itemize
+%^^A> \itemize=macro:
+%^^A->\ifnum \@itemdepth >\thr@@ \@toodeep \else \advance \@itemdepth \@ne \edef \@
+%^^Aitemitem {labelitem\romannumeral \the \@itemdepth }\expandafter \list \csname \
+%^^A@itemitem \endcsname {\def \makelabel ##1{\hss \llap {##1}}}\fi .
+%^^A
+%^^A LaTeX2e <1999/06/01> patch level 1:
+%^^A*\show\enumerate
+%^^A> \enumerate=macro:
+%^^A->\ifnum \@enumdepth >\thr@@ \@toodeep \else \advance \@enumdepth \@ne \edef \@
+%^^Aenumctr {enum\romannumeral \the \@enumdepth }\expandafter \list \csname label\@
+%^^Aenumctr \endcsname {\usecounter \@enumctr \def \makelabel ##1{\hss \llap {##1}}
+%^^A}\fi .
+%^^A*\show\itemize
+%^^A> \itemize=macro:
+%^^A->\ifnum \@itemdepth >\thr@@ \@toodeep \else \advance \@itemdepth \@ne \edef \@
+%^^Aitemitem {labelitem\romannumeral \the \@itemdepth }\expandafter \list \csname \
+%^^A@itemitem \endcsname {\def \makelabel ##1{\hss \llap {##1}}}\fi .
+%
+% \begin{macrocode}
+\newcommand\Eenumerate[1]{\ifnum \@enumdepth >\thr@@ \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter\list\csname label\@enumctr\endcsname
+ {\usecounter\@enumctr
+ \def\makelabel##1{\hss\llap{##1}}#1}%
+ \fi}
+\let\endEenumerate=\endlist
+\newcommand\Eitemize[1]{\ifnum \@itemdepth >\thr@@ \@toodeep\else
+ \advance\@itemdepth \@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter\list\csname \@itemitem\endcsname
+ {\def\makelabel##1{\hss\llap{##1}}#1}%
+ \fi}
+\let\endEitemize=\endlist
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+%
+% \begin{environment}{enumerateshort}
+% \begin{environment}{itemizeshort}
+% As \env{enumerate}, \env{itemize} but with reduced vertical spacing.
+%
+% \begin{macrocode}
+\newenvironment{enumerateshort}{\Eenumerate{\listshort}}{\endEenumerate}
+\newenvironment{itemizeshort}{\Eitemize{\listshort}}{\endEitemize}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+%
+% \subsection{Starting new pages}
+%
+% \begin{macro}{\newoddpage}
+% \begin{macro}{\newevenpage}
+% \begin{macro}{\clearoddpage}
+% \begin{macro}{\clearevenpage}
+% Always start a new odd/even page, even if the document is not twoside.
+% Works with both single and double column.
+% |\clear...| also write out all leftover floats (as |\clearpage|,
+% |\cleardoublepage|).
+%
+% \begin{macro}{\newoddpage*}
+% \begin{macro}{\newevenpage*}
+% \begin{macro}{\clearthispage}
+% |\newoddpage*|, |\newevenpage*| and |\clearthispage|
+% can be used multiple times, e.g. |\newoddpage*||\newoddpage*|
+% starts an odd page and leaves another 2 blank pages;
+% |\clearthispage||\clearthispage| finishes the current page and
+% leaves one more blank page.
+% Note: careful with |\new...| after float pages! Check |\pageref|'s!
+%
+% \begin{macrocode}
+\newcommand\clearoddpage{\clearpage\@newodd}
+\newcommand\clearevenpage{\clearpage\@neweven}
+\newcommand\clearthispage{\null\clearpage}
+\newcommand\newoddpage{\@ifstar{\null}{}\newpage\@newodd}
+\newcommand\newevenpage{\@ifstar{\null}{}\newpage\@neweven}
+\newcommand\@newodd{\ifodd\c@page\else
+ \null\newpage\if@twocolumn\null\newpage\fi\fi}
+\newcommand\@neweven{\ifodd\c@page
+ \null\newpage\if@twocolumn\null\newpage\fi\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{One and two columns}
+%
+% \begin{macro}{\ensureonecolumn}
+% \begin{macro}{\ensuretwocolumn}
+% \begin{macro}{\ensurecolumnend}
+% Defining |\endensure...| might make it work as nestable environment.
+%
+% \begin{macrocode}
+\newcommand\ensureonecolumn{%
+ \if@twocolumn
+ \onecolumn
+ \def\ensurecolumnend{\twocolumn\let\ensurecolumnend\relax}%
+ \fi
+}
+\def\endensureonecolumn{\ensurecolumnend}
+\newcommand\ensuretwocolumn{%
+ \if@twocolumn\else
+ \twocolumn
+ \def\ensurecolumnend{\onecolumn\let\ensurecolumnend\relax}%
+ \fi
+}
+\def\endensuretwocolumn{\ensurecolumnend}
+\newcommand\ensurecolumnend{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Hanging indentation}
+%
+% The code for |\hangindent| is copied from the newsgroup \url{comp.text.tex}.
+% It might not have been a good idea to incorporate it into \package{lhelp}
+% instead of leaving it as a separate package, but in here it also contains a
+% bugfix.
+%
+% As noted in section~\ref{s:hanghere}, the \package{lhelp}-copyright does not
+% cover |\absval| and |\hanghere|.
+%
+% First some initial setup:
+% \begin{macrocode}
+\newdimen \minlinelen
+\minlinelen=\ifx\marginparwidth\Und@phined .2\hsize \else \marginparwidth \fi
+\ifx \@tempdimb\Und@fyned \csname newdimen\endcsname \@tempdimb\fi
+% \end{macrocode}
+%
+% \begin{macro}{\absval}
+% Useful little macro: gives absolute value of a number or a dimension (if in
+% a dimension register). Note that this makes use of TeX's confusing habit of
+% expanding |\if|'s within a number.
+% \begin{macrocode}
+\def\absval#1{\ifnum#1<\z@ -\fi#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hanghere}
+% The actual code for |\hanghere|:
+% \begin{macrocode}
+\newcommand\hanghere{\leavevmode
+\ifinner\else \begingroup
+ \displaywidowpenalty\widowpenalty
+ \skip@\lastskip \unskip\unpenalty \penalty\@M \hskip\skip@ \null
+ $$% Need a display to measure previous width
+ \lineskiplimit-999\p@ % so we get a baselineskip that we can cancel with:
+ \abovedisplayskip-\baselineskip \abovedisplayshortskip-\baselineskip
+ \belowdisplayskip\z@skip \belowdisplayshortskip\z@skip
+ \halign{##\cr\noalign{\global\dimen@i\prevdepth}% get depth of line above
+ \hbox{\vrule width\z@ depth\dimen@i }\cr}% preserve its depth
+ \dimen@\hsize \advance\dimen@-\minlinelen
+ \ifdim\absval\predisplaysize>\dimen@
+ \global\dimen@i\z@ \else
+% use the width of the line above (\predisplaysize-2em):
+ \global\dimen@i\predisplaysize \global\advance\dimen@i-2em
+ \fi
+ $$\endgraf
+ \ifdim\dimen@i>\z@ % then back up a line
+ \@tempdimb\prevdepth
+ \prevdepth-999\p@ % make sure I get an exact \baselineskip
+ \parskip-999\p@ % but cancel the extra space
+ \advance\parskip-\baselineskip % cancel the \baselineskip
+ \advance\parskip-\@tempdimb\relax
+ \else
+ \parskip\z@skip
+ \fi \parindent\z@ \leavevmode
+%% \@tempdimb does not get past the \endgroup!,
+%% \vrule has to be before \endgroup.
+%% blame Volker if this is not true.
+ \vrule depth\@tempdimb width\z@
+ \endgroup
+ \hangindent\dimen@i \hangafter\z@
+%% \vrule depth\@tempdimb width\z@ % see 4 lines above.
+\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\labelhangindent}
+% Hanging indentation with the width of the printed label.
+%
+% \begin{macrocode}
+\newcommand\labelhangindent[1]{\setbox\@tempboxa\hbox{#1}%
+ \expandafter\everypar\expandafter=\expandafter{\expandafter%
+ \hangindent\the\wd\@tempboxa\hangafter 0\relax}%
+ \leavevmode\box\@tempboxa\hangafter 1\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Etc}
+%
+%
+% \begin{macro}{\gobble}
+% \begin{macro}{\gobbletwo}
+% These macros simply discard their argument(s).
+%
+% \begin{macrocode}
+\long\def\gobble#1{}
+\long\def\gobbletwo#1#2{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{environment}{narrowpars}
+% Narrower paragraphs than the rest of the text.
+% Perhaps it would have been better to set |\leftskip| and |\rightskip|; but
+% both methods fail in some cases.
+%
+% \begin{macrocode}
+\newenvironment{narrowpars}[1]{%
+ \everypar={\hangindent #1\hangafter 0\relax}%
+ \advance\columnwidth-#1\relax
+ \advance\hsize-#1\relax
+}{%
+ \par
+}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \begin{macro}{\thinthinspace}
+% Approximately half a thinspace. |\,| = |\thinspace| = |\kern .16667em|
+% \begin{macrocode}
+\providecommand\thinthinspace{\kern .08em\relax}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\setTBstruts}
+% \begin{macro}{\T}
+% \begin{macro}{\B}
+% Fine-tune vertical spacing in tabular and array.
+% (Taken from "TeX and TUG NEWS", Vol. 2, No. 3, 1993, p. 10.)
+%
+% \begin{macrocode}
+\newcommand\setTBstruts{\def\T{\rule{\z@}{2.6ex}}%
+ \def\B{\rule[-1.2ex]{\z@}{\z@}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\placepos}
+% Place text at a given arbitrary position.
+% Equivalent to |\mbox|, but does not contain a |\leavevmode|.
+%
+% \begin{macrocode}
+\newcommand\placepos[3]{\hbox to\z@{\kern#1
+ \raisebox{-#2}[\z@][\z@]{#3}\hss}\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\PSadjust}
+% This once used to be necessary when using the PS fonts with psnfss.
+% It changes the line breaking parameters such that some breaking is possible.
+% Current versions of psnfss don't need this.
+%
+% \begin{macrocode}
+\newcommand\PSadjust{
+ \tolerance 800
+ \emergencystretch 2em
+ \doublehyphendemerits 5000
+ \hfuzz 0pt
+ \leftskip 0pt \@minus1pt
+ \rightskip 0pt \@minus1pt
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \Finale
+%
+% \iffalse
+% %% EOF lhelp.dtx
+% %%----------------------------------------------------------------------------
+% \fi
diff --git a/macros/latex/contrib/lhelp/lhelp.ins b/macros/latex/contrib/lhelp/lhelp.ins
new file mode 100644
index 0000000000..fad9873d9e
--- /dev/null
+++ b/macros/latex/contrib/lhelp/lhelp.ins
@@ -0,0 +1,27 @@
+\def\batchfile{lhelp.ins}
+
+\input docstrip
+
+\preamble
+\endpreamble
+
+\keepsilent
+\askforoverwritefalse % for developing
+
+\generate{\file{lhelp.sty}{\from{lhelp.dtx}{package}}
+ \file{lhelp.drv}{\from{lhelp.dtx}{driver}}
+ }
+
+\Msg{**********************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* `lhelp.sty' into a directory searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation run LaTeX on the}
+\Msg{* file `lhelp.dtx'.}
+\Msg{* If you need to edit anything for printing the documentation, edit}
+\Msg{* file `lhelp.drv' and run LaTeX on `lhelp.drv' instead.}
+\Msg{*}
+\Msg{**********************************************************************}
+
+\endinput
diff --git a/macros/latex/contrib/lhelp/lhelp.pdf b/macros/latex/contrib/lhelp/lhelp.pdf
new file mode 100644
index 0000000000..01c2a69086
--- /dev/null
+++ b/macros/latex/contrib/lhelp/lhelp.pdf
Binary files differ