diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:54:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:54:36 +0000 |
commit | 382cb1bea184b72c83c85d6717fce99eb9ab44ce (patch) | |
tree | 505f78872a4f4bbb6c9de3d4ea957be92ab0e312 /Master/texmf-dist/source/latex/lhelp/lhelp.dtx | |
parent | ca8f8560b0d6ab3eced79a4e876972faacb601e8 (diff) |
trunk/Master/texmf-dist/source/latex/lhelp
git-svn-id: svn://tug.org/texlive/trunk@355 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/lhelp/lhelp.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/lhelp/lhelp.dtx | 2361 |
1 files changed, 2361 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/lhelp/lhelp.dtx b/Master/texmf-dist/source/latex/lhelp/lhelp.dtx new file mode 100644 index 00000000000..ec25238f262 --- /dev/null +++ b/Master/texmf-dist/source/latex/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 |