% \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