% \iffalse meta-comment % % docmfp.dtx % Author: Peter Wilson (Herries Press) % Maintainer: Will Robertson (will dot robertson at latex-project dot org) % Copyright 1999--2005 Peter R. Wilson % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any % later version: % % This work has the LPPL maintenance status "maintained". % The Current Maintainer of this work is Will Robertson. % % This work consists of the files listed in the README file. % % % %<*driver> \documentclass[twoside]{ltxdoc} %% %% %%\usepackage{docmfp} \usepackage{url} \usepackage[draft=false, plainpages=false, pdfpagelabels, bookmarksnumbered, hyperindex=false ]{hyperref} \makeatletter \@mparswitchfalse \makeatother \renewcommand{\MakeUppercase}[1]{#1} \pagestyle{headings} \EnableCrossrefs \CodelineIndex %%% \OnlyDescription \setcounter{StandardModuleDepth}{1} \begin{document} \DocInput{docmfp.dtx} \end{document} % % % \fi % % \CheckSum{322} % % \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath} % \DoNotIndex{\@centercr,\@cite} % \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} % \DoNotIndex{\@input,\@ixpt,\@m} % \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint} % \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} % \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} % \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} % \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} % \DoNotIndex{\advance,\Alph,\alph} % \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} % \DoNotIndex{\bullet} % \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} % \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} % \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} % \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} % \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} % \DoNotIndex{\fbox} % \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} % \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} % \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} % \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} % \DoNotIndex{\input} % \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} % \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} % \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} % \DoNotIndex{\NeedsTeXFormat,\newdimen} % \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} % \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} % \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} % \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} % \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} % \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} % \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman} % \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength} % \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} % \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} % \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} % \DoNotIndex{\viipt,\vipt,\vskip,\vspace} % \DoNotIndex{\wd,\xiipt,\year,\z@} % % \changes{v1.0}{1999/04/11}{First public release} % \changes{v1.1}{2000/10/28}{Added general marking commands} % \changes{v1.2}{2001/02/11}{Revised the doc check sum code} % \changes{v1.2a}{2004/04/22}{Changed license from LPPL v1.0 to v1.3} % \changes{v1.2b}{2004/05/14}{Minor fix for checksum} % \changes{v1.2c}{2005/03/26}{Fixed some typos in the description part, no code changes} % \changes{v1.2d}{2009/09/02}{New maintainer (Will Robertson)} % % \def\dtxfile{docmfp.dtx} % \def\fileversion{v1.0} \def\filedate{1999/04/11} % \def\fileversion{v1.1} \def\filedate{2000/10/28} % \def\fileversion{v1.2} \def\filedate{2001/02/11} % \def\fileversion{v1.2a} \def\filedate{2004/04/22} % \def\fileversion{v1.2b} \def\filedate{2004/05/14} % \def\fileversion{v1.2c} \def\filedate{2005/03/26} % \def\fileversion{v1.2d} \def\filedate{2009/09/02} % \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package % \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option % \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file % \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter % \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle % \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment % \newcommand*{\Mfp}{Metafont/post} % % \title{The \Lpack{docmfp} package\thanks{This % file (\texttt{\dtxfile}) has version number \fileversion, last revised % \filedate.}} % % \author{% % Author: Peter Wilson, Herries Press\\ % Maintainer: Will Robertson\\ % \texttt{will dot robertson at latex-project dot org} % } % \date{\filedate} % \maketitle % \begin{abstract} % The \Lpack{docmfp} package extends the \Lpack{doc} package to cater for % documentation of non-\LaTeX{} code, such as Metafont and Metapost code, % or C or Java code. % \end{abstract} % \tableofcontents % % % \section{Introduction} % % It is common practice to document \LaTeX{} packages using the % \Lpack{doc} system~\cite{GOOSSENS94}. % The \Lpack{docmfp} package extends the \Lpack{doc} % package so that similar facilities are provided for the documentation % of non-LaTeX{} code, such as Metafont and Metapost code, or code in % other more common programming languages. % For example, a single \file{.dtx} file % can contain the documented sources of both the Metafont code for a new % font, together with the documented \LaTeX{} code for the accompanying % package. % % This manual is typeset according to the conventions of the % \LaTeX{} \textsc{docstrip} utility which enables the automatic % extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}. % % Section~\ref{sec:usc} describes the usage of the package. % Commented source code for the package is in Section~\ref{sec:code}. % % \section{The package} \label{sec:usc} % % I have assumed that if you are reading this then you are familiar with % the facilities provided by the \Lpack{doc} package. % % \DescribeMacro{\DescribeRoutine} % The |\DescribeRoutine{|\meta{name}|}| command is equivalent to the \Lpack{doc} % package |\DescribeEnv{|\meta{name}|}| command, except that it % is intended to introduce the description of a \Mfp{} macro (or % character or picture ). It typesets \meta{name} % in the margin and also generates an index entry for \meta{name}. % % \DescribeEnv{routine} % The |routine| environment is equivalent to the \Lpack{doc} package % |macro| environment. It takes one argument, which is the name of the % \Mfp{} macro (or character or picture) that is being defined. % It typesets the argument in the margin and makes an index entry for it. % % \DescribeMacro{\routinestring} % \DescribeMacro{\routineheadname} % These two commands contain the texts that are used in indexing % routine names. They can be changed via |\renewcommand|. Their default % definitions are: % \begin{verbatim} % \newcommand{\routinestring}{\space(routine)} % \newcommand{\routineheadname}{routines:} % \end{verbatim} % % \DescribeMacro{\DescribeVariable} % The |\DescribeVariable{|\meta{name}|}| is like the \Lpack{doc} % |\DescribeMacro{|\meta{name}|}| command, except that it is intended % to introduce the description, and definition, of a variable % or parameter. It typesets \meta{name} in the margin and makes an index entry % for it. % % \DescribeEnv{variable} % The |variable| environment is equivalent to the \Lpack{doc} package % |macro| environment. It takes one argument, which is the name of the % variable or parameter that is being defined. % It typesets the argument in the margin and makes an index entry for it. % % \DescribeMacro{\variablestring} % \DescribeMacro{\variableheadname} % These two commands contain the texts that are used in indexing % variable names. They can be changed via |\renewcommand|. Their default % definitions are: % \begin{verbatim} % \newcommand{\variablestring}{\space(variable)} % \newcommand{\variableheadname}{variables:} % \end{verbatim} % % A routine or variable \meta{name} can include the underscore and % hash characters (i.e., |_| and |#|), so that names like |a_variable#| can % be used. % % \DescribeMacro{\Describe} % This is a generalization of the |\Describe...| commands. % % |\Describe{|\meta{head}|}{|\meta{flag}|}{|\meta{name}|}| typesets % \meta{name} in the margin and makes index entries for it. One % entry will be a main entry as |name flag|, and the other will % be a subsidiary entry of |name| under the main heading |head|. % % Essentially, |\DescribeVariable{name}| is equivalent to: \\ % |\Describe{\variableheadname}{\variablestring}{name}| % % \DescribeEnv{Code} % This is a generalization of the |variable| and |routine| environments. % % |\begin{Code}{|\meta{head}|}{|\meta{flag}|}{|\meta{name}|}| typesets % \meta{name} in the margin and makes index entries for it. One % entry will be a main entry as |name flag|, and the other will % be a subsidiary entry of |name| under the main heading |head|. % % Essentially, |\begin{routine}{name}| is equivalent to: \\ % |\begin{Code}{\routineheadname}{\routinestring}{name}| % % For example, if you are documenting Java code, then you may wish % to use commands like: \\ % |\newcommand{\cvar}{class variables}| \\ % |\newcommand{\fcvar}{ (variable)}| \\ % |\newcommand{\ofield}{object fields}| \\ % |\newcommand{\ffield}{ (field)}| \\ % |\newcommand{\cmeth}{class methods}| \\ % |\newcommand{\ometh}{object methods}| \\ % |\newcommand{\meth}{ (method)}| \\ % |\Describe{\cvar}{\fcvar}{...}| for class variables \\ % |\Describe{\ofield}{\ffield}{...}| for object fields \\ % |\begin{Code}{\cmeth}{\meth}{...}| for class methods \\ % |\begin{Code}{\ometh}{\meth}{...}| for object methods. \\ % % % % \subsection{Usage with \file{.dtx} and \file{.ins} files} % % I assume that the major use of the \Lpack{docmfp} package will be in % \file{.dtx} file(s) that will be processed via a corresponding \file{.ins} file. % The \Lpack{ltxdoc} class also automatically calls the \Lpack{doc} package. % % As an example, if the \Lpack{docmfp} package was needed for the document % you are now reading, then I would have started it off like this (but look at % the start of the source for details that I ignore here): % \begin{verbatim} % %<*driver> % \documentclass{ltxdoc} % \usepackage{docmfp} % \EnableCrossrefs % \CodelineIndex % \setcounter{StandardModuleDepth}{1} % \begin{document} % \DocInput{docmfp.dtx} % \end{document} % % % \end{verbatim} % % The source of this document also includes several calls of the % \Lpack{docmfp} commands, which I have commented out (use your editor % to look for the occurences of the string |^^A| after this point). You can % edit the source to include the |\usepackage{docmfp}| command and uncomment % the \Lpack{docmfp} commands if you want to sample the package in use. % % ^^A \DescribeVariable{a_variable#} % ^^A \DescribeRoutine{an_mfp_macro} % ^^A \DescribeVariable{aN_variable#l9e[24]} % ^^A \DescribeRoutine{another_macro} % % % The source of an \file{.ins} file might look like this: % \begin{verbatim} % %% file myfile.ins % \def\batchfile{myfile.ins} % \input docstrip.tex % \preamble % Copyright and other notices % \endpreamble % \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}} % \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}} % % \endinput % \end{verbatim} % By default, the documentation system will put an |\endinput| command % at the end of each file it generates (\file{myfile.drv} and \file{mypackage.sty} % in the example above). This is fine provided the generated files are to be % processed by \LaTeX{} which understands |\endinput|. If a generated file is % to be processed by something that treats |\endinput| as an error, as \Mfp{} % will, then there is a problem. % % \DescribeMacro{\usepostamble} % \DescribeMacro{\empty} % \DescribeMacro{\defaultpostamble} % The documentation system provides these three commands which can be used % within an \file{.ins} file to % either prevent or enable the addition of |\endinput| to the generated files. % Extending the above example \file{.ins} file to include both Metafont and % and \LaTeX{} files we can have: % \begin{verbatim} % %% file myfile.ins % \def\batchfile{myfile.ins} % \input docstrip.tex % \preamble % Copyright and other notices % \endpreamble % \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}} % \usepostamble\empty % switch off writing \endinput % \generate{\file{myfont.mf}{\from{myfile.dtx}{font}}} % \usepostamble\defaultpostamble % switch on writing \endinput % \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}} % % \endinput % \end{verbatim} % % \DescribeMacro{\usepreamble} % \DescribeMacro{\defaultpreamble} % The documentation system provides these commands which can be used % within an \file{.ins} file to % either prevent or enable the addition of preamble information at the % beginning of the generated files. The preamble information is in % the form of LaTeX comment lines (i.e., lines starting with \%). % Other languages that you may wish to document probably have other % different commenting conventions, in which cases it is desireable % to inhibit the preamble output. % Extending the above example \file{.ins} file to turn off the preamble % for the driver file we can have: % \begin{verbatim} % %% file myfile.ins % \def\batchfile{myfile.ins} % \input docstrip.tex % \usepreamble\empty % switch off all preamble info % \generate{\file{myfile.drv}{\from{myfile.dtx}{driver}}} % \usepreamble\defaultpreamble % switch on normal preambling % \preamble % Copyright and other notices % \endpreamble % \usepostamble\empty % switch off writing \endinput % \generate{\file{myfont.mf}{\from{myfile.dtx}{font}}} % \usepostamble\defaultpostamble % switch on writing \endinput % \generate{\file{mypackage.sty}{\from{myfile.dtx}{pack}}} % % \endinput % \end{verbatim} % % There is no intrinsic reason why the use of this package should be limited % to documenting \Mfp{} code. It could just as well be used for documenting C, % C++, Java, or practically any other kind of code. % % \StopEventually{} % % % \section{The package code} \label{sec:code} % % Announce the name and version of the package, which requires % \LaTeXe. % \begin{macrocode} %<*usc> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{docmfp}[2009/09/02 v1.2d General coding extension to the doc package] % \end{macrocode} % % In order to try and avoid name clashes with other packages, each internal % name will include the character string \texttt{m@fp}. % % \begin{macro}{\m@fpmakeuscoreletter} % \begin{macro}{\m@fpmakehashletter} % \begin{macro}{\Makem@fpPrivateLetters} % \Mfp{} names can include underscores and hash characters. The special % meanings of these have to be turned off. % \begin{macrocode} \newcommand{\m@fpmakeuscoreletter}{\catcode`\_11\relax} \newcommand{\m@fpmakehashletter}{\catcode`\#11\relax} \newcommand{\Makem@fpPrivateLetters}{\m@fpmakeuscoreletter\m@fpmakehashletter} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % ^^A \begin{routine}{an_mfp_macro} % ^^A \begin{variable}{macro_variable} % ^^A \begin{routine}{nested_macro} % ^^A \end{routine} % ^^A \end{variable} % ^^A \end{routine} % % % \begin{environment}{routine} % The |routine| environment code is similar to the \Lpack{doc} package's % |environment| code. % \begin{macrocode} \def\routine{\begingroup \catcode`\\12 \Makem@fpPrivateLetters \m@fpm@cro@ \iffalse} \let\endroutine\endtrivlist % \end{macrocode} % \end{environment} % % \begin{environment}{variable} % The |variable| environment code is almost identical to the code for the % |routine| environment. % \begin{macrocode} \def\variable{\begingroup \catcode`\\12 \Makem@fpPrivateLetters \m@fpm@cro@ \iftrue} \let\endvariable\endroutine % \end{macrocode} % \end{environment} % % \begin{macro}{\m@fpm@cro@} % This command does all the work for both the |routine| and |variable| % environments. The first part is a straight copy of the \Lpack{doc} % package |\m@cro@| command. % \begin{macrocode} \long\def\m@fpm@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist \def\makelabel##1{\llap{##1}}% \if@inlabel \let\@tempa\@empty \count@\macro@cnt \loop \ifnum\count@>\z@ \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat \edef\makelabel##1{\llap{\vtop to\baselineskip {\@tempa\hbox{##1}\vss}}}% \advance \macro@cnt \@ne \else \macro@cnt\@ne \fi % \end{macrocode} % The rest of the code is for this package, and is a simplified and modified % version of the corresponding code for |\m@cro@|. % \begin{macrocode} \edef\@tempa{\noexpand\item[\noexpand\PrintMfpName{\string#2}]}% \@tempa \global\advance\c@CodelineNo\@ne #1% % \end{macrocode} % Do the indexing for the |variable| environment. % \begin{macrocode} \SpecialMainMfpIndex{#2}{\variablestring}{\variableheadname}\nobreak \else % \end{macrocode} % Do the indexing for the |routine| environment. % \begin{macrocode} \SpecialMainMfpIndex{#2}{\routinestring}{\routineheadname}\nobreak \fi % \end{macrocode} % and finish off the definition. % \begin{macrocode} \global\advance\c@CodelineNo\m@ne \ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\routinestring} % \begin{macro}{\routineheadname} % These two commands store the default indexing strings for routines. % \begin{macrocode} \newcommand{\routinestring}{\space(routine)} \newcommand{\routineheadname}{routines:} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\variablestring} % \begin{macro}{\variableheadname} % These two commands store the default indexing strings for variables. % \begin{macrocode} \newcommand{\variablestring}{\space(variable)} \newcommand{\variableheadname}{variables:} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\Describe} % This is a generic description macro, and is similar to those % defined later. % \changes{v1.1}{2000/10/28}{Added Describe and Describem@fp macros} % \begin{macrocode} \def\Describe{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters \Describem@fp} % \end{macrocode} % \end{macro} % % \begin{macro}{\Describem@fp} % The workhorse for |\Describe|. It processes the three apparent arguments % to |\Describe|. % \begin{macrocode} \def\Describem@fp#1#2#3{\endgroup \marginpar{\raggedleft\PrintMfpName{#3}}% \SpecialMfpIndex{#3}{#2}{#1}\@esphack\ignorespaces} % \end{macrocode} % \end{macro} % % \begin{environment}{Code} % This is a generalization of the previous environments. % \changes{v1.1}{2000/10/28}{Added m@fpm@c macro} % \begin{macrocode} \def\Code{\begingroup %% \catcode`\\12 \Makem@fpPrivateLetters \m@fpm@c} \let\endCode\endtrivlist % \end{macrocode} % \end{environment} % % \begin{macro}{\m@fpm@c} % This is the workhorse for the |Code| environment and processes % the 3 arguments apparently taken by the environment. % \begin{macrocode} \long\def\m@fpm@c#1#2#3{\endgroup \topsep\MacroTopsep \trivlist \def\makelabel##1{\llap{##1}}% \if@inlabel \let\@tempa\@empty \count@\macro@cnt \loop \ifnum\count@>\z@ \edef\@tempa{\@tempa\hbox{\strut}}% \advance\count@\m@ne \repeat \edef\makelabel##1{\llap{\vtop to\baselineskip {\@tempa\hbox{##1}\vss}}}% \advance\macro@cnt\@ne \else \macro@cnt\@ne \fi \edef\@tempa{\noexpand\item[\noexpand\PrintMfpName{\string#3}]}% \@tempa \global\advance\c@CodelineNo\@ne \SpecialMainMfpIndex{#3}{#2}{#1}\nobreak \global\advance\c@CodelineNo\m@ne \ignorespaces} % \end{macrocode} % \end{macro} % % % \begin{macro}{\PrintMfpName} % This typesets the name of a \Mfp{} routine or variable, or in general % \meta{name}. If there is a pre-existing % definition, then the package does not modify it. % \begin{macrocode} \providecommand{\PrintMfpName}[1]{\strut \MacroFont \string #1\ } % \end{macrocode} % \end{macro} % % Now for the command that writes out the index entries for the |routine| and % |variable| environments. It is also used for the |Code| environment. % % \begin{macro}{\SpecialMainMfpIndex} % The command % |\SpecialMainMfpIndex{|\meta{name}|}{|\meta{string}|}{|\meta{heading}|}| % writes \meta{name} to the \file{.idx} file, firstly as a `main' entry (flagged % with \meta{string}) and then as a subsidiary entry under \meta{heading}. % Both entries are treated as definitional. % \changes{v1.1}{2000/10/28}{Changed subsidiary environment index entry to be definitional} % \begin{macrocode} \newcommand{\SpecialMainMfpIndex}[3]{\@bsphack % \end{macrocode} % Here is the main index entry. % \begin{macrocode} \special@index{% \string#1\actualchar \string\verb\quotechar*\verbatimchar\string#1\verbatimchar #2 \encapchar main}% % \end{macrocode} % Here is the subsidiary index entry. % \begin{macrocode} \special@index{#3\levelchar \string#1\actualchar \string\verb\quotechar*\verbatimchar\string#1\verbatimchar \encapchar main} \@esphack} % \end{macrocode} % \end{macro} % % \begin{macro}{\DescribeRoutine} % The command |\DescribeRoutine{|\meta{name}|}| typesets a marginal heading and % an index entry for the description of a routine called \meta{name}. It % is based on the \Lpack{doc} |\DescribeMacro| command. % \begin{macrocode} \def\DescribeRoutine{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters \Describem@fpRoutine} % \end{macrocode} % \end{macro} % % \begin{macro}{\Describem@fpRoutine} % This is the macro that does the work for |\DescribeRoutine|. % \begin{macrocode} \def\Describem@fpRoutine#1{\endgroup \marginpar{\raggedleft\PrintMfpName{#1}}% \SpecialMfpIndex{#1}{\routinestring}{\routineheadname}\@esphack\ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\DescribeVariable} % The command |\DescribeVariable{|\meta{name}|}| typesets a marginal heading and % an index entry for the description of a variable called \meta{name}. It % is based on the |\DescribeRoutine| command. % \begin{macrocode} \def\DescribeVariable{\leavevmode\@bsphack\begingroup\Makem@fpPrivateLetters \Describem@fpVariable} % \end{macrocode} % \end{macro} % % \begin{macro}{\Describem@fpVariable} % This is the macro that does the work for |\DescribeVariable|. % \begin{macrocode} \def\Describem@fpVariable#1{\endgroup \marginpar{\raggedleft\PrintMfpName{#1}}% \SpecialMfpIndex{#1}{\variablestring}{\variableheadname}\@esphack\ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\SpecialMfpIndex} % The command % |\SpecialMfpIndex{|\meta{name}|}{|\meta{string}|}{|\meta{heading}|}| % writes \meta{name} to the \file{.idx} file, firstly as a `main' entry (flagged % with \meta{string}) and then as a subsidiary entry under \meta{heading}. Both % entries are treated as `usages' of the \meta{name}. % \begin{macrocode} \newcommand{\SpecialMfpIndex}[3]{\@bsphack % \end{macrocode} % Here is the main index entry. % \begin{macrocode} \index{% \string#1\actualchar \string\verb\quotechar*\verbatimchar\string#1\verbatimchar #2 \encapchar usage}% % \end{macrocode} % Here is the subsidiary index entry. % \begin{macrocode} \index{#3\levelchar \string#1\actualchar \string\verb\quotechar*\verbatimchar\string#1\verbatimchar \encapchar usage} \@esphack} % \end{macrocode} % \end{macro} % % \begin{macro}{\check@checksum} % After some experience with using \Lpack{docmfp} for code that had % no resemblence at all to \LaTeX, I found that if there were no % backslashes present, then \Lpack{doc} whined about there being no % checksum and said that the |\CheckSum| should be set to zero, which % it was. This is the relevent code from the \Lpack{doc} package. % \changes{v1.2}{2001/02/11}{Redefined the \cs{check@checksum} command} % \changes{v1.2b}{2004/05/14}{Fixed \cs{checksum} typo, thanks to Dan Luecking} % \begin{verbatim} % \def\check@checksum{\relax % \ifnum\check@sum=\z@ % \typeout{**********************************}% % \typeout{* This macro file has no checksum!}% % \typeout{* The checksum should be \the\bslash@cnt!}% % \typeout{**********************************}% % \else % \ifnum\check@sum=\bslash@cnt % \typeout{*******************}% % \typeout{* Checksum passed *}% % \typeout{*******************}% % \else % \PackageError{doc}{Checksum not passed % (\the\check@sum<>\the\bslash@cnt)}% % {The file currently documented seems to be wrong.^^J% % Try to get a correct version.}% % \fi % \fi % \global\check@sum\z@} % \end{verbatim} % For the purposes of the \Lpack{docmfp} package this needs redefining % as a zero check sum is acceptable. % \begin{macrocode} \renewcommand{\check@checksum}{\relax \ifnum\check@sum=\bslash@cnt \typeout{*******************}% \typeout{* Checksum passed *}% \typeout{*******************}% \else \PackageError{docmfp}{Checksum not passed (\the\check@sum<>\the\bslash@cnt)}% {The file currently documented seems to be wrong.^^J% Try to get a correct version.}% \fi \global\check@sum\z@} % \end{macrocode} % \end{macro} % % % % The end of this package. % \begin{macrocode} % % \end{macrocode} % % % \bibliographystyle{alpha} % % \begin{thebibliography}{GMS94} % % \bibitem[GMS94]{GOOSSENS94} % Michel Goossens, Frank Mittelbach, and Alexander Samarin. % \newblock {\em The LaTeX Companion}. % \newblock Addison-Wesley Publishing Company, 1994. % % \end{thebibliography} % % % \Finale % \PrintIndex % \endinput %% \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 \~}