% \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 % %\typeout{Package: lhelp \packageinfo} %<*dtx> \NeedsTeXFormat{LaTeX2e}[1998/06/01] \ProvidesFile{lhelp.dtx} % %\NeedsTeXFormat{LaTeX2e}[1998/06/01] %\ProvidesPackage{lhelp} % \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} % % \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} % % \end{macrocode} % % % \Finale % % \iffalse % %% EOF lhelp.dtx % %%---------------------------------------------------------------------------- % \fi