diff options
author | Karl Berry <karl@freefriends.org> | 2007-12-25 19:55:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-12-25 19:55:32 +0000 |
commit | 57b6bdd7ce9155595f073c8e3c1a689a14f89e6a (patch) | |
tree | 37adee0138d0da146f5d11081b7197ff8f30079f /Master/texmf-dist/tex | |
parent | 49455a020514ef25d7ef902ed0a33348ac68cf1c (diff) |
gmdoc update (19nov07)
git-svn-id: svn://tug.org/texlive/trunk@5905 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/gmdoc/gmdoc.sty | 2635 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls | 310 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/gmdoc/gmoldcomm.sty | 92 |
3 files changed, 2045 insertions, 992 deletions
diff --git a/Master/texmf-dist/tex/latex/gmdoc/gmdoc.sty b/Master/texmf-dist/tex/latex/gmdoc/gmdoc.sty index 494b00382bc..00351067f45 100644 --- a/Master/texmf-dist/tex/latex/gmdoc/gmdoc.sty +++ b/Master/texmf-dist/tex/latex/gmdoc/gmdoc.sty @@ -16,7 +16,7 @@ %% Written by Natror (Grzegorz Murzynowski), %% natror at o2 dot pl %% -%% \copyright\,2006 by Natror (Grzegorz Murzynowski). +%% \copyright\,2006, 2007 by Natror (Grzegorz Murzynowski). %% %% This program is subject to the \LaTeX\ Project Public License. %% See \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A @@ -24,7 +24,7 @@ %% %% LPPL status: "author-maintained".\par %% -%% Many thanks to my \TeX\ Guru Marcin Woli\'nski for his \TeX nical ^^A +%% Many thanks to my \TeX\ Guru Marcin Woli\nacute ski for his \TeX nical ^^A %% support. % %\end{copyrnote} @@ -53,13 +53,15 @@ % \chschange{v0.99c}{07/3/30}{4475} % \chschange{v0.99d}{07/4/26}{4555} % \chschange{v0.99e}{2007/4/29}{4574} +% \chschange{v0.99g}{2007/11/12}{5229} +% % %^^A \docstrip %<package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{gmdoc} - [2007/04/29 v0.99e a documenting package (GM)] + [2007/11/12 v0.99h a documenting package (GM)] % % @@ -94,18 +96,22 @@ % hyperlinking of index entries, contents entries and % cross-references. % -% \begin{gmlonely} -% \subdivision{Installation} -% -% Just put the \pk{gmdoc.sty} and \pk{gmdocc.cls} somewhere in the -% \file{texmf/\:tex/\:latex} branch. Creating -% a~\file{texmf/\:tex/\:latex/\:gm} directory may be advisable if -% you consider using other packages written by me. +% The package also works with \XeTeX\ (switches automatically). % -% You should also install \pk{gmverb.sty}, \pk{gmutils.sty} -% and \pk{gmiflink.sty} (e.g., put them into the same \file{gm} +% \begin{gmlonely} +% \subdivision{Installation} Unpack the \file{gmdoc-tds.zip} archive +% (this is an archive conforming the \acro{TDS} standard, see +% \file{CTAN/tds/tds.pdf})% in a~\file{texmf} directory +% or put the \pk{gmdoc.sty}, \pk{gmdocc.cls} and \pk{gmoldcomm.sty} +% somewhere in the \file{texmf/\:tex/\:latex} branch on your own. +% (Creating a~\file{texmf/\:tex/\:latex/\:gm} directory may be +% advisable if you consider using other packages written by me.) +% +% You should also install \pk{gmverb.sty}, \pk{gmutils.sty} and +% \pk{gmiflink.sty} (e.g., put them into the same \file{gm} % directory). These packages are available on CTAN as separate -% \file{.zip} archives. +% \file{.zip} archives also in \acro{TDS}-compliant \pk{zip} +% archives. % % Moreover, you should put the \file{gmglo.ist} file, a MakeIndex % style for the changes' history, into some \file{texmf/\:makeindex} @@ -119,14 +125,15 @@ % \subdivision{Contents of the \pk{gmdoc.zip} Archive} % % The distribution of the \pk{gmdoc} package consists of the -% following six files. +% following six files and a~\acro{TDS}-compliant archive. % \begin{verse} % \pk{gmdoc.sty}\\ % \pk{gmdocc.cls}\\ % \pk{gmglo.ist}\\ % \pk{README}\\ % \pk{gmdocDoc.tex}\\ -% \pk{gmdocDoc.pdf} +% \pk{gmdocDoc.pdf}\\ +% \pk{gmdoc.tds.zip} % \end{verse} % % @@ -135,10 +142,10 @@ % % The last of the above files (the \pk{.pdf}, i.e., \emph{this % file}) is a~documentation compiled from the \pk{.sty} and -% \pk{.cls} files by running \LaTeX\ on the \file{gmdocDoc.tex} +% \pk{.cls} files by running \XeLaTeX\ on the \file{gmdocDoc.tex} % twice, then MakeIndex on the \file{gmdocDoc.idx} and -% \file{gmdocDoc.glo} files, and then \LaTeX\ on \file{gmdocDoc.tex} -% once more. +% \file{gmdocDoc.glo} files, and then \XeLaTeX\ on \file{gmdocDoc.tex} +% once more. (Using \LaTeX\ instead of \XeLaTeX\ should do, too.) % % MakeIndex shell commands: %\begin{verbatim} @@ -188,20 +195,21 @@ % % As a~bonus and example of \docfm-compatibility % there are driver files included -% (cf.\ Palestrina, \textit{Missa papae Marceli} ;-): +% (cf.\ Palestrina, \textit{Missa papae Marcelli} ;-): % % \begin{verse} % \pk{source2e_gmdoc.tex}\\ % \pk{docstrip_gmdoc.tex}\\ % \pk{doc_gmdoc.tex} % -% \pk{oldcomm.sty}\\ +% \pk{gmoldcomm.sty}\\ % (\pk{gmsource2e.ist} is generated from \pk{source2e_gmdoc.tex})\\ % \end{verse} % % These drivers typeset the respective files from the -%\[\hbox{\file{ .../texmf-dist/source/latex/base}}\] -% directory of the \TeX Live2005 distribution. +%\[\hbox{\file{.../texmf-dist/source/latex/base}}\] +% directory of the \TeX Live2005 distribution (they only read that +% directory). % % Probably you should redefine the |\BasePath| macro in them % so that it points that directory on your computer. @@ -277,7 +285,7 @@ % is a~character the |\catcode| of which is 14 usually i.e., when the % file works; if you don't play with % the |\catcode|s, it's just the |%|. When the file is documented with -% \gmdoc, such a~char is re|\catcode|d and its r\^ole is else: it +% \gmdoc, such a~char is re|\catcode|d and its r\ocircum le is else: it % becomes the \textbf{code delimiter}. % % A~line containing any \TeX\ code (not commented out) will be called @@ -320,10 +328,13 @@ % is in \gmdoc\ active and defined to gobble the stuff between itself % and the next line end. % -% Note, however, that both |^^A| and |^^B| are usually macros in -% \gmdoc\ and the text being gobbled is their argument so it has to be -% balanced of braces and, if it occures inside an |\if...|, it has to -% have all |\if...|s coupled with |\else|s and |\fi|s. +% Note that |^^A| behaves much like comment char +% although it's active in fact: it re|\catcode|s the special +% characters including |\|, |{| and |}| +% so you don't have to worry about unbalanced braces or \cs{if}s in +% its scope. But |^^B| doesn't re|\catcode| anything (it would be +% useless in an argument) so any text between |^^B| and line end has +% to be balanced. % % However, it may be a~bit confusing % for someone acquainted with the \docfm\ conventions. If you don't @@ -402,9 +413,11 @@ % % When using |\OldDocInput|, you have to wrap all the code in % \TextUsage*{macrocode} environments, which is not necessary when you -% use |\DocInput|. Moreover, with |\OldDocInput| the -% \env{macrocode(*)} environments require to be ended with -% |% \end{macrocode(*)}|. +% use |\DocInput|. Moreover, with |\OldDocInput| the\ +% \env{mac\-ro\-co\-de(*)} environments require to be ended with +% |% \end{macrocode(*)}| as in \docfm. (With |\DocInput| you are +% not obliged to precede |\end{macrocode(*)}| with The +% Four Spaces.) % % \stanza % If you wish to document many files in one document, you are @@ -512,7 +525,7 @@ % % \stanza % If you need to add something at the beginning of the input of file, -% there's the \TextUsage\AtBegInput\ declaration that takes one and +% there's the \TextUsage\AtBegInput\ declaration that takes one % mandatory argument which is the stuff to be added. This declaration % is global. It may be used more than one time and the arguments of % each occurrence of it add up and are put at the beginning of input @@ -555,7 +568,7 @@ % to reset the counter of lines \himher self, e.g., when \heshe\ % documents many source files in one document. Then \heshe\ may wish % the line numbers to be reset with every |{section}|'s turn for -% instance. This is the r\^ole of the \TextUsage*{uresetlinecount} +% instance. This is the r\ocircum le of the \TextUsage*{uresetlinecount} % option, which seems to be a~bit obsolete however, since the % \TextCommonIndex\DocInclude|\DocInclude| command takes care of % a~proper reset. @@ -601,7 +614,7 @@ % classes it's allright but not all the classes support marginpars. % That is the reason why this package enables marginparing when in % standard classes, enables or disables it due to the respective option -% when with Marcin Woli\'nski's classes and in any case provides the +% when with Marcin Woli\nacute ski's classes and in any case provides the % options \TextUsage*{withmarginpar} and \TextUsage*{nomarginpar}. So, in % non-standard classes the default behaviour is to disable marginpars. % If the marginpars are enabled in \pk{gmdoc}, it will put marked @@ -637,7 +650,7 @@ % |\mylittlemacro|. % % As the standard \LaTeX\ one, my |\verb| issues an error when a~line -% end occures in its scope. But, if you'd like to allow line ends in +% end occurs in its scope. But, if you'd like to allow line ends in % short verbatims, there's the \TextUsage\verbeolOK\ declaration. The % plain |\verb| typesets spaces blank and |\verb*| makes them visible, % as in the standard version(s). @@ -698,9 +711,163 @@ % define the default colour of the hyperlinks, seems to be standard % already, and \pk{makeidx}. % -% -% \subdivision[Macros for Marking the Macros]{^^B -% \gmhypertarget{Macros for Marking the Macros}} +% \subdivision[Automatic marking of definitions]{^^B +% \gmhypertarget{Automatic marking of definitions}} +% \gmdoc\ implements automatic detection of a~couple of +% definitions. By default it detects all occurrences of the following +% commands in the code: +%\begin{enumerate}^^B +%\item \label{def type} +% |\def|, +% |\newcount|, +% |\newdimen|, +% |\newskip|, +% |\newif|, +% |\newtoks|, +% |\newbox|, +% |\newread|,\\ +% |\newwrite|, +% |\newlength|, +% |\newcommand(*)|, +% |\renewcommand(*)|, +% |\providecommand(*)|, +% |\DeclareRobustCommand(*)|, +% |\DeclareTextCommand(*)|,\\ +% |\DeclareTextCommandDefault(*)|, +% +% \item +% |\newenvironment(*)|, +% |\renewenvironment(*)|, +% |\DeclareOption(*)|, +%^^A~ |%\DeclareDefining*\@namedef| +% +% \item \label{newctr} +% |\newcounter|, +% +% \xdef\gmdenumi{\arabic{enumi}} +% \end{enumerate} +% +% of the \pk{xkeyval} package: +% \begin{enumerate}\setcounter{enumi}{\gmdenumi}^^B +% \item\label{dk type} |\define@key|, +% |\define@boolkey|, +% |\define@choicekey|, +% |\DeclareOptionX|, +% +% \xdef\gmdenumi{\arabic{enumi}} +% \end{enumerate} +% +% and of the \pk{kvoptions} package: +% \begin{enumerate}\setcounter{enumi}{\gmdenumi}^^B +% \item \label{DSOption} +% |\DeclareStringOption|, +% |\DeclareBoolOption|, +% |\DeclareComplementaryOption|,\\ +% |\DeclareVoidOption|. +% \end{enumerate}\par +% +% What does `detects' mean? It means that the main argument of +% detected command will be marked as defined at this point, +% i.e.\ thrown to a~margin note and indexed with a~`definition' entry. +% Moreover, for the definitions \ref*{newctr}--\ref*{DSOption} an +% alternate index entries will be created: of the CSs uderlying those +% definitions, e.g. |\newcounter{foo}| in the +% code will result in indexing |foo| and |\c@foo|. +% +% If you want to add detection of a~defining command not listed above, +% use the \TextUsage\DeclareDefining\ declaration. It comes in two +% flavours: `saut\eacute' and with star. The `saut\eacute' version +% (without star and without an optional argument) declares a~defining +% command of the kind of |\def| and |\newcommand|: its main argument, +% whether wrapped in braces or not, is a~CS. The starred version (without +% the optional argument) declares a~defining command of the kind of +% |\newenvironment| and |\DeclareOption|: whose main mandatory +% argument is text. Both versions provide an optional argument in +% which you can set the keys. +% +% Probably the most important key is \TextUsage*{type}. Its default +% value is |cs| and that is set in the `saut\eacute' version. Another +% possible value is |text| and that is set in the starred version. You +% can also set three other types (any keyval setting of the type +% overrides the default and `starred' setting): |dk|, |dox| or |kvo|. +% +% |dk| stands for |\define@key| and is the type of \pk{xkeyval} +% definitions of keys (group \ref{dk type} commands). When detected, +% it scans furher code for an optional \arg[KVprefix], mandatory +% \arg{KVfamily} and mandatory \arg{key name}. The default \<KVprefix> +% is |KV|, as in \pk{xkeyval}. +% +% |dox| stands for |\DeclareOptionX| and launches scanning for an +% optional \arg[KVprefix], optional |<|\<KVfamily>|>| and mandatory +% \arg{option name}. Here the default \<KVprefix> +% is also |KV| and the default \<KVfamily> is the input file name. If +% you want to set another default family (e.g. if the code of +% \file{foo.sty} actually is in file \file{bar.dtx}), use +% \TextUsage\DeclareDOXHead\arg{KVfamily}. This declaration has an +% optional first argument that is the default \<KVprefix> for +% |\DeclareOptionX| definitions. +% +% |kvo| stands for the \pk{kvoptions} package by Heiko Oberdiek. This +% package provides a~handful of option defining commands (the group +% \ref{DSOption} commands). Detection of such a~command launches +% a~scan for mandatory \arg{option name} and alternate indexing of +% a~CS |\|\<KVOfamily>|@|\<optionname>. The default \<KVOfamily> is +% the input file name. Again, if you want to set something else, you +% are given the \TextUsage\DeclareKVOFam\arg{KVOfamily} that sets the +% default family (and prefix: \<KVOfamily>|@|) for all the commands of +% group \ref{DSOption}. +% +% Next key recognized by |\DeclareDefining| is \TextUsage*{star}. It +% determines whether the starred version of a~defining command should +% be taken into account. For example, |\newcommand| should be +% declared with |[star=true]| while |\def| with +% |[star=false]|. You can also write just |[star]| instead of +% |[star=true]|. It's the default if the |star| key is omitted. +% +% There are also \TextUsage*{KVpref} and \TextUsage*{KVfam} keys if +% you want to redeclare the \pk{xkeyval} definitions with another +% default prefix and family. +% +% For example, if you wish |\@namedef| to be detected (the original +% \LaTeX\ version), declare +% \[|\DeclareDefining*[star=false]\@namedef|\] or +% \[|\DeclareDefining[type=text,star=false]\@namedef|\] (as stated +% above, |*| is equivalent |[type=text]|). +% +% On the other hand, if you want some of the commands listed above +% \emph{not} to be detected, write \TextUsage\HideDefining\<command> +% in the commentary. Later +% you can resume detection of it with +% \TextUsage\ResumeDefining\<command>. +% +% If you wish to turn entire detection mechanism off, write +% \TextUsage\HideAllDefining\ in the narration layer. Then you can +% resume detection with \TextUsage\ResumeAllDefining. +% +% The basic definition command, |\def|, seems to me a~bit +% controversial. Definitely \emph{not always} it defines important +% macros. But first of all, if you |\def| a~CS excluded from indexing (see +% section \gmiflink{Index Ex/Inclusions}), it will not be marked even +% if detection of |\def| is on. But if the |\def|'s argument is not +% excluded from indexing and you still don't want it to be marked at +% this point, in the commentary before this |\def| write +% \TextUsage\UnDef. That will turn off the detection just for this one +% occurrence of |\def|. +% +% If you don't like |\def| to be detected more times, you may write +% |\HideDefining\def| of course, but there's a~shorthand for this: +% \TextUsage\HideDef. To resume detection of |\def| you are provided +% also a~shorthand, \TextUsage\ResumeDef\ (but |\ResumeDefining\def| +% also works). +% +% If you define things not with easily detectable commands, you can +% mark them `manually', with the |\Define| declaration described in +% the next section. +% +% +% +% \subdivision[Manual Marking the Macros and Environments]{^^B +% \gmhypertarget{Manual Marking the Macros and Environments}} % % The concept (taken from \docfm ) is to index virtually all the % control sequences occurring in the code. \gmdoc\ does that by @@ -710,7 +877,8 @@ % The next concept (also taken from \docfm) is to ditinguish some % occurrences of some control sequences by putting such a~sequence % into a~marginpar and by special formatting of its index entry. That -% is what I~call marking the macros. \gmdoc\ provides also +% is what I~call marking the macros. +% \gmdoc\ provides also % a~possibility of analogous marking for the environments' names and % other sequences such as |^^A|. % @@ -726,7 +894,7 @@ % or in the commentary. But all the definitions appear in the code, % I~suppose. Therefore the `def' marking macro is provided only for % the code case. So we have\gmhypertarget[textUsage]{} the -% \TextUsage\CodeDefine, \TextUsage\CodeUsage\ and +% \TextUsage\Define, \TextUsage\CodeUsage\ and % \TextUsage\TextUsage\ commands. % % All three take one argument and all three may be starred. The @@ -739,31 +907,32 @@ % precisely, they execute \TextUsage\MakePrivateLetters\ whatever % it does: At the default settings this command makes |*| % a~letter, too, so a~starred version of a~command is a~proper argument -% to any of the three `|\...Define/Usage| commands unstarred. +% to any of the three commands unstarred. % -% The two |\Code...| commands, if unstarred, mark the next scanned -% occurrence of their argument in the code. (By `scanned occurrence' -% I~mean a~situation of the CS having been scanned in the +% The |\Define| and |\CodeUsage| commands, if unstarred, mark the next +% scanned occurrence of their argument in the code. (By `scanned +% occurrence' I~mean a~situation of the CS having been scanned in the % code which happens iff its name was preceded by the char declared as -% |\CodeEscapeChar|). The starred versions of those commands -% mark just the next codeline and don't make \TeX\ looks for the -% scanned occurrence of their argument (which would never happen if -% the argument is not a~CS). Therefore, if you want to mark -% a~definition of an environment \env{foo}, you should put -% \[|%\CodeDefine*{foo}|\] +% |\CodeEscapeChar|). The starred versions of those commands mark just +% the next codeline and don't make \TeX\ looks for the scanned +% occurrence of their argument (which would never happen if the +% argument is not a~CS). Therefore, if you want to mark a~definition +% of an environment \env{foo}, you should put +% \[|%\Define*{foo}|\] % right before the code line % \[|\newenvironment{foo}{%|\]^^A] -% i.e., not separated by any code line. The starred versions of +% i.e., not separated by another code line. The starred versions of % the |\Code...| commands are also intended to mark implicit -% definitions of macros, e.g., |\CodeDefine*\@foofalse| before +% definitions of macros, e.g., |\Define*\@foofalse| before % the line % \[|\newif\if@foo|.\] % -% They both are |\outer|. +% They both are |\outer| to dicourage their use inside macros because +% they actually re|\catcode| before taking their arguments. % % The |\TextUsage| (one-argument) command is intended to mark usage of % a~verbatim occurrence of a~\TeX\ object in the commentary. Unlike -% the two |\Code...|s, it typesets its argument which means among others\ that +% |\CodeUsage| or |\Define|, it typesets its argument which means among others\ that % the marginpar appears usually at the same line as the text you % wanted to mark. This command also has the starred version primarily % intended for the environments names, and secondarily for @@ -808,7 +977,7 @@ % \stanza % On the other hand, if you don't want to put a~CS (or another % verbatim text) in a~marginpar but only to index it, then there are -% \TextUsage\CodeDefIndex\ and \TextUsage\CodeUsgIndex\ to declare +% \TextUsage\DefIndex\ and \TextUsage\CodeUsgIndex\ to declare % special formatting of an entry. The unstarred versions of these % commands look for their argument's scanned occurrence in the code % (the argument should be a~CS), and the starred ones just take the @@ -823,7 +992,7 @@ % a~not scanned stuff as a~usual entry? The \TextUsage\CodeCommonIndex*\ % comes in rescue, starred for the symmetry with the two previous commands % (without |*| it just gobbles -% it's argument). It's |\outer|. +% it's argument---it's indexed automatically anyway). It's |\outer|. % % Similarly, to index a~\TeX\ object occurring verbatim in the narrative, you % have \TextUsage\TextUsgIndex\ and \TextUsage\TextCommonIndex\ @@ -857,7 +1026,7 @@ % \env{evironment}.) % % -% \subdivision{Index Ex/Inclusions} +% \subdivision[Index Ex/Inclusions]{\gmhypertarget{Index Ex/Inclusions}} % % It's\label{IEIDeclarations} understandable\footnote{After reading ^^B( % \docfm's documentation ;-)\,.} that you don't @@ -910,7 +1079,7 @@ % ^^A due to the doctex mode who saw it and coloured all after with % ^^A~salmon. % the closing line |%|\<END-TAG> will be not. It doesn't seem to be -% hard to implement, I~only receive some message it's really useful +% hard to implement, if I~only receive some message it's really useful % for someone. % %^^A If you use the \TextUsage*{macrocode} environment, you don't have to @@ -975,6 +1144,23 @@ % mechanism is used for the change entries.) % \end{quotation} % +% In \gmdoc\ (unless you turn definitions detection off), you can put +% |\changes| after the line of definition of a~command to set the +% default argument of |\changes| to that command. For example, +%\begin{verbatim} +% \newcommand*\dodecaphonic{...} +% % \changes{v0.99e}{2007/04/29}{renamed from \cs{DodecaPhonic}} +%\end{verbatim} +% results with a~history (sub)entry: +% \deksmallskip +% v0.99e\par\hspace*{\parindent} (\dots)\par \hspace*{\parindent} +% \cs{dodecaphonic}: \par\hspace*{2\parindent} renamed from +% \cs{DodecaPhonic}, \textit{\arabic{page}} +% \deksmallskip +% +% Such a~setting is in force till the next definition and +% \emph{every} detected definition resets it. +% % In \gmdoc\ |\changes| is |\outer|. % % \stanza @@ -986,7 +1172,7 @@ % is defined as % \begin{verbatim} % \def\actualchar{=} \def\quotechar{!}% -% \def\levelchar{>} \edef\encapchar{\twelveclub} +% \def\levelchar{>} \edef\encapchar{\xiiclub} %\end{verbatim} % % Only if you @@ -1152,7 +1338,7 @@ % Analogously but for a~slightly different purpose, the % \TextUsage\AddtoPrivateOthers\ macro is provided here. It adds its % argument, which is supposed to be a~one-char CS, to the -% |\doprivateothers| list, whose r\^ole is to allow some special chars +% |\doprivateothers| list, whose r\ocircum le is to allow some special chars % to appear in the marking commands' arguments (the commands described % in section \gmiflink{Macros for Marking the Macros}). The default % contents of this list is | | (the space) and |^| so you may mark the @@ -1271,7 +1457,7 @@ % % \stanza % There's a~quadratus of commands taken from \docfm: -% \TextUsage\StopEventually, \TextUsage\Finale, +% \TextUsage\StopEventually, \TextUsage\Finale,\\ % \TextUsage\AlsoImplementation\ and \TextUsage\OnlyDescription\ that % should be % explained simultaneously (in a~polyphonic song @@ -1284,14 +1470,24 @@ % stuff to be executed anyway>|}| and |\Finale| should be typed % at the end of file. Then |\OnlyDescription| defines % |\StopEventually| to expand to its argument followed by |\endinput| -% and |\AlsoImplementation| defines |\StopEventually| to do nothing +% and\\ |\AlsoImplementation| defines |\StopEventually| to do nothing % but pass its argument to |\Finale|. % % % \subdivision{The Narration Macros} % % To print the control sequences' names you have the \TextUsage\verb\ macro and -% its `shortverb' version whatever you define. But they won't work if +% its `shortverb' version whatever you define (see the \pk{gmverb} +% package). +% +% For short verbatim texts in the inline comments \pk{gmdoc} provides +% the \TextUsage\inverb\<charX>\dots\<charX> (the name stands for +% `inline verbatim') command that redefines the \pk{gmverb} breakables +% to break with |%| at the beginning of the +% lower line to avoid mistaking such a~broken verbatim commentary text +% for the code. +% +% But nor |\verb(*)| neither |\inverb| will work if % you put them in an argument of another macro. For such a~situation, % or if you just prefer, \gmdoc\ (\pk{gmutils}) provides a~robust command % \TextUsage\cs, which takes one obligatory argument, the macro's name @@ -1307,6 +1503,15 @@ % verbatim and without a~backslash, e.g., |\env{an environment}| % produces \env{an environment}. % +% And for line breaking at |\cs| and |\env| there is +% \TextUsage\nlpercent\ to ensure |%| if the line breaks at the +% beginning of a~|\cs| or |\env| and \TextUsage\+ to use inside their +% argument for a~discretionary hyphen that'll break to - at the end of +% the upper line and |%| at the beginning of the lower line. By +% default hyphenation of |\cs| and |\env| arguments is off, you can +% allow it only at |\-| or |\+|. +% +% \stanza % To print packages' names sans serif there is a~\TextUsage\pk\ % one-argument command, and the \TextUsage\file\ command intended for % the filenames. @@ -1320,10 +1525,9 @@ % I~wish my self-documenting code to be able to be typeset each % package separately or several in one document. Therefore I~need some % `flexible' sectioning commands and here they are: -% \TextUsage\division\ and \TextUsage\subdivision\ so far, that by -% default are |\let| to be |\section| and |\subsection| if such -% commands are defined in the documentclass. (If not, |\division| and -% |\subdivision| are |\let| to be |\relax|.) +% \TextUsage\division, \TextUsage\subdivision\ and +% \TextUsage\subsubdivision\ so far, that by default are |\let| to be +% |\section|, |\subsection| and |\subsubsection| respectively. % % \stanza % One more kind of flexibility is to allow using \pk{mwcls} or the @@ -1360,7 +1564,8 @@ % skipped in further chapters thanks to it. % % \stanza -% \gmdoc\ provides some \TeX-related logos:\\ +% \gmdoc\ (\pk{gmutils}, to be precise) provides some \TeX-related +% logos:\\ % \Describe\AmSTeX typesets \AmSTeX,\\ % \Describe\BibTeX\BibTeX,\\ % \Describe\SliTeX\SliTeX,\\ @@ -1368,13 +1573,13 @@ % \Describe\Web\Web,\\ % \Describe\TeXbook\TeXbook,\par^^A~without par there raised error % ^^A `too many unprocessed floats'. +% \noindent\Describe\TB\TB\par % \noindent\Describe\eTeX\eTeX,\\ % \Describe\pdfeTeX\pdfeTeX\\ % \Describe\pdfTeX\pdfTeX\\ -% \Describe\XeTeX\XeTeX\ (the first |E| will be reversed iff the -% \pk{graphics} package is loaded) and\\ +% \Describe\XeTeX\XeTeX\ (the first |E| will be reversed if the +% \pk{graphics} package is loaded or \XeTeX\ is at work) and\\ % \Describe\LaTeXpar\LaTeXpar.\par -% (The last logo is defined in \pk{gmutils}.) % % \noindent\Describe\ds\ds\ not quite a~logo, but still convenient. % @@ -1386,7 +1591,7 @@ % % To put an arbitrary text into a~marginpar and have it flushed right % just like the macros' names, you are provided the -% \TextUsage\gmdmarginpar\ macro that takes one and mandatory argument +% \TextUsage\gmdmarginpar\ macro that takes one mandatory argument % which is the contents of the marginpar. % % \stanza @@ -1408,12 +1613,7 @@ % by \cs{Pro\-vid\-es\-Class/Pack\-age/Fi\-le} declarations. The % information of the file you process with \gmdoc\ % is provided (and therefore getable) if the file is also loaded (or -% the |\Provide...| line occures in a~|\StraightEOL| scope). -% -% If you don't load the file the version of which you'd like to get, -% you may write \TextUsage\FileInfo\ in the comment layer, before the -% line containing |\ProvidesPackage/Class| and the file info will be -% written to the \file {.aux} file. +% the |\Provide...| line occurs in a~|\StraightEOL| scope). % % If the input file doesn't contain |\Provides...| in the code layer, % there are commands \TextUsage\ProvideFileInfo|{|\<file name with ^^B @@ -1434,7 +1634,7 @@ % % \stanza % If you declare the code delimiter other than |%| and then want |%| -% back, you may write \TextUsage\CDPerc\ instead of |\CodeDelim\%|. +% back, you may write \TextUsage\CDPerc\ instead of |\CodeDelim*\%|. % % If you like |&| as the code delimiter (as I~did twice), you may write % \TextUsage\CDAnd\ instead of |\CodeDelim\&|. @@ -1486,7 +1686,7 @@ % ended with |% \end{macrocode(*)}|. % % The default behaviour of \env{macrocode(*)} with the `new' input -% commands is different however. Remember at te `new' fashion the code +% commands is different however. Remember that in the `new' fashion the code % and narration layers philosophy is in force and that is sustained % within \env{macrocode(*)}. Which means basically that with `new' % settings when you write @@ -1519,9 +1719,10 @@ % % \division{The Code} % -%\iffalse For debug -\catcode`\^^C9\relax -% \fi +% For debug +\catcode`\^^C=9\relax +% we set the |\catcode| of this char to \catactive\ in the comment +% layer. % \catcode`\^^C\active % % \changes[^^C]{v0.98g}{06/10/10}{recatcoded for debug: in the working @@ -1568,81 +1769,75 @@ % %\subdivision{The Package Options} % +\RequirePackage{xkeyval}% we need key-vals later, but maybe we'll make +% the option key-val as well. +% % Maybe someone wants the code lines not to be numbered. -% \CodeDefIndex\if@linesnotnum -% \CodeDefIndex*\@linesnotnumtrue -% \CodeDefIndex*\@linesnotnumalse + \newif\if@linesnotnum -% \CodeDefine*{linesnotnum} + \DeclareOption{linesnotnum}{\@linesnotnumtrue} % And maybe he or she wishes to declare resetting the line counter % along with some sectioning counter him/herself. -% \CodeDefIndex\if@uresetlinecount -% \CodeDefIndex*\@uresetlinecounttrue -% \CodeDefIndex*\@uresetlinecountfalse + \newif\if@uresetlinecount -% \CodeDefine*{uresetlinecount} + \DeclareOption{uresetlinecount}{\@uresetlinecounttrue} % And let the user be given a~possibility to count the comment % lines. -% \CodeDefIndex\if@countalllines + \newif\if@countalllines -% \CodeDefine*{countalllines} + \DeclareOption{countalllines}{\@countalllinestrue} % Unlike in \docfm , indexing the macros is the default and the % default reference is the code line number. -% \CodeDefIndex\if@noindex -% \CodeDefIndex*\@noindextrue -% \CodeDefIndex*\@noindexfalse + \newif\if@noindex -% \CodeDefine*{noindex} + \DeclareOption{noindex}{\@noindextrue} -% \CodeDefIndex\if@pageindex -% \CodeDefIndex*\@pageindextrue -% \CodeDefIndex*\@pageindexfalse + \newif\if@pageindex -% \CodeDefine*{pageindex} + \DeclareOption{pageindex}{\@pageindextrue} % It would be a~great honour to me if someone would like to document % \LaTeX\ source with this humble package but I~don't think it's % really probable so let's make an option that'll switch index exclude % list properly (see sec.\ \gmiflink{Index Exclude List}). -% \CodeDefIndex\if@indexallmacros -% \CodeDefIndex*\@indexallmacrostrue -% \CodeDefIndex*\@indexallmacrosfalse + \newif\if@indexallmacros -% \CodeDefine*{indexallmacros} + \DeclareOption{indexallmacros}{\@indexallmacrostrue} % Some document classes don't support marginpars or disable them by -% default (as my favourite Marcin Woli\'nski's classes). +% default (as my favourite Marcin Woli\nacute ski's classes). % -% \CodeDefIndex\if@marginparsused % \changes{v0.98e}{06/09/23}{wrapped in \cs{@ifundefined} (a~bug fix: % before the bare \cs{newif} falsified the \cs{if@marginparsused} % switch when it had been defined and set True by the \pk{mwart} % class.)} -% \CodeDefIndex*\@marginparsusedtrue -% \CodeDefIndex*\@marginparsusedfalse + \@ifundefined{if@marginparsused}{\newif\if@marginparsused}{} % This switch is copied from \pk{mwbk.cls} for compatibility with % it. Thanks to it loading an \pk{mwcls} with |[withmarginpar]| option % shall switch marginpars on in this package, too. % % To be compatible with the standard classes, let's |\let|: + \@ifclassloaded{article}{\@marginparsusedtrue}{} %\label{mparclause1} + \@ifclassloaded{report}{\@marginparsusedtrue}{} + \@ifclassloaded{book}{\@marginparsusedtrue}{} % \label{mparclause2} And if you don't use \pk{mwcls} nor standard -% classes, then you have the options:\CodeDefine*{withmarginpar} +% classes, then you have the options:\Define*{withmarginpar} \DeclareOption{withmarginpar}{\@marginparsusedtrue} -%\CodeDefine*{nomarginpar} + \DeclareOption{nomarginpar}{\@marginparsusedfalse} % The order of the above conditional switches and options is significant. % Thanks to it the options are available also in the @@ -1651,11 +1846,10 @@ % \stanza % To make the code spaces blank (they are visible by default except % the leading ones). -% \CodeDefIndex\if@codespacesblank + \newif\if@codespacesblank -% \CodeDefine*{codespacesblank} -\DeclareOption{codespacesblank}{\@codespacesblanktrue} +\DeclareOption{codespacesblank}{\@codespacesblanktrue} \ProcessOptions @@ -1665,7 +1859,7 @@ % We require another package of mine that provides some tricky macros % analogous to the \LaTeX\ standard ones, such as |\newgif| and % |\@ifnextcat|. -\RequirePackage{gmutils}[2007/04/24] +\RequirePackage{gmutils}[2007/11/09] % A~standard package for defining colours, \RequirePackage{color} @@ -1677,12 +1871,18 @@ % options, we do, with \emph{ours}. If \heshe\ has % done it, we change only the links' colour. % -% \changes{v0.97}{06/09/04}{linkcolor made deep blue} +% \changes[hyperref]{v0.97}{06/09/04}{linkcolor made deep blue} +% \changes[hyperref]{v0.99g}{2007/10/30}{added bypass of encoding for loading +% \pk{url}} + +\@ifXeTeX{\XeTeXdefaultencoding "cp1250"}{} \@ifpackageloaded{hyperref}{\hypersetup{colorlinks=true, linkcolor=deepblue, urlcolor=blue, filecolor=blue}}{% \RequirePackage[colorlinks=true, linkcolor=deepblue, urlcolor=blue, filecolor=blue, pdfstartview=FitH, pdfview=FitBH, - pdfpagemode=None]{hyperref}} + \@ifXeTeX{xetex,}{} + pdfpagemode=UseNone]{hyperref}} +\@ifXeTeX{\XeTeXdefaultencoding "utf-8"}{} % Now a~little addition to \pk{hyperref}, a~conditional hyperlinking % possibility with the |\gmhypertarget| and |\gmiflink| macros. It @@ -1690,7 +1890,7 @@ \RequirePackage{gmiflink} % And a~slight redefinition of \env{verbatim}, |\verb(*)| and % providing of |\MakeShortVerb(*)|. -\RequirePackage{gmverb}[2007/04/24] +\RequirePackage{gmverb}[2007/11/09] \if@noindex \AtBeginDocument{\gag@index}% for the latter macro see line @@ -1712,7 +1912,7 @@ % tricks e.g.\ for the \env{oldmc} environment. % % If you want to change the verb `hyphen', there is the -% |\VerbHyphen\|\<char> +% |\VerbHyphen\|\<one char> % declaration provided by \pk{gmverb}. % % \changes{v0.98c}{06/9/8}{\cs{CodeDelim} renamed from a~rather confusing @@ -1728,7 +1928,7 @@ % \changes{v0.99a}{06/12/1}{split into the starred and unstarred % versions} % -% \CodeDefine\CodeDelim \CodeDefine\code@delim +% \Define\code@delim \def\CodeDelim{\@ifstar\Code@Delim@St\Code@Delim} \def\Code@Delim#1{% @@ -1745,42 +1945,42 @@ % a~code delimiter. I~don't think it \emph{really} to be a~limitation. % % And let's assume you do as we all do: -\CodeDelim\% +\CodeDelim*\% % We'll play with |\everypar|, a~bit, and if you use such things as -% the |{itemize}| environment, an error would occure if we didn't +% the |{itemize}| environment, an error would occur if we didn't % store the previous value of |\everypar| and didn't restore it at % return to the narration. So let's assign a~|\toks| list to store the -% original |\everypar| -% \CodeDefIndex\gmd@preverypar +% original |\everypar|: + \newtoks\gmd@preverypar -% \CodeDefIndex\settexcodehangi \newcommand*\settexcodehangi{% \hangindent=\verbatimhangindent \hangafter=\@ne}% we'll use % it in the inline comment case. |\verbatimhangindent| is provided by the % \pk{gmverb} package and\equals3\,em by default. -% \CodeDefIndex\@@settexcodehangi +% \DefIndex\@@settexcodehangi \@ifdefinable\@@settexcodehangi{\let\@@settexcodehangi=\settexcodehangi} %^^A~\gmdeverycodeline{\@@settexcodehangi} % We'll play a~bit with |\leftskip|, so let the user have a~parameter % instead. For normal text (i.e.\ the comment): -% \CodeDefine\TextIndent + \newlength\TextIndent -% I~assume it's originally equal |\leftskip|, i.e.\ |\z@|. And for +% I~assume it's originally equal to |\leftskip|, i.e.\ |\z@|. And for % the \TeX\ code: +% \HideAllDefining \newlength\CodeIndent -%\label{CodeIndent} -% \CodeDefine\CodeIndent +% \label{CodeIndent} +% \Define\CodeIndent \CodeIndent=1,5em\relax % And the vertical space to be inserted where there are blank lines in the % source code: \@ifundefined{stanzaskip}{\newlength\stanzaskip}{} % I~use |\stanzaskip| in \pk{gmverse} package and -% derivates for typesetting poetry. A~computer program code \emph{is} +% derivatives for typesetting poetry. A~computer program code \emph{is} % poetry. -% \CodeDefine\stanzaskip +% \Define\stanzaskip \stanzaskip=\medskipamount \advance\stanzaskip by-.25\medskipamount% to preserve the stretch- and % shrinkability.\par @@ -1791,21 +1991,22 @@ \newskip\CodeTopsep \newskip\MacroTopsep -% And let's set them. For the \ae sthetical +% And let's set them. For \ae sthetic % minimality\StraightEOL\footnote{The terms `minimal' and `minimalist' % used in \gmdoc\ are among others\ inspired by the \emph{South Park} % cartoon's episode \emph{Mr.\ Hankey The~Christmas (\dots)}\/ in % which `Philip Glass, a~Minimalist New York composer' appears in % a~`non-denominational non-offensive Christmas play' ^^A( % ;-)\,. (Philip Glass composed the music to the \emph{Qatsi} -% trilogy among others)}\QueerEOL\ let's unify them and other most important +% trilogy among others)}\QueerEOL\ let's unify them and the other most important % vertical spaces used in \gmdoc. I~think a~macro that gathers all % these assignments may be handy. -% \CodeDefine\MacroTopsep -% \CodeDefine\CodeTopsep -% \CodeDefine\UniformSkips +% \ResumeAllDefining +% \Define\MacroTopsep +% \Define\CodeTopsep +% \Define\UniformSkips \def\UniformSkips{%\label{UniformSkips} - % \CodeDefine\CodeTopsep \CodeDefine\MacroTopsep + % \Define\CodeTopsep \Define\MacroTopsep \CodeTopsep=\stanzaskip \MacroTopsep=\stanzaskip \abovedisplayskip=\stanzaskip @@ -1838,7 +2039,6 @@ % declaration. That shall discard the unwanted setting already placed % in the |\begin{document}| hook. % -% \CodeDefine\NonUniformSkips \newcommand*\NonUniformSkips{\@relaxen\UniformSkips} % Why do we launch |\UniformSkips| twice then? The first time is % to set all the \gmdoc-specific glues \emph{somehow}, which allows @@ -1849,14 +2049,12 @@ % And let's define a~macro to insert a~space % for a~chunk of documentation, e.g., to mark the beginning of new % macro's explanation and code. -% \CodeDefine\chunkskip \newcommand*\chunkskip{% \skip0=\MacroTopsep \if@codeskipput\advance\skip0 by-\CodeTopsep\fi \par\addvspace{\skip0}\@codeskipputgtrue} % And, for a~smaller part of text, -% \CodeDefine\stanza \newcommand*\stanza{% \skip0=\stanzaskip \if@codeskipput\advance\skip0 by-\CodeTopsep\fi @@ -1865,7 +2063,6 @@ % Since the stanza skips are inserted automatically most often (cf.\ lines % \ref{codeskip}, \ref{codeskip2}, \ref{codeskip3}, \ref{codeskip4}, % \ref{codeskip5}), sometimes you may need to forbid them. -% \CodeDefine\nostanza \newcommand*\nostanza{% \@codeskipputgtrue\@afternarrgfalse\@aftercodegtrue}% In the `code % to narration' case the first switch is enough but in the countercase @@ -1874,8 +2071,6 @@ % % % To count the lines where they have begun not before them -% \CodeDefine\if@newline \CodeDefine*\@newlinegtrue -% \CodeDefine*\@newlinegfalse \newgif\if@newline % |\newgif| is |\newif| with global effect i.e., it defines |\...gtrue| % and |\...gfalse| switchers that switch respective Boolean switch @@ -1883,7 +2078,7 @@ % \stanza % % To handle the \ds\ directives not \emph{any} |%<...|. -% \CodeDefine*\if@dsdir +% \Define\if@dsdir \newgif\if@dsdir % This switch will be falsified at the first char of a~code line. (We % need a~switch independent of the one indicationg whether the line @@ -1896,18 +2091,17 @@ % Now we define main |\input|ing command that'll change catcodes. % The macros used by it are defined later. % -% \CodeDefine\DocInput \CodeDefine\Doc@Input -% \changes{v0.98}{06/09/05}{\cs{@makeother\protect\bslash_} added} \newcommand*\DocInput{\bgroup\@makeother\_\Doc@Input} \begingroup\catcode`\^^M=\active% \firstofone{\endgroup% \newcommand*{\Doc@Input}[1]{\egroup\begingroup% - % \CodeDefIndex\gmd@inputname + % \changes{v0.98}{06/09/05}{\cs{@makeother\protect\bslash_} added} + % \DefIndex\gmd@inputname \edef\gmd@inputname{#1}% we'll use it in some notifications. - % \CodeDefIndex\gmd@currentlabel@before - \let\gmd@currentlabel@before=\@currentlabel% we store it 'cause + % \DefIndex\gmd@currentlabel@before + \let\gmd@currentlabel@before=\@currentlabel% we store it because % we'll do |\xdef|s of |\@currentlabel| to make proper references % to the line numbers so we want to restore current % |\@currentlabel| after our group. @@ -1935,14 +2129,14 @@ \@beginputhook% my first use of it is to redefine |\maketitle| % just at this point not globally. \CodeUsgIndex\everypar \everypar=\@xa{\@xa\@codetonarrskip\the\everypar}% - % \CodeDefine*{^^M} + % \Define*{^^M} \let^^M=\gmd@textEOL% - % \CodeDefIndex\gmd@guardedinput + % \Define\gmd@guardedinput \edef\gmd@guardedinput{% \@nx\@@input #1\relax% |\@nx| is % |\noexpand|, see \pk{gmutils}.\DoNotIndex\@nx - % \nlpercent|\@@input| is the - % true \TeX's \nlpercent|\input|. \CodeUsgIndex\EOFMark + % \inverb|\@@input| is the + % true \TeX's \inverb|\input|. \CodeUsgIndex\EOFMark \gmd@iihook% cf.\ line \ref{iihook} \@nx\EOFMark% to pretty finish the input, see % line~\ref{eofMark}.\CodeUsgIndex\code@delim @@ -1979,10 +2173,9 @@ % will be used also for checking the |%^^M| case (|\@ifnextchar| % does |\ifx|). % -% \CodeDefine\gmd@textEOL \def\gmd@textEOL{ % a~space just like in normal \TeX. We put it first to - % cooperate with \nlpercent|\^^M|'s |\expandafter\ignorespaces|. It's no + % cooperate with \inverb|\^^M|'s |\expandafter\ignorespaces|. It's no % problem since a~space | |${}_{10}$ doesn't drive \TeX\ out of % the vmode. \ifhmode\@afternarrgtrue\@codeskipputgfalse\fi% being in @@ -2006,7 +2199,7 @@ % ^^A~the one brought from the narration but then, \gmd@setclubpenalty% Most paragraphs will be % one-line most probably. Since some sectioning commands may change - % \nlpercent|\clubpenalty|, we set it again here and also after this + % \inverb|\clubpenalty|, we set it again here and also after this % group. \aftergroup\gmd@setclubpenalty% \let\par\@@par% inside the verbatim group we wish |\par| to be genuine. @@ -2014,7 +2207,7 @@ \ttverbatim% it does |\tt| and makes specials % other or |\active|-and-breakable. \gmd@DoTeXCodeSpace% - \@makeother\|% 'cause |\ttverbatim| doesn't do that. + \@makeother\|% because |\ttverbatim| doesn't do that. \MakePrivateLetters% see line \ref{MPL}.\par \@xa\@makeother\code@delim% we are % almost sure the code comment char is among the chars having @@ -2036,12 +2229,10 @@ % \stanza % For convenient adding things to the begin- and endinput hooks: -% \CodeDefine\AtEndInput \CodeDefine\@endinputhook \def\AtEndInput{\g@addto@macro\@endinputhook} \def\@endinputhook{} %\label{@endinputhook} % Simili modo -% \CodeDefine\AtBegInput \CodeDefine\@beginputhook \def\AtBegInput{\g@addto@macro\@beginputhook} \def\@beginputhook{} @@ -2051,8 +2242,7 @@ % And let's use it instantly to avoid a~disaster while reading in the % table of contents. -% \CodeDefine\tableofcontents -% \CodeDefIndex\gmd@@toc +% \DefIndex\gmd@@toc \AtBegInput{\let\gmd@@toc\tableofcontents \def\tableofcontents{% \label{straighttoc} \@ifQueerEOL{\StraightEOL\gmd@@toc\QueerEOL}{\gmd@@toc}}} @@ -2061,36 +2251,34 @@ % use those two strange declarations to change and restore the very % special meaning of the line end. Without such changes % |\tableofcontents| would cause a~disaster (it did indeed). And to -% check the catcode of |^^M| is the r\^ole of |\@ifQueerEOL|: +% check the catcode of |^^M| is the r\ocircum le of |\@ifQueerEOL|: % % \changes{v0.98a}{06/09/06}{\cs{tableofcontents}, \cs{PrintIndex} % and \cs{PrintChanges} modified to work properly in the `queer line % ends' environment.} -% \CodeDefine\@ifQueerEOL -% \changes{v0.98a}{06/09/06}{added} -\long\def\@ifQueerEOL#1#2{% + +\long\def\@ifQueerEOL#1#2{%% \changes{v0.98a}{06/09/06}{added} \ifnum\the\catcode`\^^M=\active \afterfi{#1}\else\afterfi{#2}\fi} -% \CodeDefine\AtBegInputOnce The declaration below is useful if you +% The declaration below is useful if you % wish to put sth.\ just in the nearest input/included file and no % else: at the moment of putting the stuff it will erase it from the % hook. You may declare several |\AtBegInputOnce|s, they add up. -% \changes{v0.98a}{06/09/05}{The counter \cs[]{hook@oncecnt} added -% to number the self-destructing cs's (thence the hooks add up) and -% the prefix changed to \cs[]{gmd/AtBI/NeuroOncer}} -% -% \changes{v0.98l}{06/10/26}{After the Tiger's suggestion, defining -% a~unique macro for each use of \* substituted with just one macro in -% the begin input hook and adding to this macro.} % -%^^A CodeDefine*{hook@oncecnt} +%^^A Define*{hook@oncecnt} %^^A CodeDefIndex*\c@hook@oncecnt %^^A\newcounter{hook@oncecnt} -% \CodeDefine\gmd@ABIOnce +% \Define\gmd@ABIOnce \@emptify\gmd@ABIOnce \AtBegInput\gmd@ABIOnce \long\def\AtBegInputOnce#1{% +% \changes{v0.98a}{06/09/05}{The counter \cs[]{hook@oncecnt} added +% to number the self-destructing cs's (thence the hooks add up) and +% the prefix changed to \cs[]{gmd/AtBI/NeuroOncer}} +% \changes{v0.98l}{06/10/26}{After the Tiger's suggestion, defining +% a~unique macro for each use of \* substituted with just one macro in +% the begin input hook and adding to this macro.} %^^A \stepcounter{hook@oncecnt}% %^^A \@xa\long\@xa\edef% \CodeUsgIndex*{NeuroOncer} %^^A \csname gmd/AtBI/NeuroOncer\the\c@hook@oncecnt\endcsname{% @@ -2101,7 +2289,7 @@ % Many tries of finishing the input cleanly led me to setting the % guardians as in line \ref{guardians} and to -% \CodeDefine\EOFMark + \def\EOFMark{\<eof>} % \label{eofMark}Other solutions did print the last code delimiter or % would require managing a~special case for the macros typesetting @@ -2113,21 +2301,21 @@ % Due to the |codespacesblank| option in the line \ref{cspb} we launch % the macro defined below to change the meaning of a~\pk{gmdoc}-kernel % macro. -% \CodeDefIndex\gmd@DoTeXCodeSpace +% \DefIndex\gmd@DoTeXCodeSpace \begin{obeyspaces}% \gdef\gmd@DoTeXCodeSpace{% -\obeyspaces\let =\breakabletwelvespace}% +\obeyspaces\let =\breakablexiispace}% % \stanza -% \CodeDefine\CodeSpacesBlank +% \Define\CodeSpacesBlank % \changes{v0.98a}{06/09/06}{a~kernel \cs{gmd@verbatimspace} renamed % to \cs{gmd@texcodespace} and a~bug fixed.} % \CodeUsgIndex\gmobeyspaces -% \CodeDefIndex\gmd@texcodespace +% \DefIndex\gmd@texcodespace \gdef\CodeSpacesBlank{% \let\gmd@DoTeXCodeSpace\gmobeyspaces% \let\gmd@texcodespace=\ }% the latter |\let| is for the |\if...|s. %\stanza -% \CodeDefine\CodeSpacesSmall +% \Define\CodeSpacesSmall \gdef\CodeSpacesSmall{% \def\gmd@DoTeXCodeSpace{% \obeyspaces\def {\,\hskip\z@}}% @@ -2136,7 +2324,6 @@ \end{obeyspaces} % How the continuing of the narration should look like? -% \CodeDefIndex\gmd@continuenarration \def\gmd@continuenarration{% \endgroup \gmd@countnarrationline% see \gmiflink[countnarr]{below}. @@ -2151,7 +2338,6 @@ %\gmhypertarget[countnarr]{Whether} we count the narration lines % depends on the option |countalllines| which is off by default. -% \CodeDefIndex\gmd@countnarrationline \if@countalllines \def\gmd@countnarrationline{% \if@newline @@ -2167,14 +2353,14 @@ % should restore it. \hyperlabel@line {\LineNumFont\thecodelinenum}\,\ignorespaces - \fi}% \CodeDefIndex\gmd@countnarrationline + \fi}% \DefIndex\gmd@countnarrationline \else \@emptify\gmd@countnarrationline% \fi % And typesetting the \TeX\ code? \begingroup\catcode`\^^M=\active% -\firstofone{\endgroup% \CodeDefIndex\gmd@typesettexcode +\firstofone{\endgroup% \DefIndex\gmd@typesettexcode \def\gmd@typesettexcode{% \gmd@parfixclosingspace% it's to eat a~space closing the % paragraph, see \gmiflink[closingspace]{below}. It contains @@ -2185,12 +2371,12 @@ \everypar={\@@settexcodehangi}% At first attempt we thought % of giving the user a~|\toks| list to insert at the beginning of % every code line, but what for? - % \CodeDefine*{^^M}^^A + % \Define*{^^M}^^A \def^^M{% \@newlinegtrue% to |\refstep| the counter in proper place. \@dsdirgtrue% to handle the \ds\ directives. \global\gmd@closingspacewd=\z@% \label{noclosingspace}we - % don't wish to eat a~closing space after a~codeline, 'cause + % don't wish to eat a~closing space after a~codeline, because % there isn't any and a~negative rigid |\hskip| added to % |\parfillskip| would produce a~blank line. \ifhmode\par\@codeskipputgfalse\else% @@ -2205,7 +2391,7 @@ \@ifnextchar{\gmd@texcodespace}{% \@dsdirgfalse\gmd@dolspaces}{\gmd@charbychar}% }% end of |^^M|'s definition.\label{debug!2} - % \CodeDefIndex\gmd@texcodeEOL + % \DefIndex\gmd@texcodeEOL \let\gmd@texcodeEOL=^^M% for further checks inside |\gmd@charbychar|. \raggedright\leftskip=\CodeIndent% \if@aftercode\gmd@nocodeskip1{iaC}\else\if@afternarr% @@ -2221,7 +2407,7 @@ \if@newline\grefstepcounter{codelinenum}\@newlinegfalse% \fi% \printlinenumber% if we don't want the lines to be numbered, - % the respective option \nlpercent|\let|s this CS to |\relax|. + % the respective option \inverb|\let|s this CS to |\relax|. \hyperlabel@line% \mark@envir% index and/or marginize an environment if there is % some to be done so, see line \ref{mark@envir}. @@ -2260,25 +2446,25 @@ % line). If there'll be only |%|, we want just to continue the comment % or start a~new one. (We don't have to worry about whether we should % |\par| or not.) -% \CodeDefIndex\gmd@spacewd +% \DefIndex\gmd@spacewd \newlength\gmd@spacewd% to store the width of a~(leading) % | |\catother. -% \CodeDefIndex\gmd@ldspaceswd +% \DefIndex\gmd@ldspaceswd \newlength\gmd@ldspaceswd% to store total length of gobbled leading %spaces. % It costed me some time to reach that in my verbatim scope a~space % isn't \catother\ but \catactive, namely |\let| to -% |\breakabletwelvespace|. +% |\breakablexiispace|. % So let us |\let| for future: -% \CodeDefIndex\gmd@texcodespace -\let\gmd@texcodespace=\breakabletwelvespace +% \Define\gmd@texcodespace +\let\gmd@texcodespace=\breakablexiispace % And now let's try to deal with those spaces. -% \CodeDefIndex\gmd@dolspaces + \def\gmd@dolspaces{% \ifx\gmd@texcodespace\@let@token \@dsdirgfalse - \afterfi{\settowidth{\gmd@spacewd}{\twelvespace}% + \afterfi{\settowidth{\gmd@spacewd}{\xiispace}% \gmd@ldspaceswd=\z@ \gmd@eatlspace}% \else\afterfi{% about this smart macro and other of its family see @@ -2287,11 +2473,11 @@ \fi} % And now, the iterating inner macro that'll eat the leading spaces. -% \CodeDefIndex\gmd@eatlspace + \def\gmd@eatlspace#1{% \ifx\gmd@texcodespace#1% \advance\gmd@ldspaceswd by\gmd@spacewd% we don't - % |\advance| it |\global|ly 'cause the current group may be closed + % |\advance| it |\global|ly because the current group may be closed % iff we meet |%| and then we'll won't indent the line anyway. \afteriffifi\gmd@eatlspace \else @@ -2304,9 +2490,7 @@ % We want to know whether we were in hmode before reading current % |\code@delim|. We'll need to switch the switch globally. -% -% \CodeDefine\ifprevhmode \CodeDefine*\prevhmodegtrue -% \CodeDefine*\prevhmodegfalse + \newgif\ifprevhmode % \addvspace\medskipamount @@ -2314,7 +2498,7 @@ % And the main iterating inner macro which eats every single char of % verbatim text to check the end. The case |\%| should be excluded % and it is indeed. -% \CodeDefine*\gmd@charbychar + \newcommand*\gmd@charbychar[1]{% \ifhmode\prevhmodegtrue \else\prevhmodegfalse\fi @@ -2340,7 +2524,6 @@ % cases and it's very low level in one case because |\refstepcounter| and % |\stepcounter| added some stuff that caused blank lines, at % least with \pk {hyperref} package loaded. -% \CodeDefIndex\gmd@EOLorcharbychar \def\gmd@EOLorcharbychar#1{% \ifx\gmd@texcodeEOL#1% \if@newline @@ -2357,7 +2540,6 @@ % a~code |^^M| with no commentary. \fi} -% \CodeDefIndex\gmd@counttheline \def\gmd@counttheline{% \ifvmode \if@newline @@ -2375,10 +2557,10 @@ % If before reading current |%| char we were in horizontal mode, then % we wish to print |%| (or another code delimiter). -% \CodeDefIndex\gmd@percenthack + \def\gmd@percenthack{% \ifprevhmode\code@delim\aftergroup\space% We add a~space after |%|, - % 'cause I~think it looks better. It's done |\aftergroup| to make + % because I~think it looks better. It's done |\aftergroup| to make % the spaces possible after the |%| not to be % typeset. \else\aftergroup\gmd@narrcheckifds@ne% remember that @@ -2394,7 +2576,7 @@ % The macro below is used to look for the |%^^M| case to make % a~commented blank line make a~new paragraph. % Long searched and very simple at last. -% \CodeDefIndex\gmd@checkifEOL + \def\gmd@checkifEOL{% \gmd@countnarrationline \everypar=\@xa{\@xa\@codetonarrskip% we add the @@ -2412,7 +2594,7 @@ % In the `mixed' line case it should be a~bit more complex, though. On % the other hand, there's no need to checking for \ds\ directives. -% \CodeDefIndex\gmd@checkifEOLmixd + \def\gmd@checkifEOLmixd{% \gmd@countnarrationline \everypar=\@xa{\@xa\@codetonarrskip\the\gmd@preverypar}% @@ -2432,7 +2614,7 @@ % latter |\gmd@endpe| sets the parameters at the narration values. % In the other case both |\gmd@endpe|s do the same % and |\par| between them does nothing. - % \CodeDefIndex\par + % \DefIndex\par \def\par{% \ifhmode% (I~added this |\ifhmode| as a~result of a~heavy % debug.) @@ -2461,7 +2643,7 @@ % group and therefore we wish to restore normal |\leftskip| when back to % normal text i.e.\ the commentary. But, if normal text starts in the % same line as the code, then we still wish to indent such a~line. -% \CodeDefIndex\gmd@endpe + \def\gmd@endpe{% \ifprevhmode \settexcodehangi%\unskip ndent @@ -2485,18 +2667,16 @@ \@relaxen\gmd@resetlinecount% \dots\ we turn % resetting the counter by \cs{Doc\+In\+put} off\dots \newcommand*\resetlinecountwith[1]{% - % \CodeDefIndex*\c@codelinenum \newcounter{codelinenum}[#1]}% \dots\ and provide a~new % declaration of the counter. -\else% With the option turned off\dots \CodeDefine*{DocInputsCount} - \newcounter{DocInputsCount}% \CodeDefine*{codelinenum} +\else% With the option turned off\dots + \newcounter{DocInputsCount}% \newcounter{codelinenum}[DocInputsCount]% \dots\ we declare the % |\DocInput|s' number counter andthe codeline counter % to be reset with stepping of it. % \changes[\c@DocInputsCount]{v0.98c}{06/9/8}{added for fixing % duplication of \pk{hyperref} labels in the case of a~multiple % \cs{DocInput}} - % \CodeDefine\gmd@resetlinecount \newcommand*\gmd@resetlinecount{\stepcounter{DocInputsCount}}% \dots % and let the |\DocInput| increment the |\DocInput|s number count % and thus reset the codeline count. It's for unique naming of the @@ -2505,15 +2685,14 @@ % Let's define printing the line number as we did in \pk{gmvb} % package. -% \CodeDefIndex\printlinenumber \newcommand*\printlinenumber{% \leavevmode\llap{\rlap{\LineNumFont$\phantom{999}$\llap{\thecodelinenum}}% \hskip\leftskip}} -% \CodeDefine\LineNumFont + \def\LineNumFont{\normalfont\tiny} \if@linesnotnum\@relaxen\printlinenumber\fi -% \CodeDefIndex\hyperlabel@line + \newcommand*\hyperlabel@line{% \if@pageindex% It's good to be able to switch it any time not just % define it once according to the value of the switch set by the @@ -2530,7 +2709,7 @@ % between the code and the narration. Its parameter is % a~\gmhypertarget[relic parameter]{relic} of a~very heavy debug of % the automatic vspacing mechanism. Let it remain at least until this -% package is 2.0 version. \CodeDefIndex\gmd@codeskip +% package is 2.0 version. \newcommand*\gmd@codeskip[1]{\@@par\addvspace\CodeTopsep\@codeskipputgtrue} %\label{codeskip2} @@ -2541,14 +2720,12 @@ % not the `true' last skip. \Describe*{@codeskipput}Therefore we need % a~Boolean switch to keep the knowledge of putting similar vskip % before |\parskip|. -% \CodeDefine\if@codeskipput \CodeDefIndex*\@codeskipputgtrue -% \CodeDefIndex*\@codeskipputgfalse \CodeDefIndex*{@codeskipput} +% \Define\if@codeskipput \newgif\if@codeskipput % The below is another relic of the heavy debug of the automatic % vspacing. Let's give it the same removal clause as % \gmiflink[relic parameter]{above}. -% \CodeDefIndex\gmd@nocodeskip \newcommand*\gmd@nocodeskip[2]{} % And here is how the two relic macros looked like during the @@ -2564,20 +2741,17 @@ % We'll wish to execute |\gmd@codeskip| wherever a~codeline (possibly with % an inline comment) is followed by a~homogenic comment line or % reverse. Let us dedicate a~Boolean switch to this then. -% \CodeDefine\if@aftercode \CodeDefine*\@aftercodegtrue -% \CodeDefine*\@aftercodegfalse +% \Define\if@aftercode \newgif\if@aftercode % This switch will be set true in the moments when we are able to % switch from the \TeX\ code into the narration and the below one when % we are able to switch reversely. -% \CodeDefine\if@afternarr \CodeDefine*\@afternarrgtrue -% \CodeDefine*\@afternarrgfalse +% \Define\if@afternarr \newgif\if@afternarr % To insert vertical glue between the \TeX\ code and the narration % we'll be playing with |\everypar|. More precisely, we'll add a~macro % that the |\parindent| box shall move and the glue shall put. -% \CodeDefine\@codetonarrskip \long\def\@codetonarrskip{% \if@codeskipput\else \if@afternarr\gmd@nocodeskip4{iaN}\else @@ -2608,12 +2782,10 @@ % delimited parameters for a~macro: if we define a~two-parameter % macro, the first is undelimited so it has to be nonempty; it costed % me some one hour to understand it). -% \CodeDefine\@trimandstore -% \CodeDefIndex\@trimandstore@hash \long\def\@trimandstore#1\@trimandstore{% \def\@trimandstore@hash{#1}% \ifx\@trimandstore@hash\@empty% we check if |#1| is - % nonempty. The |\if|\nlpercent*|\relax#1\relax| trick is not + % nonempty. The |\if|\inverb*|\relax#1\relax| trick is not % recommended here because using it we couldn't avoid expanding |#1| % if it'd be expandable. \gmd@preverypar={}% @@ -2621,7 +2793,6 @@ \afterfi{\@xa\@trimandstore@ne\the\everypar\@trimandstore}% \fi} -% \CodeDefIndex\@trimandstore@ne \long\def\@trimandstore@ne#1#2\@trimandstore{%\label{@trimandstore} \def\trimmed@everypar{#2}% \ifx\@codetonarrskip#1% @@ -2645,9 +2816,10 @@ % define a~line-end eater: \catcode`\^^B=\active% note we re|\catcode| \<char2> globally, for the % entire document. -\bgroup\catcode`\^^M=\active% -\firstofone{\egroup% \CodeDefIndex\QueerCharTwo \CodeDefine*{^^B} - \def\QueerCharTwo{\long\def^^B##1^^M{\ignorespaces}}} +\foone{\catcode`\^^M=\active}%% \Define*{^^B} + {\def\QueerCharTwo{% + \def^^B##1^^M{\ignorespaces}}% + } \QueerCharTwo @@ -2675,9 +2847,12 @@ % would cause disasters. So let's do it an |\active| way. \catcode`\^^A=\active% note we re|\catcode| \<char1> globally, for the % entire document. -\bgroup\catcode`\^^M=\active% -\firstofone{\egroup% \CodeDefIndex\QueerCharOne \CodeDefine*{^^A} - \def\QueerCharOne{\long\def^^A##1^^M{\ignorespaces^^M}}} +\foone{\catcode`\^^M=\active}%%\DefIndex\QueerCharOne \Define*{^^A} + {\def\QueerCharOne{% + \def^^A{% + \bgroup\let\do\@makeother\dospecials\gmd@gobbleuntilM}}% + \def\gmd@gobbleuntilM#1^^M{\egroup\ignorespaces^^M}% + } \QueerCharOne @@ -2697,21 +2872,23 @@ % \changes{v0.98b}{06/09/07}{\cs{QueerM} and \cs{StraightM} renamed % to \cs{QueerEOL} and \cs{StraightEOL} and other (internal) macros % ending with \cs[]{M}} -% \CodeDefine\StraightEOL \def\StraightEOL{%\label{StraightEOL} - \catcode`\^^M=5\relax - \catcode`\^^A=14\relax - \catcode`\^^B=14\relax + \catcode`\^^M=5 + \catcode`\^^A=14 + \catcode`\^^B=14 \def\^^M{\ }} -% \CodeDefine\QueerEOL -\def\QueerEOL{%\label{QueerEOL} - \catcode`\^^M=\active - \catcode`\^^A=\active - \catcode`\^^B=\active% I~only re|\catcode| \<char1> and \<char2> - % hoping no one but me is \emph{that} perverse to make them - % |\active| and (re)define. (Let me know if I'm wrong at this point.) - \let\^^M=\gmd@bslashEOL} +\foone{\catcode`\^^M=\active}% +{\def\QueerEOL{%\label{QueerEOL} + \catcode`\^^M=\active% + \let^^M\gmd@textEOL% + % ^^A~ $$$$$$$$ + \catcode`\^^A=\active% + \catcode`\^^B=\active% I~only re|\catcode| \<char1> and \<char2> + % hoping no one but me is \emph{that} perverse to make them + % |\active| and (re)define. (Let me know if I'm wrong at this point.) + \let\^^M=\gmd@bslashEOL}% +} % \iffalse % They won't work in \verb+|verbatim|+ scopes but the clubs redefine @@ -2725,14 +2902,11 @@ % but has one uwelcome feature: if the line has nearly |\textwidth|, % this closing space may cause line breaking and setting a~blank line. % To fix this I~|\advance| the |\parfillskip|: -% \CodeDefIndex\gmd@parfixclosingspace \def\gmd@parfixclosingspace{{% \advance\parfillskip by-\gmd@closingspacewd\par}} % We'll put it in a~group surrounding |\par| but we need to check if % this |\par| is executed after narration or after the code, % i.e., whether the closing space was added or not. -% \CodeDefIndex\gmd@closingspacewd -% \CodeDefIndex\gmd@setclosingspacewd \newskip\gmd@closingspacewd \newcommand*\gmd@setclosingspacewd{% \global\gmd@closingspacewd=\fontdimen2\font% @@ -2742,9 +2916,8 @@ % case when no closing space is added. % And one more detail: -% \CodeDefIndex\gmd@bslashEOL \bgroup\catcode`\^^M=\active% -\firstofone{\egroup% \CodeDefIndex*{\^^M}\changes{v0.99c}{2007/03/30}{a~bug fix: redefinition of it left solely to \cs{QueerEOL}} +\firstofone{\egroup% \DefIndex*{\^^M}\changes{v0.99c}{2007/03/30}{a~bug fix: redefinition of it left solely to \cs{QueerEOL}} \def\gmd@bslashEOL{\ \@xa\ignorespaces^^M}} % The |\QueerEOL| declaration will |\let| it to |\^^M| to make % |\^^M| behave properly. If this definition was ommitted, |\^^M| @@ -2762,17 +2935,15 @@ % % To make \env{verbatim(*)} typeset its contents with the \TeX\ code's % indentation: -% \CodeDefIndex\@verbatim +% \Define\@verbatim \gaddtomacro\@verbatim{\leftskip=\CodeIndent} % And a~one more little definition to accomodate |\verb| and pals for the % lines commented out. -% \CodeDefIndex\check@percent \AtBegInput{\long\def\check@percent#1{% \@xa\ifx\code@delim#1\else\afterfi{#1}\fi}} % We also redefine \pk{gmverb}'s |\AddtoPrivateOthers| that has been % provided just with \pk{gmdoc}'s need in mind. -% \CodeDefine\AddtoPrivateOthers \def\AddtoPrivateOthers#1{% \@xa\def\@xa\doprivateothers\@xa{% \doprivateothers\do#1}}% @@ -2781,7 +2952,7 @@ % line end if a~line end char is met in a~short verbatim: we have to % check if we are in `queer' or `straight' EOLs area. \begingroup -\obeylines% \CodeDefIndex\gm@verb@eol +\obeylines% \DefIndex\gm@verb@eol \AtBegInput{\def\gm@verb@eol{\obeylines% \def^^M{\verb@egroup\@latex@error{% \@nx\verb ended by end of line}% @@ -2805,14 +2976,14 @@ % them. But here in \pk{gmdoc} we prefer no special style for the % index. -% \CodeDefine\actualchar \CodeDefine\quotechar \CodeDefine\encapchar -% \CodeDefine\levelchar +% \Define\actualchar \Define\quotechar \Define\encapchar +% \Define\levelchar % \changes[\actualchar]{v0.98e}{06/09/23}{a~bug fix: making the % \cs[]{@} \protect\catother\space again} \edef\actualchar{\string @} -\def\quotechar{"} -\edef\encapchar{\twelveclub} -\def\levelchar{!} +\edef\quotechar{\string "} +\edef\encapchar{\xiiclub} +\edef\levelchar{\string !} % However, for the glossary, i.e., the change history, a~special style % is required, e.g., \pk{gmglo.ist}, and the above macros are % redefined by the |\changes| command due to \pk{gmglo.ist} and @@ -2823,14 +2994,14 @@ % process them further are postponed till |\begin{document}|. % % -% \CodeDefine\CodeEscapeChar \CodeDefine\code@escape@char +% \Define\code@escape@char \def\CodeEscapeChar#1{% \begingroup \escapechar\m@ne \xdef\code@escape@char{\string#1}% \endgroup} % As you see, to make a~proper use of this macro you should give it -% the~|\|\<char> CS as an argument. It's an invariant assertion that +% a~|\|\<one char> CS as an argument. It's an invariant assertion that % |\code@escape@char| stores `other' version of the code layer % escape char. % \CodeUsgIndex\CodeEscapeChar @@ -2838,7 +3009,6 @@ % As mentioned in \docfm, someone may have some chars \catletter ed. \@ifundefined{MakePrivateLetters}{%\label{MPL} - % \CodeDefine\MakePrivateLetters \def\MakePrivateLetters{\makeatletter\catcode`\*=11 }}{} % A~tradition seems to exist to write about e.g., `command |\section| and % command |\section*|' and such an uderstanding also of `macro' is @@ -2847,12 +3017,10 @@ % % \stanza % And you may wish some special chars to be \catother. -% \CodeDefine\MakePrivateOthers \def\MakePrivateOthers{\let\do=\@makeother \doprivateothers} -% This macro we use to re|\catcode| the space for marking the +% We use this macro to re|\catcode| the space for marking the % environments' names and the caret for marking chars such as |^^M|, see % line \ref{TextUsage}. So let's define the list: -% \CodeDefine\doprivateothers \def\doprivateothers{\do\ \do\^} % Two chars for the beginning, and also the |\MakeShortVerb| command % shall this list enlarge with the char(s) declared. @@ -2866,7 +3034,6 @@ % Now the main macro indexing a~macro's name. It would be a~verbatim % :-) copy of the \docfm 's one if I~didn't ommit some lines % irrelevant with my approach. -% \CodeDefine\scan@macro \def\scan@macro#1{% we are sure to scan at least one token and % therefore we define this macro as one-parameter.\par % Unlike in \docfm , here we have the escape char \catother\ so we @@ -2884,15 +3051,16 @@ % a~benchmark letter. \ifcat a\@nx#1% \quote@char#1% - \xdef\macro@iname{\maybe@quote#1}% global for symmetry with - % line \ref{x123}. + \xdef\macro@iname{\gmd@maybequote#1}% global for symmetry with + % line \ref{x474}. \xdef\macro@pname{\string#1}%\label{stringing0} we'll print entire % name of the macro later.\par % We |\string| it here and in the lines \ref{stringing1} and % \ref{stringing2} to be sure it is whole \catother\ for easy % testing for special indexentry formats, see line - % \ref{pnametestDef} etc. - \afterfi{\@ifnextcat{a}{\continue@macroscan}{\finish@macroscan}}% + % \ref{pnametestDef} etc. Here we are sure the result of |\string| + % is \catother\ since its argument is \catletter. + \afterfi{\@ifnextcat{a}{\gmd@finishifstar#1}{\finish@macroscan}}% \else% |#1| is not a~letter, so we have just scanned a~one-char % CS.\par % Another reasonable |\catcode|s assumption seems to be that the @@ -2901,39 +3069,52 @@ % trick to be sure that the char we write as the macro's name is % \catother. {\uccode`9=`#1% - \uppercase{\xdef\macro@iname{9}}% - }%\label{x123} + \uppercase{\xdef\macro@iname{9}}%\label{x474} + }% \quote@char#1% - \xdef\macro@iname{\maybe@quote\macro@iname}% + \xdef\macro@iname{\gmd@maybequote\macro@iname}% \xdef\macro@pname{\xiistring#1}%\label{stringing1} \afterfi \finish@macroscan \fi} -% This is the end\dots\ beautiful friend, the end\dots\ of -% |\scan@macro|'s |\def| the end\dots\ % The |\xiistring| macro, provided by \pk{gmutils}, is used instead of -% original |\string| because we wish to get the space \catother. +% original |\string| because we wish to get | |\catother (`other' space). % % \stanza % Now, let's explain some details, i.e., let's define them. We call % the following macro having known |#1| to be \catletter. -% \CodeDefIndex\continue@macroscan \def\continue@macroscan#1{% \quote@char#1% - \xdef\macro@iname{\macro@iname \maybe@quote#1}% - \xdef\macro@pname{\macro@pname \string#1}%\label{stringing2} - \@ifnextcat{a}{\continue@macroscan}{\finish@macroscan}% + \xdef\macro@iname{\macro@iname \gmd@maybequote#1}% + \xdef\macro@pname{\macro@pname \string#1}%\label{stringing2} we know + % \inverb*|#1| to be \catletter, so + % we don't need \inverb|\xiistring|. + \@ifnextcat{a}{\gmd@finishifstar#1}{\finish@macroscan}% } -% The |\@ifnextcat| macro is defined analogously to |\@ifnextchar| but -% the test done by it is not |\ifx| but |\ifcat|. (Note it would'nt +% As you may guess, |\@ifnextcat| is defined analogously to |\@ifnextchar| but +% the test it does is |\ifcat| (not |\ifx|). (Note it wouldn't % work for an active char as the `pattern'.) -% \CodeDefIndex\quote@char +%\stanza +% We treat the star specially since in usual \LaTeX\ it should finish +% the scanning of a~CS name---we want to avoid scanning +% |\command*argum| as one CS. + +\def\gmd@finishifstar#1{% + \if*\@nx#1\afterfi\finish@macroscan% note we protect |#1| against + % expansion. In \pk{gmdoc} verbatim scopes some chars are active + % (e.g. \inverb|\|\,). + \else\afterfi\continue@macroscan + \fi} + +% If someone \emph{really} uses |*| as a~letter please let me know. + \def\quote@char#1{{\uccode`9=`#1% at first I~took digit 1 for this % |\uccode|ing but then |#1| meant |#|\<\#1> in |\uppercase|'s % argument, of course. - \uppercase{% - \@ifismember 9\of \indexcontrols\glet\maybe@quote\quotechar% - \else\g@emptify\maybe@quote% - \fi}% + \uppercase{% \DefIndex\gmd@maybequote + \gmd@ifinmeaning 9\of \indexcontrols + {\glet\gmd@maybequote\quotechar}% + {\g@emptify\gmd@maybequote}% + }% }} % And now let's take care of the MakeIndex control characters. We'll @@ -2942,99 +3123,132 @@ % some special MakeIndex style and in such a~case to redefine the four % MakeIndex controls' macros. We enrich this list with the backslash % because sometimes MakeIndex didn't like it unquoted. -% \CodeDefine\indexcontrols +% \Define\indexcontrols % \changes{v0.98d}{06/9/15}{relativized to the index control macros: % previously the controls were given explicitly as the standard ones.} \AtBeginDocument{\xdef\indexcontrols{% \bslash\levelchar\encapchar\actualchar\quotechar}} - % \CodeDefine\@ifismember - \long\def \@ifismember#1\of#2{% - \long\def\in@@##1#1##2\in@@{% - \if\@nx^^A##2\@nx^^A\afterfi\gmd@@iffalse - \else\afterfi\gmd@@iftrue - \fi}% - \@xa\in@@#2#1\in@@}% - -% To hide the Booleans from \TeX\ in some contexts define -% \CodeDefine\gmd@@iftrue \CodeDefine\gmd@@iffalse -\def\gmd@@iftrue{\iftrue} -\def\gmd@@iffalse{\iffalse} -% A~try to |\let| instead of |\def| resulted with the `incomplete if' -% error: \TeX\ looks at the meanings not the names while counting -% |\if|s. - -% A~word of commentary. \docfm\ in another situation solves the -% problem of checking similar way, but a~little more complexely. On -% the other hand, \docfm 's solution is more general: here a~trouble -% may arise if the list begins with |^^A|. It seems little possible to -% me, though. Btw., this macro is used only for catching chars that are -% MakeIndex's controls so far. How does it work? + +\long\def \gmd@ifinmeaning#1\of#2#3#4{% explained in the text + % paragraph below. \changes{v0.99g}{2007/11/06}{made more elegant: + % \cs{if} changed to \cs{ifx} made four parameters and not expanding + % to an open \cs{iftrue/false}. Also renamed from \cs{@ifismember}} + \long\def\gmd@in@@##1#1##2\gmd@in@@{% + \ifx^^A##2^^A\afterfi{#4}% + \else\afterfi{#3}% + \fi}% + \@xa\gmd@in@@#2#1\gmd@in@@}% + +%^^A % To hide the Booleans from \TeX\ in some contexts define +%^^A \def\gmd@@iftrue{\iftrue} +%^^A \def\gmd@@iffalse{\iffalse} +%^^A \def\gmd@@fi{\fi} +%^^A % A~try to |\let| instead of |\def| resulted with the `incomplete if' +%^^A % error: \TeX\ looks at the meanings not the names while counting +%^^A % |\if|s. + +% This macro is used for catching chars that are +% MakeIndex's controls. How does it work? % % |\quote@char| sort of re|\catcode|s its argument through the % |\uccode| trick: assigns the argument as the uppercase code of the % digit 9 and does further work in the |\uppercase|'s scope so the % digit 9 (a~benchmark `other') is substituted by |#1| but the -% |\catcode| remains so thus the |\@ifismember| macro gets -% |\quote@char|'s |#1| `other'ed as the first argument. -% -% |\@ifismember| is defined to take two parameters separated by |\of|. -% In |\quote@char| the second argument for it is |\indexcontrols| -% defined as the (expanded) sequence of the MakeIndex controls. -% |\@ifismember| defines its inner macro |\in@@| to take two -% parameters separated by the first and the second |\@ifismember|'s -% parameter, which are here the char investigated by |\quote@char| and -% the |\indexcontrols| list. The inner macro's parameter string is -% delimited by the macro itself, why not. |\in@@| is put before -% a~string consisting of |\@ifismember|'s second and first parameters -% (in such a~reversed order) and |\in@@| itself. In such a~sequence it -% looks for something fitting its parameter pattern. |\in@@| is sure -% to find the parameters delimiter (|\in@@| itself) and the separator, +% |\catcode| remains so |\gmd@ifinmeaning| gets |\quote@char|'s |#1| +% `other'ed as the first argument. +% +% The meaning of the |\gmd@ifinmeaning| parameters is as follows: +%\begin{enumargs}^^B +%\item the token(s) whose presence we check, +%\item the macro in whose meaning we search |#1| (the first token of +% this argument is expanded one level with |\expandafter|), +%\item the `if found' stuff, +%\item the `if not found' stuff. +%\end{enumargs} +% +% In |\quote@char| the second argument for |\gmd@ifinmeaning| is +% |\indexcontrols| defined as the (expanded and `other') sequence of +% the MakeIndex controls. |\gmd@ifinmeaning| defines its inner macro +% |\gmd@in@@| to take two parameters separated by the first and the +% second |\gmd@ifinmeaning|'s parameter, which are here the char +% investigated by |\quote@char| and the |\indexcontrols| list. The +% inner macro's parameter string is delimited by the macro itself, why +% not. |\gmd@in@@| is put before a~string consisting of +% |\gmd@ifinmeaning|'s second and first parameters (in such a~reversed +% order) and |\gmd@in@@| itself. In such a~sequence it looks for +% something fitting its parameter pattern. |\gmd@in@@| is sure to find +% the parameters delimiter (|\gmd@in@@| itself) and the separator, % |\ifismember|'s |#1| i.e., the investigated char, because they are % just there. But the investigated char may be found not near the end, % where we put it, but among the MakeIndex controls' list. Then the % rest of this list and |\ifismember|'s |#1| put by us become the -% secong argument of |\in@@|. What |\in@@| does with its arguments, is -% just a~check whether the second one is empty. This may happen \emph{iff} -% the investigated char hasn't been found among the MakeIndex controls' -% list and then |\in@@| shall expand to |\iffalse|, otherwise it'll -% expand to |\iftrue|. (The |\after...| macros are employed not to -% (mis)match just got |\if...| with the test's |\fi|.) ``(Deep -% breath.) You got that?'' If not, try \docfm 's explanation of -% |\ifnot@excluded|, pp.\,36--37 of the v2.1b dated 2004/02/09 -% documentation, where a~similar construction is attributed to Michael -% Spivak. - -% \CodeDefIndex\finish@macroscan -\newcommand*\finish@macroscan{%\par - % We have the macro's name for indexing in |\macro@iname| and +% secong argument of |\gmd@in@@|. What |\gmd@in@@| does with its +% arguments, is just a~check whether the second one is empty. This may +% happen \emph{iff} the investigated char hasn't been found among the +% MakeIndex controls' list and then |\gmd@in@@| shall expand to +% |\iffalse|, otherwise it'll expand to |\iftrue|. (The |\after...| +% macros are employed not to (mis)match just got |\if...| with the +% test's |\fi|.) ``(Deep breath.) You got that?'' If not, try +% \docfm's explanation of |\ifnot@excluded|, pp.\,36--37 of the v2.1b +% dated 2004/02/09 documentation, where a~similar construction is +% attributed to Michael Spivak. +% +% Since version 0.99g |\gmd@ifinmeaning| is used also in testing +% whether a~detector is already present in the carrier in the +% mechanism of automatic detection of definitions (line \ref{550}). + +\newif\ifgmd@glosscs% we use this switch to keep the information +% whether a~history entry is a~CS or not. + +\newcommand*\finish@macroscan{%\label{506}\par + % First we check if the current CS is not just being defined. The + % switch may be set true in line \ref{519} + \ifgmd@adef@cshook% if so, we throw it into marginpar and index as + % a~def entry\dots + \@ifundefined{gmd/iexcl/\macro@pname}{% \dots\ if it's not excluded + % from indexing. + \@xa\Code@MarginizeMacro\@xa{\macro@pname}% + \@xa\@defentryze\@xa{\macro@pname}{1}}{}%% here we declare the kind of + % index entry and define |\last@defmark| used by \cs{changes} + \global\gmd@adef@cshookfalse% we falsify the hook that was set + % true just for this CS. + \fi + % We have the CS's name for indexing in |\macro@iname| and % for print in |\macro@pname|. So we index it. We do it a~bit % countercrank way because we wish to use more general indexing % macro. - \if\verbatimchar\macro@pname% it's important that |\verbatimchar| comes before the macro's - % name: when it was reverse, the |\tt| CS turned this test true - % and left the |\verbatimchar| what resulted with `|\+tt|' - % typeset. Note that this test should turn true iff the scanned - % macro name shows to be the default |\verb|'s delimiter. In such - % a~case we give |\verb| another delimiter, namely |$|: + \if\verbatimchar\macro@pname% \label{3039}it's important that |\verbatimchar| + % comes before the macro's name: when it was reverse, the |\tt| CS + % turned this test true and left the |\verbatimchar| what resulted + % with `|\+tt|' typeset. Note that this test should turn true iff + % the scanned macro name shows to be the default + % |\verb|'s delimiter. In such a~case we give + % |\verb| another delimiter, namely |$|: \def\im@firstpar{[$]}%^^A$ \else\def\im@firstpar{}\fi \@xa \index@macro\im@firstpar\macro@iname\macro@pname + % \label{3049} \maybe@marginpar\macro@pname \macro@pname - \gmd@charbychar + \let\next\gmd@charbychar + \gmd@detectors% \label{519} for automatic detection of + % definitions. Defined and + % explained in the next section. It redefines + % |\next| if detects a~definition command amd thus + % sets the switch of line \ref{506} true. + \next } % Now, the~macro that checks whether the just scanned macro should be % put into a~marginpar: it checks the meaning of a~very special CS: % whose name consists of |gmd/2marpar/| and of the examined macro's % name. -% \CodeDefIndex\maybe@marginpar \def\maybe@marginpar#1{% %^^A\ifx#1\mname@tomarginpar \@ifundefined{gmd/2marpar/#1}{}{% - \@xa\Text@Marginize\@xa{\bslash#1}% |\expandafter|s - % \possfil'cause the |\Text@Marginize| command applies |\string| to its - % argument. \nlpercent |\macro@pname|, which will be the only possible + \@xa\Text@Marginize\@xa{\bslash#1}% |\expandafter|s + % \possfil because the |\Text@Marginize| command applies |\string| to its + % argument. \inverb |\macro@pname|, which will be the only possible % argument to % \cs{may\+be\+@mar\+g\+in\+par}, % contains the macro's name @@ -3043,6 +3257,689 @@ \@xa\g@relaxen\csname gmd/2marpar/#1\endcsname% we reset the switch. }} +% Since version 0.99g we introduce automatic detection of definitions, +% it will be implemented in the next section. The details of indexing +% CSs are implemented in the section after it. +% +% \subdivision{Automatic detection of definitions} +% +% To begin with, let's introduce a~general declaration of a~defining +% command. |\DeclareDefining| comes in two flavours: `saut\eacute', +% and with star. The `saut\eacute' version without an optional +% argument declares a~defining command of the kind of |\def| and +% |\newcommand|: whether wrapped in braces or not, its main argument +% is a~CS. The star version without the optional argument declares +% a~defining command of the kind of |\newenvironment| and +% |\DeclareOption|: whose main mandatory argument is text. Both +% versions provide an optional argument in which you can set the keys. +% Probably the most important key is |star|. It determines whether the +% starred version of a~defining command should be taken into account. +% For example, |\newcommand| should be declared with |[star=true]| +% while |\def| with |[star=false]|. You can also write just |[star]| +% instead of |[star=true]|. It's the default if the |star| key is +% omitted. +% +% Another key is |type|. Its possible values are the (backslashless) +% names of the defining commands, see below. +% +% We provide now more keys for the \pk{xkeyval}ish definitions: +% |KVpref| (the key prefix) and |KVfam| (the key family). If not set by +% the user, they are assigned the default values as in \pk{xkeyval}: +% |KVpref| letters |KV| and |KVfam| the input file name. The latter +% assignment is done only for the |\DeclareOptionX| defining command +% because in other \pk{xkeyval} definitions (|\define@(...)key|) the +% family is mandatory. +% +%\stanza +% Let's make a~version of |\@ifstar| that would work with +% |*|\catletter. It's analogous to |\@ifstar|. +\foone{\catcode`\*=11 } + {\def\@ifstarl#1{\@ifnextchar *{\@firstoftwo{#1}}}} +% +% \subsubdivision{\cs{DeclareDefining} and the detectors} +% +% Note that the main argument of the next declaration should be a~CS +% \emph{without star}, unless you wish to declare only the starred +% version of a~command. The effect of this command is always global. +\outer\def\DeclareDefining{\begingroup + \MakePrivateLetters + \@ifstarl + {\gdef\gmd@adef@defaulttype{text}\Declare@Dfng}% + {\gdef\gmd@adef@defaulttype{cs}\Declare@Dfng}% +} + +% The keys except |star| depend of |\gmd@adef@currdef|, therefore we +% set them having known both arguments +\newcommand*\Declare@Dfng[2][]{% + \endgroup + \Declare@Dfng@inner{#1}{#2}% + \ifgmd@adef@star% this swith may be set false in first + % \inverb|\Declare@Dfng@inner| (it's the |star| key). + \Declare@Dfng@inner{#1}{#2*}% The catcode of |*| doesn't matter since + % it's in \inverb|\csname|\nlpercent\dots\inverb|\endcsname| + % everywhere. + \fi} + +% \Define\gmd@adef@currdef +\def\Declare@Dfng@inner#1#2{% + \edef\gmd@resa{% + \@nx\setkeys[gmd]{adef}{type=\gmd@adef@defaulttype}}% + \gmd@resa + {\escapechar\m@ne + \xdef\gmd@adef@currdef{\string#2}% + }% + \gmd@adef@setkeysdefault + \setkeys[gmd]{adef}{#1}% + \@xa\gmd@ifinmeaning + \csname gmd@detect@\gmd@adef@currdef\endcsname + % \label{550} + \of\gmd@detectors{}{% + \@xa\gaddtomacro\@xa\gmd@detectors\@xa{% + \csname gmd@detect@\gmd@adef@currdef\endcsname}}% we add a~CS\\ + % |%| |\gmd@detect@|\<def name> (a~\textbf{detector})to the + % meaning of the \textbf{detectors' carrier}. And we define it to + % detect the \inverb|#2| command. + \@xa\xdef\csname gmd@detectname@\gmd@adef@currdef\endcsname{% + \gmd@adef@currdef}% + \edef\@tempa{% this |\edef| is to expand |\gmd@adef@TYPE|. + \global\@nx\@namedef{gmd@detect@\gmd@adef@currdef}{% + \@nx\ifx + \@xa\@nx\csname gmd@detectname@\gmd@adef@currdef\endcsname + \@nx\macro@pname + \@nx\n@melet{next}{gmd@adef@\gmd@adef@TYPE}% + \@nx\n@melet{gmd@adef@currdef}{gmd@detectname@\gmd@adef@currdef}% + \@nx\fi}}% + \@tempa + \SMglobal\StoreMacro*{gmd@detect@\gmd@adef@currdef}% we store the CS to + % allow its temporary discarding later. +} + + +\def\gmd@adef@setkeysdefault{% + \setkeys[gmd]{adef}{star,prefix,KVpref}} +% Note we don't set |KVfam|. We do not so because for +% |\define@key|-likes family is a~mandatory argument and for +% |\DeclareOptionX| the default family is set to the input file name +% in line \ref{defDOXfam}. + +\define@boolkey[gmd]{adef}{star}[true]{} + +% The |prefix@|\<command> keyvalue will be used to create additional +% index entry for detected definiendum (a~\textbf{definiendum} is the +% thing defined, e.g. in |\newenvironment{foo}| the env.\ \env{foo}). +% For instance, |\newcounter| is declared with |[prefix=\bslash c@]| +% in line \ref{newcounter} and therefore |\newcounter{foo}| occurring +% in the code will index both |foo| and |\c@foo| (as definition +% entries). \UnDef +\define@key[gmd]{adef}{prefix}[]{% + \edef\gmd@resa{% + \def\@xa\@nx\csname gmd@adef@prefix@\gmd@adef@currdef \endcsname{% + #1}}% + \gmd@resa} + + +\def\gmd@KVprefdefault{KV}% in a~separate macro because we'll need + % it in \cs{ifx}. + + +% A~macro |\gmd@adef@KVprefixset@|\<command> if defined, will falsify +% an \cs{ifnum} test that will decide whether create additional index +% entry together with the tests for |prefix|\<command> and +% \UnDef +\define@key[gmd]{adef}{KVpref}[\gmd@KVprefdefault]{% + \edef\gmd@resa{#1}% + \ifx\gmd@resa\gmd@KVprefdefault + \else + \@namedef{gmd@adef@KVprefixset@\gmd@adef@currdef}{1}% + \gmd@adef@setKV% whenever the |KVpref|fix is set (not default), the + % declared command is assumed to be \pk{keyval}ish. + \fi + \edef\gmd@resa{#1}% because |\gmd@adef@setKV| redefined it. + \edef\gmd@resa{% + \def\@xa\@nx\csname gmd@adef@KVpref@\gmd@adef@currdef\endcsname{% + \ifx\gmd@resa\empty + \else#1@\fi}}% as in \pk{xkeyval}, if the KV prefix is not + % empty, we add \inverb|@| to it. + \gmd@resa} + + +% Analogously to |KVpref|, |KVfam| declared in |\DeclareDefining| +% will override the family scanned from the code and, in +% |\DeclareOptionX| case, the default family which is the input file +% name (only for the command being declared). +\define@key[gmd]{adef}{KVfam}[]{% + \edef\gmd@resa{#1}% + \@namedef{gmd@adef@KVfamset@\gmd@adef@currdef}{1}% + \edef\gmd@resa{% + \def\@xa\@nx\csname gmd@adef@KVfam@\gmd@adef@currdef\endcsname{% + \ifx\gmd@resa\empty + \else#1@\fi}}% + \gmd@resa + \gmd@adef@setKV}% whenever the |KVfam|ily is set, the declared command is + % assumed to be \pk{keyval}ish. + + +\define@choicekey[gmd]{adef}{type} + [\gmd@adef@typevals\gmd@adef@typenr] + {% the list of possible types of defining commands + def, + newcommand, + cs,% equivalent to the two above, covers all the cases of defining + % a~CS, including the \PlainTeX\ \inverb|\new...| and + % \LaTeX\ |\newlength|. + newenvironment, + text,% equivalent to the one above, covers all the commands defining + % its first mandatory argument that should be text, + % \inverb|\DeclareOption| e.g. + define@key,% special case of more arguments important; covers the + % \pk{xkeyval} defining commands. + dk,% a~shorthand for the one above. + DeclareOptionX,% another case of special arguments configuration, + % covers the \pk{xkeyval} homonym. + dox,% a~shorthand for the one above. + kvo% one of option defining commands of the \pk{kvoptions} package + % by Heiko Oberdiek (a~package available o~CTAN in the + % \pk{oberdiek} bundle). + } + {% In fact we collapse all the types just to four so far: + \ifcase\gmd@adef@typenr% if |def| + \gmd@adef@settype{cs}{0}% + \or% when |newcommand| + \gmd@adef@settype{cs}{0}% + \or% when |cs| + \gmd@adef@settype{cs}{0}% + \or% when |newenvironment| + \gmd@adef@settype{text}{0}% + \or% when |text| + \gmd@adef@settype{text}{0}% + \or% when |define@key| + \gmd@adef@settype{dk}{1}% + \or% when |dk| + \gmd@adef@settype{dk}{1}% + \or% when |DeclareOptionX| + \gmd@adef@settype{dox}{1}% + \or% when |dox| + \gmd@adef@settype{dox}{1}% + \or% when |kvo| + \gmd@adef@settype{text}{1}%% The \pk{kvoptions} option + %% definitions take first mandatory + % argument as the option name and they define a~\pk{keyval} key + % whose macro's name begins with the prefix/family, either default or + % explicitly declared. The \pk{kvoptions} prefix/family is + % supported in \pk{gmdoc} with \inverb|[KVpref=, KVfam=|\<family>|]|. + \fi} + +\def\gmd@adef@settype#1#2{% + \def\gmd@adef@TYPE{#1}% + \ifnum1=#2 % now we define (or not) a~quasi-switch that fires for + % the \pk{keyval}ish definition commands. + \gmd@adef@setKV + \fi} + +\def\gmd@adef@setKV{% + \edef\gmd@resa{% + \def\@xa\@nx\csname gmd@adef@KV@\gmd@adef@currdef\endcsname{1}% + }% + \gmd@resa} + + +% We initialize the carrier of detectors: +\emptify\gmd@detectors + + +% The definiendum of a~command of the |cs| type is the next control +% sequence. Therefore we only need a~self-relaxing hook in +% |\finish@macroscan|. +\newif\ifgmd@adef@cshook + +\def\gmd@adef@cs{\global\gmd@adef@cshooktrue\gmd@charbychar} + +% For other kinds of definitions we'll employ active chars of their +% arguments' opening braces, brackets and seargants. In \pk{gmdoc} +% code layer scopes the left brace is active so we only add a~hook to +% its meaning (see line \ref{gm@lbracehook} in \pk{gmverb}) and \ref and here +% we switch it according to the type of detected definition. + +\def\gmd@adef@text{\gdef\gmd@lbracecase{1}\gmd@charbychar} + +\foone{% + \catcode`\[\active + % ^^A>\] + \catcode`\<\active} +{%\par + % The detector of \pk{xkeyval} |\define@(...)key|: + \def\gmd@adef@dk{% + \let[\gmd@adef@scanKVpref + \catcode`\[\active + % ^^A\]] + \gdef\gmd@lbracecase{2}% + \gmd@adef@dfKVpref\gmd@KVprefdefault% We set the default value of + % the \pk{xkeyval} prefix. Each time again because an assignment + % in \inverb|\gmd@adef@dfKVpref| is global. + \gmd@adef@checklbracket} + + % The detector of \pk{xkeyval} |\DeclareOptionX|: + \def\gmd@adef@dox{% + \let[\gmd@adef@scanKVpref + \let<\gmd@adef@scanDOXfam + \catcode`[\active + % ^^A]] + \catcode`<\active + \gdef\gmd@lbracecase{1}% + \gmd@adef@dfKVpref\gmd@KVprefdefault% We set the default values of + % the \pk{xkeyval} prefix\dots + \edef\gmd@adef@fam{\gmd@inputname}% \dots\ and family. + \gmd@adef@dofam + % \label{defDOXfam} + \gmd@adef@checkDOXopts}% +} + +% The case when the right bracket is next to us is special because it +% is already touched by |\futurelet| (of CSs scanning macro's +% \cs{@ifnextcat}), therefore we need a~`future' test. +\def\gmd@adef@checklbracket{% + \@ifnextchar[{\gmd@adef@scanKVpref}\gmd@charbychar}% note that +% the prefix scanning macro gobbles its first argument (undelimited) +% which in this case is |[|. +%^^A]]} + +% After a~|\DeclareOptionX|-like defining command not only the prefix +% in square brackets may occur but also the family in +% seargants. Therefore we have to test presence of both of them. +\def\gmd@adef@checkDOXopts{% + \@ifnextchar[{\gmd@adef@scanKVpref}%^^A}] + {\@ifnextchar<{\gmd@adef@scanDOXfam}\gmd@charbychar}} + + +%^^A[ +\def\gmd@adef@scanKVpref#1#2]{% + \gmd@adef@dfKVpref{#2}% + [#2]\gmd@charbychar} + + +\def\gmd@adef@dfKVpref#1{% + \ifnum1=0\csname gmd@adef@KVprefixset@\gmd@adef@currdef\endcsname + \relax + \else + \edef\gmu@resa{% + \gdef\@xa\@nx + \csname gmd@adef@KVpref@\gmd@adef@currdef\endcsname{% + \ifx\relax#1\relax + \else#1@% + \fi}}% + \gmu@resa + \fi} + + +\def\gmd@adef@scanDOXfam{% + \ifnum12=\catcode`\>\relax + \let\next\gmd@adef@scanfamoth + \else + \ifnum13=\catcode`\>\relax + \let\next\gmd@adef@scanfamact + \else + \PackageError{gmdoc}{> neither `other' nor `active'! Make it + `other' with \bslash AddtoPrivateOthers\bslash\>.}% + \fi + \fi + \next} + +\def\gmd@adef@scanfamoth#1>{% + \edef\gmd@adef@fam{\@gobble#1}% there is always + % \cs{gmd@charbychar} first. + \gmd@adef@dofam + <\gmd@adef@fam>% + \gmd@charbychar} + +\foone{\catcode`\>\active} + {\def\gmd@adef@scanfamact#1>{% + \edef\gmd@adef@fam{\@gobble#1}% there is always + % \cs{gmd@charbychar} first. + \gmd@adef@dofam + <\gmd@adef@fam>% + \gmd@charbychar}% + } + + +% The hook of the left brace consists of \cs{ifcase} that logically +% consists of three subcases: +% \begin{itemize}^^B +% \item [0]---the default: do nothing in particular; +% \item [1]---the detected defining command has one mandatory +% argument (is of the |text| type, including \pk{kvoptions} option definition); +% \item [2--3]---we are after detection of a~|\define@key|-like command +% so we have to scan \emph{two} mandatory arguments (case 2 is for +% the family, case 3 for the key name). +% \end{itemize} +% +% +\def\gm@lbracehook{% + \ifcase\gmd@lbracecase\relax + \or% when 1 + \afterfi{% + \gdef\gmd@lbracecase{0}% + \gmd@adef@scanname}% + \or% when 2---the first mandatory argument of two (|\define@(...)key|) + \afterfi{% + \gdef\gmd@lbracecase{3}% + \gmd@adef@scanDKfam}% + \or% when 3---the second mandatory argument of two (the key name). + \afterfi{% + \gdef\gmd@lbracecase{0}% + \gmd@adef@scanname}% + \fi} + +\def\gmd@lbracecase{0}% we initialize the hook caser. + + +% And we define the inner left brace macros: + +\foone{\catcode`\[1 \catcode`\]2 \catcode`\}12 } + [% Note that till line \ref{738} the square brackets are grouping + % and the right brace is `other'. ^^A{ +%\par Define the macro that reads and processes the |\define@key| +%family argument. It has the parameter delimited with `other' right +%brace. An active left brace that has launched this macro had been +%passed through iterating |\gmd@charbychar| that now stands next right +%to us. + \def\gmd@adef@scanDKfam#1}[%^^A{ + \edef\gmd@adef@fam[\@gobble#1]% there is always + % \cs{gmd@charbychar} first. + \gmd@adef@dofam + \gmd@adef@fam}% + \gmd@charbychar] + + % ^^A{ + \def\gmd@adef@scanname#1}[%^^A{ + \@makeother\[%^^A\] + \@makeother\<% + % The scanned name begins with |\gmd@charbychar|, we have to be + % careful. + \gmd@adef@deftext[#1]% + \@gobble#1}% + \gmd@charbychar] + ] + + +\def\gmd@adef@dofam{% + \ifnum1=0\csname gmd@adef@KVfamset@\gmd@adef@currdef\endcsname + \relax% a~family declared with |\DeclareDefining| overrides the + % one currently scanned. + \else + \edef\gmu@resa{% + \gdef\@xa\@nx + \csname gmd@adef@KVfam@\gmd@adef@currdef\endcsname + {\ifx\gmd@adef@fam\empty + \else\gmd@adef@fam @% + \fi}}% + \gmu@resa + \fi} + +\def\gmd@adef@deftext#1{% + \edef\macro@pname{\@gobble#1}% we gobble |\gmd@charbychar|, cf. above. + \@xa\Text@Marginize\@xa{\macro@pname}% + \gmd@adef@indextext + \edef\gmd@adef@altindex{% + \csname gmd@adef@prefix@\gmd@adef@currdef \endcsname}% + %\hskip-\parindent and we add the \pk{xkeyval} header if we are in \pk{xkeyval} + % definition. + \ifnum1=0\csname gmd@adef@KV@\gmd@adef@currdef \endcsname\relax% The\\ CS + % \inverb|\gmd@adef@KV@|\<def. command> is defined |{1}| (so \cs{ifnum} + % gets |1=01\relax|---\hskip0sptrue) iff \<def. command> is a~\pk{keyval} + % definition. In that case we check for the \inverb|KVpref|ix and + % \inverb|KVfam|ily. (Otherwise |\gmd@adef@KV@|\<def. command> is undefined + % so \cs{ifnum} gets |1=0\relax|---false.) + \edef\gmd@adef@altindex{% + \gmd@adef@altindex + \csname gmd@adef@KVpref@\gmd@adef@currdef \endcsname}% + \edef\gmd@adef@altindex{% + \gmd@adef@altindex + \csname gmd@adef@KVfam@\gmd@adef@currdef \endcsname}% + \fi + \ifx\gmd@adef@altindex\empty + \else% we make another index entry of the definiendum with prefix/KVheader. + \edef\macro@pname{\gmd@adef@altindex\macro@pname}% + \gmd@adef@indextext + \fi} + +\def\gmd@adef@indextext{% + \@xa\@defentryze\@xa{\macro@pname}{0}% declare the definiendum has to + % have a~definition entry and in the changes history should appear + % without backslash. + \gmd@doindexingtext% redefine |\do| to an indexing macro. +% \label{gmd@doindexingtext 2nd use} + \@xa\do\@xa{\macro@pname}} + + +%^^A %\iffalse if we decided to manage \verbatimchar +%^^A \iffalse +%^^A \if\verbatimchar\macro@pname% cf. lines \ref{3039}--\ref{3049} +%^^A \def\im@firstpar{[$]}%^^A$ +%^^A \else\def\im@firstpar{}% +%^^A \fi +%^^A \@xa \index@macro\im@firstpar\macro@iname\macro@pname +%^^A \fi +%^^A %\fi +%^^A % +% \stanza + +% So we have implemented automatic detection of definitions. Let's now +% introduce some. +% +% \subsubdivision{Default defining commands} + +% Some commands are easy to declare as defining: +% \HideAllDefining +% \DeclareDefining\DeclareDefining + +%^^A\DeclareDefining[type=dox, star=false]\def +\DeclareDefining[star=false]\def +%^^A\show\gmd@detectors + +% \ResumeAllDefining But |\def| definitely \emph{not always} defines +% an important macro. Sometimes it's just a~scratch assignment. +% Therefore we define the next declaration. It turns the next +% occurence of |\def| off (only the next one). + +\def\UnDef{% + \gdef\gmd@detect@def{% + \ifx\gmd@detectname@def\macro@pname + \def\next{\SMglobal\RestoreMacro\gmd@detect@def}% ^^A we define + % ^^A \inverb|\next| not restore the macro here just in case of + % ^^A multiple declaration of |\def| (in that case there would be + % ^^A multiple occurences of the macro to be restored in the carrier + % ^^A \inverb|\gmd@detectors| and we wish + % ^^A all of them not to fire this one time) That's probably too + % ^^A much care since there's the test in line \ref{550}. + \fi}% + } + +\StoreMacro\UnDef% because the `hiding' commands relax it. + +\def\HideDef{\HideDefining\def\relaxen\UnDef} + +\def\ResumeDef{\ResumeDefining\def\RestoreMacro\UnDef} + + +% Note that I~\emph{don't} declare |\gdef|, |\edef| neither +% |\xdef|. In my opinion their use as `real' definition is very rare +% and then you may use |\Define| implemented later. +% \HideAllDefining \DeclareDefining\DeclareDefining +\DeclareDefining[star=false]\newcount +\DeclareDefining[star=false]\newdimen +\DeclareDefining[star=false]\newskip +\DeclareDefining[star=false]\newif +\DeclareDefining[star=false]\newtoks +\DeclareDefining[star=false]\newbox +\DeclareDefining[star=false]\newread +\DeclareDefining[star=false]\newwrite +\DeclareDefining[star=false]\newlength + +\DeclareDefining\newcommand +\DeclareDefining\renewcommand +\DeclareDefining\providecommand +\DeclareDefining\DeclareRobustCommand +\DeclareDefining\DeclareTextCommand +\DeclareDefining\DeclareTextCommandDefault + +\DeclareDefining*\newenvironment +\DeclareDefining*\renewenvironment +\DeclareDefining*\DeclareOption +%|%\DeclareDefining*\@namedef| + +% \HideDefining\DeclareDefining +% \DeclareDefining\bslash + +\DeclareDefining*[prefix=\bslash c@]\newcounter% \label{newcounter} +% this prefix provides indexing also |\c@|\<counter>. + +\DeclareDefining[type=dk, prefix=\bslash]\define@key +\DeclareDefining[type=dk, prefix=\bslash if]\define@boolkey% the + % alternate index entry will be + % \cs{if}\<KVpref>|@|\<KVfam>|@|\<key name> +\DeclareDefining[type=dk, prefix=\bslash]\define@choicekey + +\DeclareDefining[type=dox, prefix=\bslash]\DeclareOptionX% the +% alternate index entry will be \cs{}\<KVpref>|@|\<KVfam>|@|\<option name>. +% +% For |\DeclareOptionX| the default KVfamily is the input file +% name. If the source file name differs from the name of the goal +% file (you \TeX\ a~\file{.dtx} not \file{.sty} e.g.), there is the +% next declaration. It takes one optional and one mandatory +% argument. The optional is the |KVpref|, the mandatory the |KVfam|. +% \Define\DeclareDOXHead +\newcommand*\DeclareDOXHead[2][\gmd@KVprefdefault]{% + \csname DeclareDefining\endcsname + [type=dox, prefix=\bslash, KVpref=#1, KVfam=#2]% \HideDefining\DeclareOptionX + \DeclareOptionX +} + +% An example: +%\iffalse +\iffalse +%\fi\fi +\DeclareOptionX[Berg]<Lulu>{EvelynLear}{} +% Check in the index for +% \inverb|EvelynLear| and \inverb|\Berg@Lulu@EvelynLear|. +% Now we set in the comment layer +% |\DeclareDOXHead[Webern]{Lieder}|\DeclareDOXHead[Webern]{Lieder} and +\DeclareOptionX<AntonW>{ChneOelze} +% The latter example shows also overriding the option header by +% declaring the default. By the way, both the example options are +% not declared in the code actually. +%\iffalse\iffalse +\fi +%\fi +%\stanza +% Now the Heiko Oberdiek's \pk{kvoptions} package option definitions: +\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareStringOption +\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareBoolOption +\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareComplementaryOption +\DeclareDefining[type=kvo, prefix=\bslash, KVpref=]\DeclareVoidOption + +% The \pk{kvoptions} option definitions allow setting the default +% family/prefix for all definitions forth so let's provide analogon: +\def\DeclareKVOFam#1{% + \def\do##1{% + \csname DeclareDefining\endcsname + [type=kvo, prefix=\bslash, KVpref=, KVfam=#1]##1}% + \do\DeclareStringOption + \do\DeclareBoolOption + \do\DeclareComplementaryOption + \do\DeclareVoidOption +} + +% \ResumeAllDefining^^A~ it cancels |\DD\DD| and |\DD\bslash| effect. +% As a~nice exercise I~recommend to think why this list of declarations +% had to be preceded (in the comment layer) with |\HideAllDefining| +% and for which declarations of the above +% |\DeclareDefining\DeclareDefining| did not work. (The answers are +% commented out in the source file.) +%^^A~ I~had to precede the list of |\DeclareDefining|s with +%^^A~ |\HideAllDefining| in the commentary because the detectors of +%^^A~ some commands expect certain configurations of arguments and of +%^^A~ course such arguments do \emph{not} occur when such a~defining +%^^A~ command is being declared. That caused errors. Another reason is +%^^A~ that if not hidden, the detectors fired at the declared definers +%^^A~ of CSs and marked next |\DeclareDefining| as being defined. +%^^A +%^^A~ |\DD\DD| did not work for those three \pk{xkeyval} definers +%^^A~ declared with |\bslash| in the optional argument. To be precise, +%^^A~ it \emph{did work} perfectly: marked |\bslash| as being defined. +% +% One remark more: if you define (in the code) a~new defining command +% (I~did: a~shorthand for |\DeclareOptionX[gmcc]<>|), declare it as +% defining (in the commentary) \emph{after} it is defined. Otherwise +% its first occurence shall fire the detector and mark next CS or +% worse, shall make the detector expect some arguments that it won't +% find. + + +% \subsubdivision{Suspending (`hiding') and resuming detection} +% +% Sometimes we want to suspend automatic detection of definitions. For +% |\def| we defined suspending and resuming declarations in the +% previous section. Now let's take care of detection more generally. +% +% \stanza +% The next command has no arguments and suspends entire detection of +% definitions. +\def\HideAllDefining{% + \ifnum0=0\csname gmd@adef@allstored\endcsname + \SMglobal\StoreMacro\gmd@detectors + \global\@namedef{gmd@adef@allstored}{1}% + \fi + \global\emptify\gmd@detectors}% we make the carrier |\empty| not |\relax| to + % be able to declare new defining command in + % the scope of |\HideAll...| + +% The |\ResumeAllDefining| command takes no arguments and restores the +% meaning of the detectors' carrier stored with |\HideAllDefining| +\def\ResumeAllDefining{% + \ifnum1=0\csname gmd@adef@allstored\endcsname\relax + \SMglobal\RestoreMacro\gmd@detectors + \SMglobal\RestoreMacro\UnDef + \global\@namedef{gmd@adef@allstored}{0}% + \fi} + +% Note that |\ResumeAllDefining| discards the effect of any +% |\DeclareDefining| that could have occured between +% |\HideAllDefining| and itself. +% +% \stanza +% +% The |\HideDefining| command takes one argument which should be +% a~defining command (always without star). |\HideDefining| suspends +% detection of this command (also of its starred version) until +% |\ResumeDefining| of the same command or |\ResumeAllDefining|. +\def\HideDefining{\begingroup + \MakePrivateLetters + \Hide@Dfng} + +\def\Hide@Dfng#1{%%\UnDef + \escapechar\m@ne + \gn@melet{gmd@detect@\string#1}{relax}% + \gn@melet{gmd@detect@\string#1*}{relax}% + \ifx\def#1\global\relaxen\UnDef\fi + \endgroup} + + +% The |\ResumeDefining| command takes a~defining command as the +% argument and resumes its automatic detection. Note that it restores +% also the possibly undefined detectors of starred version of the +% argument but that is harmless I~suppose until we have millions of CSs. +\def\ResumeDefining{\begingroup + \MakePrivateLetters + \gmd@ResumeDfng} + +\def\gmd@ResumeDfng#1{% + \escapechar\m@ne + \SMglobal\RestoreMacro*{gmd@detect@\string#1}% + \SMglobal\RestoreMacro*{gmd@detect@\string#1*}% + \endgroup} + + +% \subdivision{Indexing of CSs} % The inner macro indexing macro. |#1| is the |\verb|'s delimiter; % |#2| is assumed to be the macro's name with MakeIndex-control chars % quoted. |#3| is a~macro storing the \catother\ macro's name, usually @@ -3051,7 +3948,6 @@ % used only to test if the entry should be specially formatted. % \changes{v0.98}{06/09/05}{Indexing the codelines improved to sort % with account of the \cs{filesep} (\cs{HLPrefix})} -% \CodeDefine\index@macro \newcommand*\index@macro[3][\verbatimchar]{{% \@ifundefined{gmd/iexcl/#3}%\label{iexcltest} {% |#3| is not excluded from index @@ -3097,11 +3993,18 @@ }{}% closing of |gmd/iexcl/| test. }} -%\CodeDefine\un@defentryze \CodeDefine\un@usgentryze + \def\un@defentryze#1{% \@xa\g@relaxen\csname gmd/defentry/#1\endcsname - \g@relaxen\last@defmark}% we care to clear the last definition -% marker checked by |\changes|. + \ifx\gmd@detectors\empty + \g@relaxen\last@defmark + \fi}% the last macro (assuming \cs{fi} is not a~macro :-) + % is only used by \cs{changes}. If we are in the scope of automatic + % detection of definitions, we want to be able not to use \inverb|\Define| + % but write |\changes| after a~definition and get proper entry. Note + % that in case of automatic detection of definitions + % |\last@defmark|'s value keeps until the next definition. + \def\un@usgentryze#1{% \@xa\g@relaxen\csname gmd/usgentry/#1\endcsname} @@ -3110,11 +4013,8 @@ % For the case of page-indexing a~macro in the commentary when % codeline index option is on: -% \CodeDefine\if@pageinclindex \CodeDefine*\@pageinclindextrue -% \CodeDefine*\@pageinclindexfalse \newif\if@pageinclindex -% \CodeDefine\quoted@eschar \newcommand*\quoted@eschar{\quotechar\bslash}% we'll redefine it when % indexing an environment. @@ -3136,13 +4036,13 @@ % to be the entry prefix. \let\gmdindexpagecs=\gmdindexrefcs \else -% \CodeDefIndex\gmdindexrefcs -% \CodeDefIndex\gmdindexpagecs +% \DefIndex\gmdindexrefcs +% \DefIndex\gmdindexpagecs \def \gmdindexrefcs#1#2#3#4{\gmiflink[clnum.#4]{% \csname#2\endcsname{#4}}}% \def \gmdindexpagecs#1#2#3#4{\hyperlink{page.#4}{% \csname#2\endcsname{\gmd@revprefix{#3}#4}}}% - % \stanza \CodeDefIndex\gmd@revprefix + % \stanza \DefIndex\gmd@revprefix \def\gmd@revprefix#1{% \def\@tempa{#1}% \ifx\@tempa\@empty p.\,\fi} @@ -3153,13 +4053,12 @@ % was perfectly understandable (|codelinenum.123| made by % |\refstepcounter| and |codelinenum.123| made by % |\gmhypertarget|). But since v0.98 it is not a~problem anymore - % 'cause during the authomatic |\hypertarget|ing the lines are labeled - % |clnum.|\<number>. When |\HLPrefix| was defined as dot, - % MakeIndex rejected the - % entries as `illegal page number'. - % \changes[\HLPrefix]{v0.98a}{06/09/05}{again \cs{@empty}fied - % since \cs{hypertarget}ing the codelines names them \cs[]{clnum} - % (since v0.98).} + % because during the automatic \inverb|\hypertarget|ing the + % lines are labeled |clnum.|\<number>. When |\HLPrefix| was + % defined as dot, MakeIndex rejected the entries as `illegal page + % number'. \changes[\HLPrefix]{v0.98a}{06/09/05}{again + % \cs{@empty}fied since \cs{hypertarget}ing the codelines names + % them \cs[]{clnum} (since v0.98).} \fi} % The definition is postponed till |\begin{document}| because of the % |\PageIndex| declaration (added for \docfm-compatibility), see @@ -3175,13 +4074,11 @@ % I~take account of three kinds of formatting the numbers: 1.~the % `def' entry, 2.~a~`usage' entry, 3.~a~common entry. As in \docfm , let % them be underlined, italic and upright respectively. -% \CodeDefine\DefEntry \CodeDefine\UsgEntry \def\DefEntry#1{\underline{#1}} \def\UsgEntry#1{\textit{#1}} % The third option will be just |\relax| by default: -% \CodeDefine\CommonEntryCmd \def\CommonEntryCmd{relax} -% In line \ref{CECmd} it's |\edef|ed to allow an `unm\"oglich' +% In line \ref{CECmd} it's |\edef|ed to allow an `unm\oumlaut glich' % situation that the user wants to have the common index entries % specially formatted. I~use this to make \emph{all} the index entries % of the (|\SelfInclude|d) driver file to be `usage', see codeline @@ -3191,48 +4088,44 @@ % special way. Each declaration puts the \catother ed name of the % macro given it as the argument into proper macro to be |\ifx|ed in % lines \ref{pnametestDef} and \ref{pnametestUsg} respectively. -% -% But first let's make a~version of |\@ifstar| that would work with -% |*|\catletter. It's analogous to |\@ifstar|. -% \CodeDefine\@ifstarl -\bgroup\catcode`\*=11 % -\firstofone{\egroup - \def\@ifstarl#1{\@ifnextchar *{\@firstoftwo{#1}}}} % Now we are ready to define a~couple of commands. % The |*| versions of % them are for marking environments and \emph{implicit} CSs. -% \CodeDefine\CodeDefIndex -% \CodeDefine*\CodeDefIndex* -\outer\def\CodeDefIndex{\begingroup +\outer\def\DefIndex{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Code@DefIndexStar}{\Code@DefIndex}} % \changes{v0.98d}{06/9/11}{The macros indexing and marginizing % macros (and other sequences) made \cs{long}} -%\CodeDefIndex\Code@DefIndex +%\DefIndex\Code@DefIndex \long\def\Code@DefIndex#1{\endgroup{% \escapechar\m@ne% because we will compare the macro's name with % a~string without the backslash. - \global\@defentryze{#1}}} + \@defentryze{#1}{1}}} % \label{stringamacro} -% \CodeDefIndex\Code@DefIndexStar +% \DefIndex\Code@DefIndexStar \long\def\Code@DefIndexStar#1{% \endgroup \addto@estoindex{#1}% - \@defentryze{#1}} + \@defentryze{#1}{0}} -% \CodeDefine\gmd@justadot \def\gmd@justadot{.} -%\CodeDefine\@defentryze \CodeDefine\@usgentryze -\long\def\@defentryze#1{% - \@xa\let\csname gmd/defentry/\string#1\endcsname\gmd@justadot% The - % \LaTeX\ |\@namedef| macro could not be used since it's not `long'. - % \CodeDefine\last@defmark - \xdef\last@defmark{\string#1}}% we |\string| the argument 'cause it's -% a~control sequence most probably. +\long\def\@defentryze#1#2{% + \@xa\glet\csname gmd/defentry/\string#1\endcsname\gmd@justadot% The\\ + % \LaTeX\ \inverb|\@namedef| macro could not be used since it's not `long'. + % \Define\last@defmark + \xdef\last@defmark{\string#1}% we |\string| the argument just in case it's + % a~control sequence. But when it can be a~CS, we |\@defentryze| in + % a~scope of |\escapechar=-1|, so there will never be a~backslash at + % the beginning of |\last@defmark|'s meaning (unless we + % |\@defentryze| |\\|). + \@xa\gdef\csname gmd/isaCS/\last@defmark\endcsname{#2}}% |#2| is +% either 0 or 1. It is the information whether this entry is a~CS or +% not. + \long\def\@usgentryze#1{% \@xa\let\csname gmd/usgentry/\string#1\endcsname\gmd@justadot} @@ -3240,18 +4133,16 @@ \@emptify\envirs@toindex % Now we'll do the same for the `usage' entries: -%\CodeDefine\CodeUsgIndex -%\CodeDefine*\CodeUsgIndex* \outer\def\CodeUsgIndex{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Code@UsgIndexStar}{\Code@UsgIndex}} % The |*| possibility is for marking environments etc. -% \CodeDefIndex\Code@UsgIndex +% \DefIndex\Code@UsgIndex \long\def\Code@UsgIndex#1{\endgroup{% \escapechar\m@ne \global\@usgentryze{#1}}} -% \CodeDefIndex\Code@UsgIndexStar +% \DefIndex\Code@UsgIndexStar \long\def\Code@UsgIndexStar#1{% \endgroup \addto@estoindex{#1}% @@ -3259,23 +4150,20 @@ % For the symmetry, if we want to mark a~control sequence or an % environment's name to be indexed as a~`normal' entry, let's have: -% \CodeDefine\CodeCommonIndex -% \CodeDefine\CodeCommonIndex* \outer\def\CodeCommonIndex{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Code@CommonIndexStar}{\Code@CommonIndex}} -% \CodeDefIndex\Code@CommonIndex +% \DefIndex\Code@CommonIndex \long\def\Code@CommonIndex#1{\endgroup} -% \CodeDefIndex\Code@CommonIndexStar +% \DefIndex\Code@CommonIndexStar \long\def\Code@CommonIndexStar#1{% \endgroup\addto@estoindex{#1}} % And now let's define commands to index the control sequences and % environments occurring in the narrative. -% \CodeDefine\text@indexmacro \long\def\text@indexmacro#1{% {\escapechar\m@ne \xdef\macro@pname{\xiistring#1}}% \@xa\quote@mname\macro@pname\relax% we process the CS's @@ -3292,17 +4180,16 @@ % The macro defined below (and the next one) are executed only before % a~\catother\ macro's name i.e.\ a~nonempty sequence of \catother\ % character(s). This sequence is delimited (guarded) by |\relax|. -% \CodeDefine\quote@mname \def\quote@mname{% \def\macro@iname{}% \quote@charbychar} -% \CodeDefIndex\quote@charbychar +% \DefIndex\quote@charbychar \def\quote@charbychar#1{% \if\relax#1% finish quoting when you meet |\relax| or: \else \quote@char#1% - \xdef\macro@iname{\macro@iname \maybe@quote#1}% + \xdef\macro@iname{\macro@iname \gmd@maybequote#1}% \afterfi\quote@charbychar \fi} @@ -3310,22 +4197,19 @@ % which in plain version should be a~control sequence and in the % starred version also a~sequence of chars allowed in environment names or % made other by |\MakePrivateOthers| macro, taken in the curly braces. -% \CodeDefine\TextUsgIndex -% \CodeDefine*\TextUsgIndex* \def\TextUsgIndex{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Text@UsgIndexStar}{\Text@UsgIndex}} -% \CodeDefIndex\Text@UsgIndex +% \DefIndex\Text@UsgIndex \long\def\Text@UsgIndex#1{% \endgroup\@usgentryze#1% \text@indexmacro#1} -% \CodeDefIndex\Text@UsgIndexStar +% \DefIndex\Text@UsgIndexStar \long\def\Text@UsgIndexStar#1{\endgroup\@usgentryze{#1}% \text@indexenvir{#1}} -% \CodeDefine\text@indexenvir \long\def \text@indexenvir#1{% \edef\macro@pname{\xiistring#1}% \if\bslash\@xa\@firstofmany\macro@pname\@@nil% if @@ -3340,7 +4224,7 @@ \@xa\quote@mname\@tempa\relax% \label{quote@mname comm}we % process |\sting|ed |#1| char by char and quote MakeIndex % controls. |\relax| is the iterating macro's stopper. The quoted - % |\string|ed |#1| shall be the expansion of |\macro@iname|. + % |\string|ed |#1| shall be the meaning of |\macro@iname|. {\if@tempswa \def\quoted@eschar{\quotechar\bslash}% \else\@emptify\quoted@eschar\fi% we won't print any backslash before @@ -3348,17 +4232,15 @@ \do@properindex% see line \ref{do@properindex}. \index@macro\macro@iname\macro@pname}} -% \CodeDefine\TextCommonIndex -% \CodeDefine*\TextCommonIndex* \def\TextCommonIndex{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Text@CommonIndexStar}{\Text@CommonIndex}} -%\CodeDefIndex\Text@CommonIndex +%\DefIndex\Text@CommonIndex \long\def\Text@CommonIndex#1{\endgroup \text@indexmacro#1} -% \CodeDefIndex\Text@CommonIndexStar +% \DefIndex\Text@CommonIndexStar \long\def\Text@CommonIndexStar#1{\endgroup \text@indexenvir{#1}} @@ -3367,37 +4249,36 @@ % But we wish the CSs not only to be indexed special way but also % to be put in marginpars. So: -% \CodeDefine\CodeMarginize -% \CodeDefine*\CodeMarginize* \outer\def\CodeMarginize{\begingroup \MakePrivateLetters - \@ifstarl{\MakePrivateOthers\egCode@MarginizeEnvir}{\egCode@MarginizeMacro}} + \@ifstarl + {\MakePrivateOthers\egCode@MarginizeEnvir} + {\egCode@MarginizeMacro}} % One more expansion level because we wish |\Code@MarginizeMacro| not % to begin with |\endgroup| because in the subsequent macros it's used % \emph{after} ending the re|\catcode|ing group. -% \CodeDefIndex\egCode@MarginizeMacro +% \DefIndex\egCode@MarginizeMacro \long\def\egCode@MarginizeMacro#1{\endgroup \Code@MarginizeMacro#1} -% \CodeDefIndex\Code@MarginizeMacro +% \DefIndex\Code@MarginizeMacro \long\def\Code@MarginizeMacro#1{{\escapechar\m@ne \@xa\glet\csname gmd/2marpar/\string#1\endcsname\gmd@justadot %^^A \xdef\mname@tomarginpar{\xiistring#1} }} -% \CodeDefIndex\egCode@MarginizeEnvir +% \DefIndex\egCode@MarginizeEnvir \long\def\egCode@MarginizeEnvir#1{\endgroup \Code@MarginizeEnvir{#1}} -% \CodeDefIndex\Code@MarginizeEnvir +% \DefIndex\Code@MarginizeEnvir \long\def\Code@MarginizeEnvir#1{\addto@estomarginpar{#1}} % And a~macro really putting the environment's name in a~marginpar % shall be trigged at the beginning of the nearest codeline. % % Here it is: -% \CodeDefine\mark@envir \def\mark@envir{%\label{mark@envir} \ifx\envirs@tomarginpar\@empty \else @@ -3407,27 +4288,33 @@ \fi \ifx\envirs@toindex\@empty \else - \def\do##1{% the |\envirs@toindex| list contains |\string|ed - % macros or environments' names in braces and each preceded - % with |\do|. - \if\bslash\@firstofmany##1\@@nil% if - % |##1| begins with a~backslash, we will gobble it for - % MakeIndex not see it. - \edef\@tempa{\@gobble##1}% - \@tempswatrue - \else - \edef\@tempa{##1}\@tempswafalse - \fi - \@xa\quote@mname\@tempa\relax% see line - % \ref{quote@mname comm} \& subs. for commentary. - {\if@tempswa - \def\quoted@eschar{\quotechar\bslash}% - \else\@emptify\quoted@eschar\fi - \index@macro\macro@iname{##1}}}% + \gmd@doindexingtext \envirs@toindex \g@emptify\envirs@toindex% \fi} +\def\gmd@doindexingtext{% + \def\do##1{% the |\envirs@toindex| list contains |\string|ed + % macros or environments' names in braces and each preceded + % with |\do|. We extract the definition because we use it also in + % line \ref{gmd@doindexingtext 2nd use}. + \if\bslash\@firstofmany##1\@@nil% if + % |##1| begins with a~backslash, we will gobble it for + % MakeIndex not see it. + \edef\gmd@resa{\@gobble##1}% + \@tempswatrue + \else + \edef\gmd@resa{##1}\@tempswafalse + \fi + \@xa\quote@mname\gmd@resa\relax% see line + % \ref{quote@mname comm} \& subs. for commentary. + {\if@tempswa + \def\quoted@eschar{\quotechar\bslash}% + \else\@emptify\quoted@eschar\fi + \index@macro\macro@iname{##1}}}% +} + + % One very important thing: initialisation of the list macros: \@emptify\envirs@tomarginpar \@emptify\envirs@toindex @@ -3437,9 +4324,7 @@ % ourselves with |\makeatletter| for instance when we want mark some % CS. And |\MakePrivateOthers| for the environment and other string % case. -% \CodeDefine\CodeDefine -% \CodeDefine*\CodeDefine* -\outer\def\CodeDefine{\begingroup +\outer\def\Define{\begingroup \MakePrivateLetters % We do |\MakePrivateLetters| before |\@ifstarl| in order to avoid % a~situation that \TeX\ sees a~control sequence with improper name @@ -3447,26 +4332,23 @@ % (because |\@ifstarl| establishes the |\catcode|s for the next token): \@ifstarl{\MakePrivateOthers\Code@DefEnvir}{\Code@DefMacro}} -% \CodeDefine\CodeUsage -% \CodeDefine*\CodeUsage* \outer\def\CodeUsage{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Code@UsgEnvir}{\Code@UsgMacro}} % And then we launch the macros that close the group and do the work. -% \CodeDefIndex\Code@DefMacro \long\def\Code@DefMacro#1{% \Code@DefIndex#1% we use the internal macro; it'll close the group. \Code@MarginizeMacro#1} -% \CodeDefIndex\Code@UsgMacro +% \DefIndex\Code@UsgMacro \long\def\Code@UsgMacro#1{% \Code@UsgIndex#1% here also the internal macro; it'll close the group \Code@MarginizeMacro#1} % The next macro is taken verbatim ;-) from \docfm\ and the subsequent % |\let|s, too. -% \CodeDefIndex\codeline@wrindex +% \DefIndex\codeline@wrindex \def\codeline@wrindex#1{\if@filesw \immediate\write\@indexfile {\string\indexentry{#1}% @@ -3477,23 +4359,22 @@ \if@pageindex \let\special@index=\index \else - % \CodeDefIndex\special@index + % \DefIndex\special@index \let\special@index=\codeline@wrindex % \label{codeline indexnumber declaration} \fi}% postponed till |\begin{document}| with respect of \docfm-like % declarations. % And in case we don't want to index: -% \CodeDefine\gag@index \def\gag@index{\let\index=\@gobble %\label{gag@index} \let\codeline@wrindex=\@gobble} % We'll use it in one more place or two. And we'll wish to be able to % undo it so % let's copy the original meanings: -% \CodeDefIndex\@@index \CodeDefIndex\@@codeline@wrindex +% \DefIndex\@@index \DefIndex\@@codeline@wrindex \StoreMacros{\index\codeline@wrindex} -% \CodeDefine\ungag@index + \def\ungag@index{\RestoreMacros{\index\@@codeline@wrindex}} %\label{ungag@index} @@ -3509,27 +4390,27 @@ % do not require to be used \emph{immediately} before the line containig the % CS to be marked. We separate indexing from marginizing to leave % a~possibility of doing only one of those things. -% \CodeDefIndex\Code@DefEnvir +% \DefIndex\Code@DefEnvir \long\def\Code@DefEnvir#1{% \endgroup \addto@estomarginpar{#1}% \addto@estoindex{#1}% - \@defentryze{#1}} + \@defentryze{#1}{0}} -% \CodeDefIndex\Code@UsgEnvir +% \DefIndex\Code@UsgEnvir \long\def\Code@UsgEnvir#1{% \endgroup \addto@estomarginpar{#1}% \addto@estoindex{#1}% \@usgentryze{#1}} -% \CodeDefIndex\addto@estomarginpar +% \DefIndex\addto@estomarginpar \long\def\addto@estomarginpar#1{% \edef\@tempa{\@nx\do{\xiistring#1}}% we |\string| the argument to % allow it to be a~control sequence. \@xa\addtomacro\@xa\envirs@tomarginpar\@xa{\@tempa}} -% \CodeDefIndex\addto@estoindex +% \DefIndex\addto@estoindex \long\def\addto@estoindex#1{% \edef\@tempa{\@nx\do{\xiistring#1}} \@xa\addtomacro\@xa\envirs@toindex\@xa{\@tempa}} @@ -3539,21 +4420,19 @@ % or another string in the commentary. As the `code' commands this also % has plain and starred version, first for CSs appearing explicitly and the % latter for the strings and CSs appearing implicitly. -% \CodeDefine\TextUsage -% \CodeDefine*\TextUsage* \def\TextUsage{\begingroup %\label{TextUsage} \MakePrivateLetters \@ifstarl{\MakePrivateOthers\Text@UsgEnvir}{\Text@UsgMacro}} -% \CodeDefIndex\Text@UsgMacro +% \DefIndex\Text@UsgMacro \long\def\Text@UsgMacro#1{% \endgroup{\tt\xiistring#1}% \Text@Marginize#1% \begingroup\Code@UsgIndex#1% we declare the kind of formatting of the entry. \text@indexmacro#1} -% \CodeDefIndex\Text@UsgEnvir +% \DefIndex\Text@UsgEnvir \long\def\Text@UsgEnvir#1{% \endgroup{\tt\xiistring#1}% \Text@Marginize{#1}% @@ -3565,13 +4444,11 @@ % definition present within the narrative because we think there won't % be any: one defines macros and environments in the code not in % the commentary. -% \CodeDefine\TextMarginize -% \CodeDefine*\TextMarginize* \def\TextMarginize{\begingroup \MakePrivateLetters \@ifstarl{\MakePrivateOthers\egText@Marginize}{\egText@Marginize}} -% \CodeDefIndex\egText@Marginize +% \DefIndex\egText@Marginize \long\def\egText@Marginize#1{\endgroup \Text@Marginize#1} @@ -3585,7 +4462,6 @@ % % You may wish to put not only macros and environments to % a~marginpar. - % \CodeDefine\gmdmarginpar \long\def\gmdmarginpar#1{% \marginpar{\raggedleft\strut \hskip0ptplus100ptminus100pt% @@ -3595,7 +4471,6 @@ \long\def\gmdmarginpar#1{}% \fi -% \CodeDefine\Text@Marginize \long\def\Text@Marginize#1{% \gmdmarginpar{\marginpartt\xiistring#1}} % Note that the above macro will just gobble its argument if the @@ -3613,7 +4488,7 @@ % count only the codelines, then a~macro or an environment marked in % the commentary should have page number not codeline number. This we % declare here, among others\ we add the letter |p| before the page number. -% \CodeDefIndex\do@properindex +% \DefIndex\do@properindex \def\do@properindex{%\label{do@properindex} \if@countalllines\else \@pageinclindextrue @@ -3637,7 +4512,7 @@ % with any particular number of any char :-)\,. % \changes{v0.98b}{06/09/07}{To \env{macrocode(*)} default % definitions \cs{QueerEOL} added} -%\CodeDefine*{macrocode*} + \newenvironment*{macrocode*}{%\label{macrocode*} \if@codeskipput\else\par\addvspace\CodeTopsep\@codeskipputgtrue\fi \QueerEOL}%^^A\docstrips @@ -3648,17 +4523,18 @@ % % So we should make the spaces \emph{invisible} for the unstarred % version. -%\CodeDefine*{macrocode} + \newenvironment*{macrocode}{%\label{macrocode} \if@codeskipput\else\par\addvspace\CodeTopsep\@codeskipputgtrue\fi \CodeSpacesBlank\QueerEOL}%^^A\docstrips {\par\addvspace\CodeTopsep\CodeEscapeChar\\} -% Note that at the end of both the above environments the |\|'s r\^ole +% Note that at the end of both the above environments the |\|'s +% r\ocircum le % as the code escape char is restored. This is crafted for the % |\SpecialEscapechar| macro's compatibility: this macro influences % only the first \env{macrocode} environment. The situation that the % user wants some queer escape char in general and in a~particular -% \env{macrocode} yet another seems to me ``unm\"oglich, +% \env{macrocode} yet another seems to me ``unm\oumlaut glich, % Prinzessin''\footnote{Richard Strauss after Oscar Wilde, ^^B % \textit{Salome}.}. % @@ -3669,10 +4545,10 @@ % typeset \env{macrocode}s as if they were a~kind of \env{verbatim}, % that is to leave the code layer and narration layer philosophy. % -%\CodeDefine*{oldmc} -%\CodeDefine*{oldmc*} +%\Define*{oldmc} \let\oldmc\macrocode \let\endoldmc\endmacrocode +%\Define*{oldmc*} \n@melet{oldmc*}{macrocode*} \n@melet{endoldmc*}{endmacrocode*} @@ -3682,20 +4558,20 @@ \@xa\addtomacro\csname oldmc*\endcsname{% \@oldmacrocode@launch} -% \CodeDefIndex\@oldmacrocode@launch +% \DefIndex\@oldmacrocode@launch \def\@oldmacrocode@launch{% \emptify\gmd@textEOL% to disable it in |\gmd@docstripdirective| % launched within the code. \glet\stored@code@delim\code@delim - \@makeother\^^B\CodeDelim*\^^B% + \@makeother\^^B\CodeDelim\^^B% \ttverbatim \gmd@DoTeXCodeSpace% - \@makeother\|% 'cause |\ttverbatim| doesn't do that. + \@makeother\|% because |\ttverbatim| doesn't do that. \MakePrivateLetters% see line \ref{MPL}.\par % ^^A \@xa\@makeother\code@delim \docstrips@percent \@makeother\>% % sine qua non of the automatic delimiting is replacing possible % |*|\catother in the environment's name with |*|\catletter. - % Not to complicate assume |*| may occure at most once and only at + % Not to complicate assume |*| may occur at most once and only at % the end. We also assume the environment's name consists only of % character tokens whose catcodes (except of |*|) will be the same % in the verbatim text. @@ -3716,7 +4592,7 @@ % with |*|\catletter or else nothing will be added. (Note that a~|*| % not at the end of env.\ name would cause a~disaster.) -% \CodeDefine\@oldmacrocode +%^^A~ \Define\@oldmacrocode \bgroup \catcode`[=1 \catcode`]=2 \catcode`\{=\active \@makeother\} @@ -3743,8 +4619,6 @@ \@xa\CodeDelim\stored@code@delim \gmd@mchook}% see line \ref{gmd@mchook} - -% \CodeDefine\VerbMacrocodes \def\VerbMacrocodes{% \let\macrocode\oldmc \n@melet{macrocode*}{oldmc*}} @@ -3766,20 +4640,20 @@ % \ds\ directive typesetting. (Thanks to |\ttverbatim| all the |<| % are `other'.) \def\gmd@codecheckifds#1#2{% note that |#1| is just to gobble - % \nlpercent|\gmd@charbychar| token. + % \inverb|\gmd@charbychar| token. % ^^A \typeout{code if ds \on@line}% \if@dsdir\@dsdirgfalse \if\@nx<\@nx#2\afterfifi\gmd@docstripdirective - \else\afterfifi{\twelvepercent#1#2}% + \else\afterfifi{\xiipercent#1#2}% \fi - \else\afterfi{\twelvepercent#1#2}% + \else\afterfi{\xiipercent#1#2}% \fi} % % \begin{environment}{macro} % Almost the same we do with the \env{macro(*)} environments, stating % only their argument to be processed as the `def' entry. Of course, % we should re|\catcode| it first. -% \CodeDefIndex*\macro +% \DefIndex*\macro \newenvironment{macro}{%\label{macro} \@tempskipa=\MacroTopsep \if@codeskipput\advance\@tempskipa by-\CodeTopsep\fi @@ -3789,13 +4663,13 @@ % argument. (We'll use the |\macro| macro also in the environment % for describing and defining environments.) \gmd@ifonetoken\Hybrid@DefMacro\Hybrid@DefEnvir}% -% \CodeDefIndex*\endmacro +% \DefIndex*\endmacro {\par\addvspace\MacroTopsep\@codeskipputgtrue} % It came out that the \docfm's author(s) give the \env{macro} % environment also starred versions of commands as argument. It's OK % since (the default version of) |\MakePrivateLetters| makes |*| % a~letter and therefore such a~starred version is just one CS. - % However, in \pk{doc.dtx} occure \env{macro}s that mark + % However, in \pk{doc.dtx} occur \env{macro}s that mark % \emph{implicit} definitions i.e., such that the defined CS is not % scanned in the subsequent code. % @@ -3804,7 +4678,7 @@ % for marking implicit definitions, define the star % version: \@namedef{macro*}{\let\gmd@ifonetoken\@secondoftwo\macro} -% \CodeDefIndex*\endmacro* +% \DefIndex*\endmacro* \@xa\let\csname endmacro*\endcsname\endmacro % Note that \env{macro} and \env{macro*} have the same effect for % more-than-one-token arguments thanks to |\gmd@ifonetoken|'s meaning @@ -3823,7 +4697,6 @@ % First define an |\if|-like macro that turns true when the string % given to it consists of just one token (or one |{|\<text>|}|, to % tell the whole truth). -% \CodeDefine\gmd@ifsingle \def\gmd@ifsingle#1#2\@@nil{% \def\@tempa{#2}% \ifx\@tempa\@empty} @@ -3839,10 +4712,9 @@ % token of the argument will not confuse \TeX\ since the first token % is just gobbled. The possibility of occurrence of |\if...| or so as % a~not-first token seems to be negligible. -% \CodeDefine\gmd@ifonetoken \def\gmd@ifonetoken#1#2#3{% \def\@tempb{#3}% We hide |#3| from \TeX\ in case it's |\if...| or - % so. \nlpercent|\@tempa| is used in \nlpercent|\gmd@ifsingle|. + % so. \inverb|\@tempa| is used in \inverb|\gmd@ifsingle|. \gmd@ifsingle#3\@@nil \afterfi{\@xa#1\@tempb}% \else @@ -3853,7 +4725,6 @@ % macros. They mark their argument with a~certain subtlety: they put % it in a~marginpar at the point where they are and postpone indexing % it till the first scanned occurrence or just the first code line met. -% \CodeDefine\Hybrid@DefMacro \CodeDefine\Hybrid@DefEnvir \long\def\Hybrid@DefMacro#1{% \Code@DefIndex{#1}% this macro closes the group opened by |\macro|. \Text@MarginizeNext{#1}} @@ -3863,7 +4734,6 @@ % |\macro|. \Text@MarginizeNext{#1}} -%\CodeDefine\Text@MarginizeNext \long\def\Text@MarginizeNext#1{% \gmd@evpaddonce{\Text@Marginize{#1}\ignorespaces}} %^^A~\strut from before Text@Marginize deleted as unnecessary in everypar. @@ -3871,7 +4741,6 @@ % The following macro adds its argument to |\everypar| using an auxiliary % macro to wrap the stuff in. The auxiliary macro has % a~self-destructor built in so it |\relax|es itself after first use. -%\CodeDefine\gmd@evpaddonce \long\def\gmd@evpaddonce#1{% \stepnummacro\gmd@oncenum \@xa\long\@xa\edef% \CodeUsgIndex*{NeuroOncer} @@ -3879,9 +4748,9 @@ \@nx\g@relaxen \csname gmd/evp/NeuroOncer\gmd@oncenum\endcsname}% Why does it % work despite it shouldn't? Because when the CS got with - % \nlpercent|\csname...\endcsname| is undefined, it's equivalent + % \inverb|\csname...\endcsname| is undefined, it's equivalent % |\relax| and therefore unexpandable. That's why it passes - % \nlpercent|\edef| and is able to be assigned. + % \inverb|\edef| and is able to be assigned. \@xa\addtomacro\csname gmd/evp/NeuroOncer\gmd@oncenum\endcsname{#1}% \@xa\addto@hook\@xa\everypar\@xa{% \csname gmd/evp/NeuroOncer\gmd@oncenum\endcsname}% @@ -3911,24 +4780,23 @@ % the list of expelled CSs. Here we'll deal another way. For each CS % to be excluded we'll make (|\let|, to be precise) a~control sequence % and then we'll be checking if it's undefined (|\ifx|-equivalent -% |\relax|).\footnote{This idea comes from Marcin Woli\'nski.} +% |\relax|).\footnote{This idea comes from Marcin Woli\nacute ski.} % -% \CodeDefine\DoNotIndex +\def\DoNotIndex{\bgroup\MakePrivateLetters\DoNot@Index} % \changes{v0.97}{06/09/04}{\cs{MakePrivateLetters} added} % \changes{v0.98}{06/09/05}{Removed since it had not worked. The % macros in the argument should be separated with commas. I~understood -% why it didn't work: 'cause 't was iside a~command. So I~put it back} +% why it didn't work: because 't was iside a~command. So I~put it back} % \changes{v0.98d}{06/9/11}{Unmade \cs{global}} -\def\DoNotIndex{\bgroup\MakePrivateLetters\DoNot@Index} -% \CodeDefIndex\DoNot@Index + \long\def\DoNot@Index#1{\egroup% we close the group, \let\gmd@iedir\gmd@justadot% we declare the direction of the cluding % to be \emph{ex}cluding. We act this way to be able to reverse the % exclusions easily later. \dont@index#1.} -% \CodeDefIndex\dont@index +% \DefIndex\dont@index \long\def\dont@index#1{% \def\@tempa{\@nx#1}% My \TeX\ Guru's trick to deal with |\fi| % and such, i.e., to hide from \TeX\ when it is processing a~test's @@ -3953,17 +4821,18 @@ %^^A( % Let's now give the exclude list copied \*verbatim ;-) from -% \pk{doc.dtx}. I~give it in the code layer 'cause I~suppose one will +% \pk{doc.dtx}. I~give it in the code layer because I~suppose one will % document not \LaTeX\ source but normal packages. % % \begin{CodeSpacesSmall} -% \DoNotIndex\DoNotIndex \CodeDefine\DefaultIndexExclusions +% \DoNotIndex\DoNotIndex \Define\DefaultIndexExclusions \DoNotIndex\{ \DoNotIndex\}% \label{DNIbraces}the index entries of % these two CSs would be rejected by MakeIndex anyway. \begin{MakePrivateLetters}% Yes, |\DoNotIndex| does % |\MakePrivateLetters| on its own but No, it won't have any effect % if it's given in another macro's |\def|. + % \HideAllDefining \gdef\DefaultIndexExclusions{% \DoNotIndex{\@ \@@par \@beginparpenalty \@empty}%\label{DIE1} \DoNotIndex{\@flushglue \@gobble \@input}% @@ -4018,7 +4887,7 @@ \DoNotIndex{\clearpage \closein \lowercase \@inlabelfalse}% \DoNotIndex{\selectfont \mathcode \newmathalphabet \rmdefault}% \DoNotIndex{\bfdefault}% - % From the above list I~removed some |\new...| declarations 'cause + % From the above list I~removed some |\new...| declarations because % I~think it may be useful to see gathered the special |\new...|s of % each kind. For the same reason I~would not recommend excluding % from the index such declarations as |\AtBeginDocument|, @@ -4067,15 +4936,15 @@ \DoNotIndex{\@sverb \@sxverbatim}% \DoNotIndex{\@tempcnta \@tempcntb \@tempskipa \@tempskipb}%\\ % I~think the layout parameters even the kernel, should not be - % excluded: \nlpercent|\@topsep| \nlpercent|\@topsepadd|^^B - % \ \nlpercent|\abovedisplayskip| \nlpercent|\clubpenalty| etc. + % excluded: \inverb|\@topsep| \inverb|\@topsepadd|^^B + % \ \inverb|\abovedisplayskip| \inverb|\clubpenalty| etc. \DoNotIndex{\@writeckpt}% \DoNotIndex{\bfseries \chapter \part \section \subsection}% \DoNotIndex{\subsubsection}% \DoNotIndex{\char \check@mathfonts \closeout}% \DoNotIndex{\fontsize \footnotemark \footnotetext \footnotesize}% \DoNotIndex{\g@addto@macro \hfilneg \Huge \huge}% - \DoNotIndex{\hyphenchar \if@partsw \IfFileExists \in@@}% + \DoNotIndex{\hyphenchar \if@partsw \IfFileExists }% \DoNotIndex{\include \includeonly \indexspace}% \DoNotIndex{\itshape \language \LARGE \Large \large}% \DoNotIndex{\lastbox \lastskip \m@th \makeglossary}% @@ -4096,7 +4965,7 @@ % I~put all the expellings into a~macro because I~want them % to be optional. \end{MakePrivateLetters} -% \end{CodeSpacesSmall} +% \end{CodeSpacesSmall} \ResumeAllDefining % And we execute it due to the (lack of) counter-corresponding option: \if@indexallmacros\else @@ -4107,15 +4976,13 @@ % If we expelled so many CSs, someone may like it in general but % he/she may need one or two expelled to be indexed back. So % -% \CodeDefine\DoIndex +\def\DoIndex{\bgroup\MakePrivateLetters\Do@Index} % \changes{v0.97}{06/09/04}{\cs{MakePrivateLetters} added.} % \changes{v0.98}{06/09/05}{\cs{MakePrivateLetters} removed since it -% hadn't worked. I~understood why it didn't work: 'cause +% hadn't worked. I~understood why it didn't work: because % 't was iside a~command and I~put it back} % \changes{v0.98d}{06/9/11}{Unmade \cs{global}} -\def\DoIndex{\bgroup\MakePrivateLetters\Do@Index} -% \CodeDefIndex\Do@Index \long\def\Do@Index#1{\egroup\@relaxen\gmd@iedir\dont@index#1.}% note % we only redefine an auxiliary CS and launch also |\dont@index| inner % macro. @@ -4125,8 +4992,6 @@ % \himher self. This declaration OCSR, but anyway let's provide the % counterpart. It OCSR, too. % -% \CodeDefine\UndoDefaultIndexExclusions -% \changes{v0.98d}{06/9/11}{Unmade \cs{global}} \def\UndoDefaultIndexExclusions{% \StoreMacro\DoNotIndex % ^^A\dont@index @@ -4135,6 +5000,7 @@ \DefaultIndexExclusions % ^^A \RestoreMacro\dont@index \RestoreMacro\DoNotIndex} +% \changes{v0.98d}{06/9/11}{Unmade \cs{global}} % % @@ -4144,15 +5010,14 @@ % message into the document above the index. It is implemented by % redefining |\index@prologue|, a macro which holds the default % text. We'd better make it a |\long| macro to allow |\par| commands -% in its argument.\end{quotation} \CodeDefine\IndexPrologue +% in its argument.\end{quotation} \long\def\IndexPrologue#1{\@bsphack\def\index@prologue{#1}\@esphack} % \label{IndexPrologue} -% \CodeDefine\indexdiv +\def\indexdiv{\@ifundefined{chapter}{\section*}{\chapter*}} % \changes{v0.98a}{06/09/06}{modified to contain the star so that % it may be redefined for tests.} -\def\indexdiv{\@ifundefined{chapter}{\section*}{\chapter*}} -% \CodeDefine\index@prologue + \@ifundefined{index@prologue} {\def\index@prologue{\indexdiv{Index}% \markboth{Index}{Index}% Numbers written in italic refer to the \if@pageindex pages \else @@ -4177,11 +5042,10 @@ % During the preparation of this package for publishing I~needed % only to add something at the end of the default index prologue. So -% \CodeDefine\AtDIPrologue -% \changes{v0.98c}{06/9/8}{added 'cause of need} -% \CodeDefIndex\gmd@dip@hook \CodeDefine\AtDIPrologue +% \DefIndex\gmd@dip@hook \@emptify\gmd@dip@hook \long\def\AtDIPrologue#1{\g@addto@macro\gmd@dip@hook{#1}} +% \changes{v0.98c}{06/9/8}{added because of need} % The Author(s) of \docfm\ assume \pk{multicol} is known not to % everybody. My assumption is the other so @@ -4194,25 +5058,19 @@ % available space. The number of columns set is controlled by the % counter |\c@IndexColumns| which can be changed with a % |\setcounter| declaration.\end{quotation} -% \CodeDefine\IndexMin \newdimen\IndexMin \IndexMin = 133pt\relax% originally it was set % 80\,pt, but with my default prologue there's at least 4.7\,cm needed % to place the prologue and some index entries on the same page. -% \CodeDefine*{IndexColumns} -% \CodeDefIndex*{\c@IndexColumns} \newcount\c@IndexColumns \c@IndexColumns = 3 -% \CodeDefine*{theindex} \renewenvironment{theindex} {\begin{multicols}\c@IndexColumns[\index@prologue][\IndexMin]% \IndexLinksBlack \IndexParms \let\item\@idxitem \ignorespaces}% {\end{multicols}} -%\CodeDefine\IndexLinksBlack \def\IndexLinksBlack{\hypersetup{linkcolor=black}}% To make Adobe % Reader work faster. -% \CodeDefine\IndexParms \@ifundefined{IndexParms} {\def\IndexParms{% % \label{IndexParms} @@ -4239,7 +5097,6 @@ % col\-umns look better when they are |\raggedright| in my opinion. }}{} - % \CodeDefine\PrintIndex \def\PrintIndex{% we ensure the standard meaning of the line end % character not to cause a~disaster. \@ifQueerEOL{\StraightEOL\printindex\QueerEOL}{\printindex}} @@ -4257,98 +5114,83 @@ % % \subdivision{The \ds\ Directives} % -% \StraightEOL -% \iffalse -% -% This passage is obsoleted on 2006/11/30. -% -% In the \gmdoc\ thinking, the \ds\ directives belong to the -% narration layer since they all begin with |%|. For now I~don't -% have a~more minimal idea than to define a~pair of macros the first of -% which would |\active|ate the |<| and the other, assigned to the -% active |<|, would do the work and re`other' the |<| back. -% -% We provide two versions of the seargant-activating macro: the first -% makes only the first subsequent seargant typeset a~\ds\ -% directive (and the previous meaning of the |<| will be restored, the -% latter doesn't restore the previous meaning of |<| after (by) the -% first occurrence and the latter obeys usual scoping rules while the -% scoping rules of the first (|\docstrip|) are more strict: the scope -% is delimited by the first occurrence of the subject~|<|. -% -% Let us remeber that, just as all the control sequences except -% |\relax|, you can use |\docstrips| as an environment, i.e., in the -% |\begin{docstrips}|\dots |\end{docstrips}| syntax. And, that -% \env{macrocode} environment declares it. -% \bgroup\catcode`\<=\active -% \firstofone{\egroup -% % \stanza -% % \CodeDefine\docstrip -% \newcommand*\docstrip{% -% \gmd@storesearg -% \catcode`\<=\active -% \gmd@setdocstrips -% \let\gmd@docstripshook=\gmd@restoresearg}% -% % \stanza -% % \CodeDefine\docstrips -% \newcommand*\docstrips{% -% \catcode`\<=\active -% \gmd@setdocstrips -% \@emptify\gmd@docstripshook}% -% % \stanza -% % \CodeDefIndex\gmd@setdocstrips -% \def\gmd@setdocstrips{% -% \def<{\ifmmode\sgtleftxii\else\afterfi\gmd@docstripdirective\fi}} -% %\stanza -% % \CodeDefIndex\gmd@storesearg -% \def\gmd@storesearg{% -% \edef\gmd@SeargantCat{\the\catcode`\<}% -% \ifnum\gmd@SeargantCat=\active -% \let\gmd@SeargantMng=<% -% \fi} - -% % \CodeDefIndex\gmd@restoresearg -% \def\gmd@restoresearg{% -% \catcode`\<=\gmd@SeargantCat\relax -% \ifnum\gmd@SeargantCat=\active -% \let<=\gmd@SeargantMng -% \fi}% -% % \stanza -% }% of |\active| |<|'s |\firstofone| -% -% \fi ^^A~of the obsoletion iffalse -% \QueerEOL - -% \CodeDefine\gmd@docstripdirective -{\@makeother\<\@makeother\> - \glet\sgtleftxii=< - -\gdef\gmd@docstripdirective{% - \begingroup\let\do=\@makeother - \do\*\do\/\do\+\do\-\do\,\do\&\do\|\do\!\do\(\do\)\do\>\do\<% ^^Ayes, we - % ^^A make \nlpercent|<|\catother\ since a~directive |<<|\<any text till ^^B - % ^^A~the end of line> theoretically may occure. - \@ifnextchar{<}{% - \let\do=\@makeother \dospecials - \gmd@docstripverb} - {\gmd@docstripinner}}% - -\if1 1%^^A~as the other debugs, let them rest in peace alt least till -%^^A the v2.0. -\gdef\Debug@dstron{\ifnum\c@codelinenum>1178 \ifdtraceon\fi - \ifnum\c@codelinenum>1184 \ifdtraceoff\@emptify\Debug@dstron\fi}% -\else - \global\@emptify\Debug@dstron -\fi - - % \CodeDefIndex\gmd@docstripinner - \gdef\gmd@docstripinner#1>{% +%^^A \StraightEOL +%^^A \iffalse ^^A~ this passage is obsoleted +%^^A +%^^A This passage is obsoleted on 2006/11/30. +%^^A +%^^A In the \gmdoc\ thinking, the \ds\ directives belong to the +%^^A narration layer since they all begin with |%|. For now I~don't +%^^A have a~more minimal idea than to define a~pair of macros the first of +%^^A which would |\active|ate the |<| and the other, assigned to the +%^^A active |<|, would do the work and re`other' the |<| back. +%^^A +%^^A We provide two versions of the seargant-activating macro: the first +%^^A makes only the first subsequent seargant typeset a~\ds\ +%^^A directive (and the previous meaning of the |<| will be restored, the +%^^A latter doesn't restore the previous meaning of |<| after (by) the +%^^A first occurrence and the latter obeys usual scoping rules while the +%^^A scoping rules of the first (|\docstrip|) are more strict: the scope +%^^A is delimited by the first occurrence of the subject~|<|. +%^^A +%^^A Let us remeber that, just as all the control sequences except +%^^A |\relax|, you can use |\docstrips| as an environment, i.e., in the +%^^A |\begin{docstrips}|\dots |\end{docstrips}| syntax. And, that +%^^A \env{macrocode} environment declares it. +%^^A \bgroup\catcode`\<=\active +%^^A \firstofone{\egroup +%^^A % \stanza +%^^A \newcommand*\docstrip{% +%^^A \gmd@storesearg +%^^A \catcode`\<=\active +%^^A \gmd@setdocstrips +%^^A \let\gmd@docstripshook=\gmd@restoresearg}% +%^^A % \stanza +%^^A \newcommand*\docstrips{% +%^^A \catcode`\<=\active +%^^A \gmd@setdocstrips +%^^A \@emptify\gmd@docstripshook}% +%^^A % \stanza +%^^A \def\gmd@setdocstrips{% +%^^A \def<{\ifmmode\sgtleftxii\else\afterfi\gmd@docstripdirective\fi}} +%^^A %\stanza +%^^A \def\gmd@storesearg{% +%^^A \edef\gmd@SeargantCat{\the\catcode`\<}% +%^^A \ifnum\gmd@SeargantCat=\active +%^^A \let\gmd@SeargantMng=<% +%^^A \fi} +%^^A % \stanza +%^^A \def\gmd@restoresearg{% +%^^A \catcode`\<=\gmd@SeargantCat\relax +%^^A \ifnum\gmd@SeargantCat=\active +%^^A \let<=\gmd@SeargantMng +%^^A \fi}% +%^^A % \stanza +%^^A }% of |\active| |<|'s |\firstofone| +%^^A +%^^A \fi ^^A~of the obsoletion iffalse +%^^A \QueerEOL + +\foone{\@makeother\<\@makeother\> + \glet\sgtleftxii=<} +{ + \def\gmd@docstripdirective{% + \begingroup\let\do=\@makeother + \do\*\do\/\do\+\do\-\do\,\do\&\do\|\do\!\do\(\do\)\do\>\do\<% ^^Ayes, we + % ^^A make \inverb|<|\catother\ since a~directive |<<|\<any text till ^^B>> + % ^^A~the end of line> theoretically may occur. + \@ifnextchar{<}{% + \let\do=\@makeother \dospecials + \gmd@docstripverb} + {\gmd@docstripinner}}% + + \def\gmd@docstripinner#1>{% \endgroup \def\gmd@modulehashone{% \Module{#1}\space \@afternarrgfalse\@aftercodegtrue\@codeskipputgfalse}% % ^^A \gmd@docstripshook - \gmd@textEOL\gmd@modulehashone\Debug@dstron} + \gmd@textEOL\gmd@modulehashone} % A~word of explanation: first of all, we % close the group for changed |\catcode|s; the directive's text has its % |\catcode|s fixed. Then we put the directive's text wrapped with the @@ -4371,9 +5213,13 @@ % % \stanza % The `verbatim' directive macro works very similarly. - % \CodeDefIndex\gmd@docstripverb - \catcode`\^^M=\active% - \gdef\gmd@docstripverb<#1^^M{% +} + +\foone{\@makeother\<\@makeother\> + \glet\sgtleftxii=< + \catcode`\^^M=\active}% +{ + \def\gmd@docstripverb<#1^^M{% \endgroup% \def\gmd@modulehashone{% \ModuleVerb{#1}\@afternarrgfalse\@aftercodegtrue% @@ -4383,12 +5229,10 @@ } % (\*Verbatim ;-) from \docfm:) -% \CodeDefine\Module \CodeDefine\ModuleVerb \providecommand*\Module[1]{{\mod@math@codes$\langle\mathsf{#1}\rangle$}} \providecommand*\ModuleVerb[1]{{\mod@math@codes$\langle\langle\mathsf{#1}$}} -% \CodeDefIndex\mod@math@codes \def\mod@math@codes{\mathcode`\|="226A \mathcode`\&="2026 } % \subdivision{The Changes History} @@ -4430,9 +5274,8 @@ % arguments. We do this to provide no changes' writing out if % |\RecordChanges| is not used. % -% \CodeDefine\gmd@DefineChanges -% \CodeDefine\changes -% \changes{v0.98e}{06/09/23}{definition put into a~macro that shall +% +% \changes[\changes]{v0.98e}{06/09/23}{definition put into a~macro that shall % launch it when \cs{RecordChanges} is executed and the default % defining it as a~gobbling macro} % @@ -4450,16 +5293,15 @@ \renewcommand\changes[4][]{}} \def\MakeGlossaryControls{% - \def\actualchar{=}\def\quotechar{!}% - \def\levelchar{>}\edef\encapchar{\twelveclub}}%for the glossary the + \edef\actualchar{\string=}\edef\quotechar{\string!}% + \edef\levelchar{\string>}\edef\encapchar{\xiiclub}}%for the glossary the % `actual', the `quote' and the `level' chars are respectively |=|, % |!| and |>|, the `encap' char remains untouched. I~decided to % preserve the \docfm's settings for the compatibility. -% \CodeDefine\changes@ +\newcommand\changes@[4][\generalname]{% % \changes[\changes]{v0.97}{06/09/04}{The optional pseudo-argument % added intended to be the macro-entry.} -\newcommand\changes@[4][\generalname]{% \if@RecentChange{#3}% if the date is later than the one stored in % \cs{c@Chang\+es\+Start\+Date}, \@tempswafalse @@ -4472,15 +5314,14 @@ \edef\@tempb{% it's a~bug fix: while typesetting traditional % \file{.dtx}es, |\last@defmark| came out with |\| at the % beginning (which resulted with |\\|\<name> in the change - % log) but while typesetting the `new' way, it occured + % log) but while typesetting the `new' way, it occurred % without the bslash. So we gobble the bslash if it's % present and two lines below we handle the exception of % |\last@defmark|\equals|{\}| (what would happen if % a~definition of |\\| was marked in new way \gmdoc ing).%^^A] \if\bslash\last@defmark\else\last@defmark\fi}% \ifx\last@defmark\bslash\let\@tempb\last@defmark\fi% -%^^A \typeout{last dm @tempb: \@tempb}% (debugging) - % ^^A~\@xa\quote@mname\macro@pname\relax + \n@melet{gmd@glossCStest}{gmd/isaCS/\last@defmark}% \fi \else%the first argument isx not |\generalname| i.e., %a~particular CS is specified by it (if some day one @@ -4488,9 +5329,14 @@ % |\changes[generalname]|\dots) \@tempswatrue {\escapechar\m@ne - \xdef\@tempb{\string#1}} + \xdef\@tempb{\string#1}}% + \if\bslash\@xa\@firstofmany\string#1\relax\@@nil% we check + % whether |#1| is a~CS\dots + \def\gmd@glossCStest{1}%\dots\ and tell the glossary if so. + \fi % ^^A~\@xa\quote@mname\@tempb\relax \fi + \@ifundefined{gmd@glossCStest}{\def\gmd@glossCStest{0}}{}% \protected@edef\@tempa{\@nx\glossary{% \if\relax\GeneralName\relax\else \GeneralName% it's for the |\DocInclude| case to precede @@ -4501,38 +5347,46 @@ \if@tempswa% If the macro |\last@defmark| % doesn't contain any CS name (i.e., is empty) nor |#1| % specifies a~CS, the current - % changes entry was done at top-level. In this case we preceed + % changes entry was done at top-level. In this case we precede % it by |\generalname|. \@tempb \actualchar\bslash verb*% \if\verbatimchar\@tempb$\else\verbatimchar\fi - \quotechar\bslash \@tempb + \if1\gmd@glossCStest\quotechar\bslash\fi \@tempb \if\verbatimchar\@tempb$\else\verbatimchar\fi \else \space\actualchar\generalname \fi :\levelchar#4\encapchar hyperpage}}% \@tempa + \grelaxen\gmd@glossCStest \fi\endgroup\@esphack} % Let's initialize |\last@defmark| and |\GeneralName|. \@relaxen\last@defmark \@emptify\GeneralName + +\def\ChangesGeneral{\grelaxen\last@defmark}% If automatic detection of +% definitions is on, the default entry of |\changes| is the meaning of +% |\last@defmark|, the last detected definiendum that is. The +% declaration defined here serves to start a~scope of `general' +% \cs{changes}' entries. + +\AtBegInput{\ChangesGeneral} + % Let's explain |\if@RecentChange|. We wish to check whether the % change's date is later than date declared (if any limit date % \emph{was} declared). First of all, let's establish a~counter to store % the declared date. The untouched counters are equal 0 so if no date % is declared there'll be no problem. The date will have the % \<YYYYMMDD> shape both to be easily compared and readable. -% \CodeDefine\c@ChangesStartDate \newcount\c@ChangesStartDate -% \CodeDefine\if@RecentChange + \def\if@RecentChange#1{% \gmd@setChDate#1\@@nil\@tempcnta \ifnum\@tempcnta>\c@ChangesStartDate} -% \CodeDefIndex\gmd@setChDate \def\gmd@setChDate#1/#2/#3\@@nil#4{% the last parameter will be a~|\count| % register. #4=#1\relax @@ -4548,10 +5402,10 @@ % Having the test defined, let's define the command setting the date % counter. |#1| is to be the version and |#2| the date % \cs[]{\{\<year>/\<month>/\<day>\}}. -% \CodeDefine\ChangesStart + +\def\ChangesStart#1#2{% % \changes{v0.98e}{06/09/23}{\cs{string}s added before the seargants % in the message with account of \cs{docstrip(s)}} -\def\ChangesStart#1#2{% \gmd@setChDate#2\@@nil\c@ChangesStartDate \typeout{^^JPackage gmdoc info: ^^JChanges' start date #1 memorized as \string<\the\c@ChangesStartDate\string> \on@line.^^J} @@ -4598,7 +5452,7 @@ % for convenience by the name of [the macro explicitly specified as % the first argument or] the most recently introduced macroname % (i.e., that in the most recent |\begin{macro}| command [or -% |\CodeDefine|]). We therefore provide [|\last@defmark|] to +% |\Define|]). We therefore provide [|\last@defmark|] to % record that argument, and provide a default definition in case % |\changes| is used outside a \env{macro} environment. (This is a % wicked hack to get such entries at the beginning of the sorted @@ -4606,11 +5460,9 @@ % % This macro holds the string placed before changes entries on % top-level.\end{quotation} -% \CodeDefine\generalname \def\generalname{General} -% \CodeDefine\chschange -% \changes{v0.98a}{06/09/06}{added.} +% \changes[\chschange]{v0.98a}{06/09/06}{added.} % % \stanza % \begin{quotation}To cause the changes to be written (to a \pk{.glo}) @@ -4620,11 +5472,10 @@ % I~add to it also the |\write|ing definition of the |\changes| macro % to ensure no changes are written out without |\RecordChanges|. % -% \CodeDefine\RecordChanges -% \changes{v0.98c}{06/09/08}{made self-\cs{relax}ing} -% \changes{v0.98e}{06/09/23}{made it defining \cs{changes}} \def\RecordChanges{\makeglossary\gmd@DefineChanges \@relaxen\RecordChanges} +% \changes{v0.98c}{06/09/08}{made self-\cs{relax}ing} +% \changes{v0.98e}{06/09/23}{made it defining \cs{changes}} % \begin{quotation}The remaining macros are all analogues of those used % for the \env{theindex} environment. % When the glossary is started we compute the space which remains at @@ -4635,15 +5486,13 @@ % \begin{CodeSpacesBlank} \newdimen\GlossaryMin \GlossaryMin = 80pt -% \CodeDefIndex*\c@GlossaryColumns +% \DefIndex*\c@GlossaryColumns \newcount\c@GlossaryColumns \c@GlossaryColumns = 2 % \end{CodeSpacesBlank} %\begin{quotation}The environment \env{theglossary} is defined in the %same manner as the \env{theindex} % environment.\end{quotation} % -% \CodeDefine*{theglossary} -% \CodeDefIndex*\theglossary \newenvironment{theglossary}{% \begin{multicols}\c@GlossaryColumns [\glossary@prologue][\GlossaryMin]% @@ -4682,7 +5531,6 @@ % holds the default text. We better make it a long macro to allow % |\par| commands in its argument.\end{quotation} % -% \CodeDefine\GlossaryPrologue \long\def\GlossaryPrologue#1{\@bsphack \def\glossary@prologue{#1}% \@esphack} @@ -4690,14 +5538,13 @@ % by another package file. If not we define it.\end{quotation} % \changes{v0.98a}{06/09/06}{a~bug fixed: \cs{filediv} replaced with % \cs{indexdiv} in the default prologue.} -% \CodeDefine\glossary@prologue \@ifundefined{glossary@prologue} {\def\glossary@prologue{\indexdiv{{Change History}}% \markboth{{Change History}}{{Change History}}% }}{} %\begin{quotation}Unless the user specifies otherwise, we set the %change history using the same parameters as for the index.\end{quotation} -% \CodeDefine\GlossaryParms +% \Define\GlossaryParms \AtBeginDocument{% \@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms}{}} @@ -4710,35 +5557,34 @@ % is probably not required if only the description is being printed. % The command assumes that MakeIndex or some other program has % processed the \pk{.glo} file to generate a sorted \pk{.gls} -% file.\end{quotation} \CodeDefine\PrintChanges +% file.\end{quotation} \Define\PrintChanges \def\PrintChanges{% to avoid a~disaster among queer EOLs: \@ifQueerEOL {\StraightEOL\@input@{\jobname.gls}\QueerEOL}% {\@input@{\jobname.gls}}% \g@emptify\PrintChanges} -% % \iffalse -% % \begin{quotation} -% % The following definitions provide the |\pfill| command; if this is -% % specified in the index style file to MakeIndex as the delimiter to -% % appear after index items, then the intervening space before the -% % referenced page numbers will be filled with dots, with a little -% % white space interpolated at each end of the dots. If the line is -% % broken the dots will show up on both lines.\end{quotation} -% \def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus 1fill}% -% \def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}% -% \def\pfill{\unskip~\dotfill\penalty500\strut\nobreak -% \dotfil~\ignorespaces}% -%% -%%\begin{verbatim} -%%</package> -%%<+ist>delim_0 "\\pfill " -%%<+ist>delim_1 "\\pfill "2 -%%<+ist>delim_2 "\\pfill " -%%<*package> -%\end{verbatim} -% % skipped definitions of dotted fills\fi -% +%^^A% % \iffalse +%^^A%% % \begin{quotation} +%^^A%% % The following definitions provide the |\pfill| command; if this is +%^^A%% % specified in the index style file to MakeIndex as the delimiter to +%^^A%% % appear after index items, then the intervening space before the +%^^A%% % referenced page numbers will be filled with dots, with a little +%^^A%% % white space interpolated at each end of the dots. If the line is +%^^A%% % broken the dots will show up on both lines.\end{quotation} +%^^A%% \def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus 1fill}% +%^^A%% \def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}% +%^^A%% \def\pfill{\unskip~\dotfill\penalty500\strut\nobreak +%^^A%% \dotfil~\ignorespaces}% +%^^A%%% +%^^A%%%\begin{verbatim} +%^^A%%%</package> +%^^A%%%<+ist>delim_0 "\\pfill " +%^^A%%%<+ist>delim_1 "\\pfill "2 +%^^A%%%<+ist>delim_2 "\\pfill " +%^^A%%%<*package> +%^^A%%\end{verbatim} +%^^A%% % skipped definitions of dotted fills\fi % % \subdivision{The Checksum} % @@ -4753,13 +5599,13 @@ % on the terminal) % whether you have typed the right number. If you don't type |\CheckSum|, % \TeX\ anyway will tell you how much it is. -% \CodeDefine\check@sum \CodeDefine\CheckSum \newcount\check@sum + \def\CheckSum#1{\@bsphack\global\check@sum#1\relax\@esphack} -% \CodeDefine*{CheckSum} \CodeDefIndex*\c@CheckSum + \newcounter{CheckSum} % \label{checksum} -% \CodeDefIndex\step@checksum + \newcommand*\step@checksum{\stepcounter{CheckSum}} % And we'll use it in the line \ref{checksumUse} (|\stepcounter| is % |\global|). See also the |\chschange| declaration, @@ -4778,7 +5624,7 @@ % a~check sum % is not necessary for checking the completness of a~file but % I~like it as a~marker of file development and this more than -% that is its r\^ole in \gmdoc.} +% that is its r\ocircum le in \gmdoc.} % \end{StraightEOL} % % @@ -4790,7 +5636,6 @@ \AtEndInput{\check@checksum} % Based on the lines 723--741 of \pk{doc.dtx}. -% \CodeDefine\check@checksum \def\check@checksum{\relax \ifnum\check@sum=\z@ \typeout{**********************************}% @@ -4823,22 +5668,21 @@ % growth. Therefore I~provide a~macro that produces a~line on the % terminal to be put somewhere at the % beginning of the source file's commentary for instance. -% \CodeDefIndex\gmd@chschangeline \def\gmd@chschangeline{% - \typeout{\twelvepercent\space\string\chschange{% + \typeout{\xiipercent\space\string\chschange{% \fileversion}{\the\year/\the\month/\the\day}{\the\c@CheckSum}} - \typeout{\twelvepercent\space\string\chschange{\fileversion}{% + \typeout{\xiipercent\space\string\chschange{\fileversion}{% \@xa\@gobbletwo\the\year/\the\month/\the\day}{%\relax % with two di\-g\-it year in case you use |\ChangesStart|. \the\c@CheckSum}}} % And here the meaning of such a~line is defined: \newcommand*\chschange[3]{%\label{chschange} - \csname changes\endcsname{#1}{#2}{CheckSum #3}% |\csname...| 'cause - % \nlpercent\cs{cha\+n\+g\+es} is \nlpercent|\outer|. + \csname changes\endcsname{#1}{#2}{CheckSum #3}% |\csname...| because + % \nlpercent\cs{cha\+n\+g\+es} is \inverb|\outer|. \CheckSum{#3}} % It will make a~`General' entry in the change history unless -% used in some |\CodeDefine|'s scope or inside a~\env{macro} +% used in some |\Define|'s scope or inside a~\env{macro} % environment. It's intended to be put % somewhere at the beginning of the documented file. % @@ -4858,7 +5702,6 @@ % % The next page setup declaration is intended to be used % with the \pk{article}'s default Letter paper size. But since -% \CodeDefine\ltxPageLayout \newcommand*\ltxPageLayout{% %\begin{quotation}Increase the text width slightly so that width the standard fonts % 72 columns of code may appear in a |macrocode| environment.\end{quotation} @@ -4908,23 +5751,21 @@ % % \changes{v0.98}{06/09/05}{\cs{@makeother\protect\bslash_} added} \newcommand*\DocInclude{\bgroup\@makeother\_\Doc@Include}% First, we -% make \nlpercent|_| `other' in order to allow it in the filenames. +% make \inverb|_| `other' in order to allow it in the filenames. -% \CodeDefine\Doc@Include \newcommand*{\Doc@Include}[2][]{% originally it took just one % argument. Here we make it take two, first of which is intended to - % be the path (with the closing \nlpercent |/|). This is intended not to print + % be the path (with the closing \inverb |/|). This is intended not to print % the path in the page footers only the filename.\par - % \CodeUsage\HLPrefix \CodeDefine\EntryPrefix + % \CodeUsage\HLPrefix \egroup% having the arguments read, we close the group opened by the % previous macro for |_|\catother. \gdef\HLPrefix{\filesep}% \gdef\EntryPrefix{\filesep}% we define two rather kernel parameters % to expand to the file marker. The first will bring the information - % to one of the default \nlpercent|\IndexPrologue|'s + % to one of the default \inverb|\IndexPrologue|'s % |\if|s. Therefore the % definition is global. The latter is such for symmetry. - % \CodeDefine\GeneralName \def\GeneralName{#2\actualchar\pk{#2} }% \label{GeneralName} for the % changes'history main level entry. \relax @@ -4955,7 +5796,6 @@ \else \@docinclude{#1}#2 \fi}% Why is |#2| delimited with | | not % braced as we are used to, one may ask. -% \CodeDefine\@docinclude % \changes[\DocInclude]{v0.97}{06/09/03}{\cs{@docinclude} gets 2 params % in order to \cs{includeonly} work as expected, with only the names % (w.o. the paths)} @@ -5017,7 +5857,6 @@ % \end{macro} % % (Two is a~sufficient number of iterations to define a~macro for.) -% \CodeDefine\xdef@filekey \def\xdef@filekey{{\@relaxen\ttfamily% \label{LetTTFRelax}This % assignment is very trickly crafted: it makes \emph{all} % |\ttfamily|s present in the |\filekey|'s expansion unexpandable @@ -5027,7 +5866,7 @@ % To allow |_| in the filenames we must assure |_| will be \catother\ % while reading the filename. Therefore define -% \CodeDefIndex\gmd@writemauxinpaux +% \DefIndex\gmd@writemauxinpaux \def\gmd@writemauxinpaux#1{% \label{gmd@writemauxinpaux} % this name comes from `\emph{write} outto \emph main % \emph{\pk{.aux}} to \emph{in}put \emph partial @@ -5049,7 +5888,7 @@ % allow |_| in the file name. % \changes[\DocInclude]{v0.98a}{06/09/06}{\cs{@writeckpt} wrapped % with \cs{firstofone} hack to allow \cs[]{_} in the file names.} -% \CodeDefIndex\gmd@writeckpt +% \DefIndex\gmd@writeckpt \def\gmd@writeckpt#1{% \immediate\write\@partaux{% \string\bgroup\string\@makeother\string\_% @@ -5057,7 +5896,6 @@ \@writeckpt{#1}% \immediate\write\@partaux{\@charrb}} -%\CodeDefine\gmd@doIndexRelated \def\gmd@doIndexRelated{% \do\tableofcontents \do\makeindex \do\EnableCrossrefs \do\PrintIndex \do\printindex \do\RecordChanges \do\PrintChanges @@ -5067,7 +5905,7 @@ \@emptify\filesep % The \pk{ltxdoc} class establishes a~special number format for % multiple file documentation numbering needed to document the \LaTeX\ -% sources. I~like it too, so\CodeDefine\aalph \CodeDefine\@aalph +% sources. I~like it too, so \def\aalph#1{\@aalph{\csname c@#1\endcsname}} \def\@aalph#1{% \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or @@ -5078,7 +5916,6 @@ X\or Y\or Z\else\@ctrerr\fi} % A~macro that initialises things for |\DocInclude|. -% \CodeDefine\docincludeaux \def\docincludeaux{% % We set the things for including the files only once. \global\@relaxen\docincludeaux @@ -5146,22 +5983,24 @@ % redefine the name of the proper division to `File'. \ifx\filediv\section \let\division=\subsection - \let\subdivision=\subsubsection% If |\filediv| is higher than - % |\section| we don't change the two divisions (they are - % |\section| and |\subsection| by default). |\section| seems - % to me the lowest reasonable sectioning command for the file. If - % |\filediv| is lower you should rather rethink the level of - % a~file in your documentation not redefine the two divisions. + \let\subdivision=\subsubsection + \let\subsubdivision=\paragraph + % If |\filediv| is higher than + % |\section| we don't change the three divisions (they are + % |\section|, |\subsection| and |\subsubsection| by default). + % |\section| seems to me the lowest reasonable sectioning command + % for the file. If |\filediv| is lower you should rather rethink + % the level of a~file in your documentation not redefine the two + % divisions. \fi}% end of |\docincludeaux|. % The |\filediv| and |\filedivname| macros should always be set % together. Therefore provide a~macro that takes care of both at % once. Its |#1| should be a~sectioning name without the backslash. -% \CodeDefine\SetFileDiv -% \changes{v0.98c}{06/9/10}{added and a~bug fixed in \cs{docincludeaux}} \def\SetFileDiv#1{% \edef\filedivname{#1}% \@xa\let\@xa\filediv\csname#1\endcsname} +% \changes{v0.98c}{06/9/10}{added and a~bug fixed in \cs{docincludeaux}} % \subdivision{\cs{SelfInclude}} % @@ -5171,16 +6010,15 @@ % We define it immediately i.e., % without the |\catcode|s trick because it uses |\jobname| inside so % the filename will be all \catother\ anyway. -% \CodeDefine\SelfInclude -% \changes{v0.98a}{06/09/06}{added in response to the needs} \newcommand*{\SelfInclude}[2][.tex]{% As you guess, the optional |#1| % is the jobname's extension. The second parameter is \emph{not} for % the filename (note \emph{it's known:} as |\jobname|!), but % \emph{for the stuff to be put at begin input.} + % \changes{v0.98a}{06/09/06}{added in response to the needs} \AtBegInputOnce{#2}% \gdef\HLPrefix{\filesep}% \gdef\EntryPrefix{\filesep}% we define two rather kernel parameters - % etc.\ as in \nlpercent|\DocInclude|. + % etc.\ as in \inverb|\DocInclude|. \relax %^^A\if@ltxDocInclude \clearpage @@ -5199,7 +6037,7 @@ % particular case |\string\jobname| would do, but anyway we % provide a~more general solution. Note the \pk{.auxx} extension % used instead of \pk{.aux}. This is done to avoid an infinite - % recurrence of \nlpercent|\input|s. + % recurrence of \inverb|\input|s. \fi \@tempswatrue \if@partsw \@tempswafalse\edef\@tempb{\jobname}% @@ -5250,9 +6088,6 @@ % \pk{gmdocc.cls} e.g.), so we put % those preparations into a~declaration. % -% \CodeDefine\ltxLookSetup -% \CodeDefIndex\if@ltxDocInclude \CodeDefIndex*\@ltxDocIncludetrue -% \CodeDefIndex*\@ltxDocIncludefalse \newif\if@ltxDocInclude \newcommand*\ltxLookSetup{% @@ -5270,29 +6105,27 @@ \@emptify\currentfile% for the pages outside the % |\DocInclude|'s scope. In force for all includes. % -% \iffalse -% % \stanza -% % But it may be not a~usual situation to include the source files -% % as with \pk{ltxdoc} but with the \emph{new} |\DocInput| macro. So -% % let's |\def| -% % \CodeDefine\ltxMultidocOldSetup -% \newcommand*\ltxMultidocOldSetup{% -% \ltxMultidocSetup -% \let\incl@DocInput=\OldDocInput} -% -% \@onlypreamble\ltxMultidocOldSetup -% -% And, for the symmetry, if you prefer the look offered by -% me, but -% \fi +%^^A \iffalse +%^^A % \stanza +%^^A % But it may be not a~usual situation to include the source files +%^^A % as with \pk{ltxdoc} but with the \emph{new} |\DocInput| macro. So +%^^A % let's |\def| +%^^A % \Define\ltxMultidocOldSetup +%^^A \newcommand*\ltxMultidocOldSetup{% +%^^A \ltxMultidocSetup +%^^A \let\incl@DocInput=\OldDocInput} +%^^A +%^^A \@onlypreamble\ltxMultidocOldSetup +%^^A +%^^A And, for the symmetry, if you prefer the look offered by +%^^A me, but +%^^A \fi % If you want to |\Doc/SelfInclude| \docfm-likes: -% \CodeDefine\olddocIncludes \newcommand*\olddocIncludes{% \let\incl@DocInput=\OldDocInput} % And, if you have set the previous and want to set it back: -% \CodeDefine\gmdocIncludes \newcommand*\gmdocIncludes{% \let\incl@DocInput=\DocInput \AtBegInput{\QueerEOL}}% to move back the |\StraightEOL| declaration put @@ -5313,8 +6146,7 @@ % any earlier such setting!\end{quotation} % But here in \pk{gmdoc} we'll do it locally for (each) input % not to change the main title settings if there are any. -% \CodeDefine\maketitle -\AtBegInput{% +\AtBegInput{%^^A~ why provide not just \cs{def}? \providecommand*\maketitle{\par \begingroup \def \thefootnote {\fnsymbol {footnote}}% \setcounter {footnote}\z@ @@ -5346,7 +6178,6 @@ % without it at \TeX ing with \pk{mwbk.cls} because this class with the % default options does not define |\@maketitle|. The below definitions % are taken from \pk{report.cls} and \pk{mwrep.cls}. - % \CodeDefine\@maketitle \providecommand*\@maketitle{% \newpage\null \vskip 2em\relax% \begin{center}% @@ -5365,21 +6196,18 @@ % We'd better restore the primary meanings of the macros making % a~title. (\LaTeXe\ source, File F: ltsect.dtx Date: 1996/12/20 Version % v1.0z, lines 3.5.7.9--12.14--17.) - % \CodeDefine\title \CodeDefine\author \CodeDefine\date - % \CodeDefine\thanks \providecommand*\title[1]{\gdef\@title{#1}} \providecommand*\author[1]{\gdef\@author{#1}} \providecommand*\date[1]{\gdef\@date{#1}} \providecommand*\thanks[1]{\footnotemark \protected@xdef\@thanks{\@thanks \protect\footnotetext[\the\c@footnote]{#1}}% - }%\CodeDefIndex\and + }% \providecommand*\and{%| % \begin{tabular}| \end{tabular}% \hskip 1em \@plus.17fil% \begin{tabular}[t]{c}}%| % \end{tabular}| % And finally, let's initialize \cs{tit\+le\+set\+up} if it is not yet. - % \CodeDefine\titlesetup \providecommand*\titlesetup{}% }% end of |\AtBegInput|. % @@ -5404,17 +6232,16 @@ % Now, we redefine |\maketitle| and its relatives. % -% \CodeDefine\InclMaketitle -% \changes{v0.98a}{06/09/05}{renamed from \cs{incl@maketitle} 'cause -% I~needed it in self-input hacks.} -\def\InclMaketitle{%\par\CodeDefIndex\and +\def\InclMaketitle{% + % \changes{v0.98a}{06/09/05}{renamed from \cs{incl@maketitle} because + % I~needed it in self-input hacks.} {\def\and{, }% we make |\and| just a~comma. {\let\thanks=\@gobble% for the toc version of the heading we % discard |\thanks|.\tOnLine \protected@xdef\incl@titletotoc{\@title\if@fshda\protect\space (\@author)\fi}% we add the author iff the `files have % different authors' \nlpercent(|@fshda|) - }% \CodeDefine\thanks + }% \def\thanks##1{\footnotemark \protected@xdef\@thanks{\@thanks% to keep the previous |\thanks| % if there were any. @@ -5462,11 +6289,8 @@ % multi-documented files have the same author(s). % And with the account of the other possibility I~provide % the below switch and declaration. -% -% \CodeDefIndex\if@fshda -% \CodeDefIndex*\@fshdatrue -% \CodeDefIndex*\@fshdafalse -% \CodeDefine\PrintFilesAuthors + + \newif\if@fshda % \label{@fshda} (its name comes from \textit file\textit s % \textit have \textit different \textit authors). @@ -5481,7 +6305,6 @@ % Define |\filedate| and friends from info in the % |\ProvidesPackage| etc.\ commands. -% \CodeDefine\GetFileInfo \def\GetFileInfo#1{% \def\filename{#1}% \def\@tempb##1 ##2 ##3\relax##4\relax{% @@ -5500,14 +6323,12 @@ % action but we remain strictly \TeX nical and do it with writing to % a~file and inputting that file. -%\CodeDefine\FileInfo -% \changes{v0.99d}{2007/04/26}{added} - \newcommand*\FileInfo{% \bgroup \let\do\@makeother \do\ \do\{\do\}\do\^^M\do\\% \gmd@fileinfo} +% \changes{v0.99d}{2007/04/26}{added} \bgroup \catcode`!\z@ @@ -5525,19 +6346,17 @@ >% \CodeEscapeChar\\ > -% \CodeDefine\gmd@writeFI \def\gmd@writeFI#1#2#3{% \immediate\write\@auxout{% \global\@nx\@namedef{% ver@#2.\if P\@firstofmany#1\@@nil sty\else cls\fi}{#3}}} -% \CodeDefine\gmd@docrescan \def\gmd@docrescan#1{% \newwrite\gmd@docrescanfile \immediate\openout\gmd@docrescanfile=\jobname.docrescan\relax {\newlinechar=`\^^M% \immediate\write\gmd@docrescanfile{% - \twelvepercent#1\twelvepercent\@nx\NoEOF}% + \xiipercent#1\xiipercent\@nx\NoEOF}% }% \immediate\closeout\gmd@docrescanfile \@@input\jobname.docrescan @@ -5548,16 +6367,16 @@ % a~macro for explicit providing the file % info. It's written in analogy to |\ProvidesFile|, \pk{source ^^B % 2${}_\epsilon$}, file L v1.1g, l.\,102. -% \CodeDefine\ProvideFileInfo -% \changes{v0.98a}{06/09/06}{added} + \def\ProvideFileInfo#1{% \begingroup \catcode`\ 10 \catcode\endlinechar 10 % \@makeother\/\@makeother\&% \kernel@ifnextchar[{\gmd@providefii{#1}}{\gmd@providefii{#1}[]}%^^A] } +% \changes{v0.98a}{06/09/06}{added} - % \CodeDefIndex\gmd@providefii + % \DefIndex\gmd@providefii \def\gmd@providefii#1[#2]{%\\ % (we \emph{don't} write the file info to \pk{.log}) \@xa\xdef\csname ver@#1\endcsname{#2}% @@ -5565,15 +6384,12 @@ % And a~self-reference abbreviation (intended for providing file info % for the driver): -% \CodeDefine\ProvideSelfInfo \def\ProvideSelfInfo{\ProvideFileInfo{\jobname.tex}} % A~neat conventional statement used in \docfm's documentation e.g., % to be put in |\thanks| to the title or in a~footnote: -% \CodeDefine\filenote \newcommand*\filenote{This file has version number \fileversion{} dated \filedate{}.} % And exactly as |\thanks|: -% \CodeDefine\thfileinfo \newcommand*\thfileinfo{\thanks\filenote} @@ -5585,18 +6401,18 @@ % another one in \docfm\ and it looks very reasonably: % \gmhypertarget[IndexInput]{\cs{IndexInput}}. Let's make analogous one % here: -% \CodeDefine\IndexInput -% \changes{v0.98b}{06/09/07}{\cs{StoreMacro}ing and \cs{RestoreMacro}ing -% \cs{code@delim} added} -\bgroup\obeylines -\firstofone{\egroup - \def\IndexInput#1{% +\foone{\obeylines}% +{% + \def\IndexInput#1{% \changes{v0.98b}{06/09/07}{\cs{StoreMacro}ing + %% and \cs{RestoreMacro}ing + % \cs{code@delim} added} \StoreMacro\code@delim% - \CodeDelim*\^^Z% + \CodeDelim\^^Z% \def\gmd@iihook{% \label{iihook}this hook is |\edef|ed! \@nx^^M% \code@delim\relax\@nx\let\@nx\EOFMark\relax}%^^A\@nx^^M - \DocInput{#1}\RestoreMacro\code@delim}} + \DocInput{#1}\RestoreMacro\code@delim}% +} % How does it work? We assume in the input file is no explicit % \<char1>. This char is chosen as the code delimiter and will be put % at the end of input. So, entire file contents will be scanned char @@ -5612,12 +6428,10 @@ % and in the |\skipgmlonely| declaration's scope it gobbles its % contents. % -% \CodeDefine*{gmlonely} -% \CodeDefine\skipgmlonely \newenvironment{gmlonely}{\StraightEOL}{} \newcommand\skipgmlonely[1][]{% - \def\@tempa{%\CodeDefIndex\gmd@skipgmltext + \def\@tempa{%\DefIndex\gmd@skipgmltext \def\gmd@skipgmltext{\g@emptify\gmd@skipgmltext#1}}% \@tempa \@xa\AtBegInput\@xa{\@tempa}% @@ -5630,23 +6444,20 @@ % I~need to say some char is of category 12 (`other sign'). This I'll % mark just as \catother\ got by |\catother|. % -% \CodeDefine\catother -\bgroup\catcode`\_=8 % we ensure the standard |\catcode| of |_|. -\firstofone{\egroup + +\foone{\catcode`\_=8 }% we ensure the standard |\catcode| of |_|. +{ \newcommand*\catother{${}_{12}$}%\par -% Similarly, if we need to say some char is of category 13 (`active'), -% we'll write \catactive, got by |\catactive| -% \CodeDefine\catactive + % Similarly, if we need to say some char is of category 13 (`active'), + % we'll write \catactive, got by |\catactive| \newcommand*\catactive{${}_{13}$}%\par -% and a~letter, \catletter -% \CodeDefine\catletter + % and a~letter, \catletter \newcommand*\catletter{${}_{11}$}%. } % % For the copyright note first I~used just \env{verse} but it requires % marking the line ends with |\\| and indents its contents while % I~prefer the copyright note to be flushed left. So -% \CodeDefine*{copyrnote} \newenvironment*{copyrnote}{% \StraightEOL\everypar{\hangindent3em\relax\hangafter1 }% \par\addvspace\medskipamount\parindent\z@\obeylines}{% @@ -5654,91 +6465,84 @@ % % I~renew the \env{quotation} environment to make the fact of quoting % visible -% \CodeDefine*{quotation} \renewenvironment{quotation}{\par``\ignorespaces}{\unskip''\par} % \chunkskip % For some mysterious reasons |\noindent| doesn't work with the first % (narrative) paragraph after the code so let's work it around: -% \CodeDefine\gmdnoindent \newcommand*\gmdnoindent{\leavevmode\hskip-\parindent} % -% When a~verbatim text occurres in an inline comment, it's advisable to +% When a~verbatim text occurs in an inline comment, it's advisable to % precede it with |%| if it begins a~not first line of such a~comment -% not to mistake it for a~part of code. For this purpose provide -% \CodeDefine\nlpercent -\newcommand*\nlpercent{% - \@ifstar{\def\@tempa{{\tt\twelvepercent}}% - \@emptify\@tempb\nl@percent}% +% not to mistake it for a~part of code. Moreover, if such a~short verb +% breaks in its middle, it should break with the percent at the +% beginning of the new line. For this purpose provide +\newcommand*\inverb{% + % \changes{v0.99g}{2007/11/12}{added} + \@ifstar{% + \def\@tempa{{\tt\xiipercent}}% + \@emptify\@tempb% here and in the paralell points of the other + % case and \inverb|\nlpercent| I~considered an \inverb|\ifhmode| + % test but it's not possible to be in vertical mode while in an + % inline comment. If there happens vertical mode, the commentary + % begins to be `outline' (main text). + \gmd@inverb}% {\@emptify\@tempa - \def\@tempb{\gmboxedspace}\nl@percent}} + \def\@tempb{\gmboxedspace}% + \gmd@inverb}} \newcommand*\gmboxedspace{\hbox{\normalfont{ }}} -\newcommand*\nl@percent[1][]{% +\newcommand*\gmd@nlperc[1][]{% \unskip - \discretionary{\@tempa}{{\tt\twelvepercent\gmboxedspace}}{\@tempb}% + \discretionary{\@tempa}{{\tt\xiipercent\gmboxedspace}}{\@tempb}% \penalty10000\hskip0sp\relax} -% As you see, |\nlpercent| inserts a~discretionary that breaks to |%| + +\newcommand*\gmd@inverb[1][]{% + \gmd@nlperc + \ifmmode\hbox\else\leavevmode\null\fi + \bgroup + \ttverbatim + \def\breakablexiispace{% + \discretionary{\xiispace}{\xiipercent\gmboxedspace}{\xiispace}}% + \def\breakbslash{% + \discretionary{}{\xiipercent\gmboxedspace\bslash}{\bslash}}% + \def\breaklbrace{% + \discretionary + {\xiilbrace\verbhyphen}% + {\xiipercent\gmboxedspace}% + {\xiilbrace}}% + \gm@verb@eol + % ^^A \@ifstar {\@sverb@chbsl} + % ^^A~ {\gmobeyspaces\frenchspacing\@sverb@chbsl} + \@sverb@chbsl% It's always with visible spaces. +} + +\newcommand*\nlpercent{% + \@ifstar{\def\@tempa{{\tt\xiipercent}}% + \@emptify\@tempb + \gmd@nlperc}% + {\@emptify\@tempa + \def\@tempb{\gmboxedspace}% + \gmd@nlperc}} + +% As you see, |\inverb| and |\nlpercent| insert a~discretionary that +% breaks to |%| % at the beginning of the lower line. Without the break it's a~space % (alas at its natural width i.e., not flexible) or, with the starred % version, nothing. The starred version puts |%| also at the end of -% the upper line. +% the upper line. Then |\inverb| starts sth. like +% |\verb*| but the breakables of it break to |%| in the +% lower line. % % TODO: make the space flexible (most probably it requires using sth.\ % else than |\discretionary|). %\stanza % % An optional hyphen for CSs in the inline comment: -% \CodeDefine\+ \@ifundefined{+}{}{\typeout{^^Jgmdoc.sty: redefining \bslash+.}} -\def\+{\discre{{\normalfont-}}{{\tt\twelvepercent\gmboxedspace}}{}} +\def\+{\discre{{\normalfont-}}{{\tt\xiipercent\gmboxedspace}}{}} % % -% And finally, some logos: -% \begin{quotation} Here are a few definitions which can usefully be -% employed when documenting -% package files: now we can readily refer to \AmSTeX, \BibTeX\ and \SliTeX, as well -% as the usual \TeX\ and \LaTeX. There's even a \PlainTeX\ and -% a~\Web.\end{quotation} -% \CodeDefine\AmSTeX \CodeDefine\BibTeX \CodeDefine\SliTeX -% \CodeDefine\PlainTeX \CodeDefine\Web \CodeDefine\TeXbook -% \CodeDefine\eTeX \CodeDefine\pdfeTeX \CodeDefine\pdfTeX -% \CodeDefine\XeTeX \CodeDefine\ds -\@ifundefined{AmSTeX} - {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex% - \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{} - -\DeclareLogo\BibTeX{{\rmfamily B\kern-.05em% - \textsc{i\kern-.025em b}\kern-.08em% - \TeX}} - - -\DeclareLogo\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox - {\scshape i}\kern -.03em\TeX}} - -\DeclareLogo\PlainTeX{\textsc{Plain}\kern2pt\TeX} - -\DeclareLogo\Web{\textsc{Web}} -% There's also the \LaTeXpar\ logo got with the |\LaTeXpar| macro -% provided by \pk{gmutils}. And here \TeXbook's logo: -\DeclareLogo[The TeX book]\TeXbook{The \TeX book} - -\DeclareLogo\eTeX{$\varepsilon$\TeX}% The \eTeX\ manual -% uses `$\varepsilon$-\TeX' but that would look strange in \pdfeTeX. - -\DeclareLogo\pdfeTeX{pdf\eTeX} - -\DeclareLogo\pdfTeX{pdf\TeX} - -\DeclareLogo\XeTeX{X\kern-.125em\relax - \@ifundefined{reflectbox}{% - \lower.5ex\hbox{E}\kern-.1667em\relax}{% - \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}% - \TeX}% As you see, if -% \TeX\ doesn't recognize \nlpercent\cs{re\+flect\+box} (\pk{graphics} -% isn't loaded), the first |E| will not be reversed. This version of -% the command is intended for non-\XeTeX\ usage. With \XeTeX, the -% reversed |E| you get as the Unicode Latin Letter Reversed E. \@ifundefined{ds}{\def\ds{DocStrip}}{} @@ -5746,35 +6550,29 @@ % files playing with |%|'s % catcode(s). Instead of |%| I~used |&|. They may be at the end % because they're used in the commented thread i.e.\ after package's -% |\usepackage|. \CodeDefine\CDAnd +% |\usepackage|. \newcommand*\CDAnd{\CodeDelim\&} -% \CodeDefine\CDPerc -\newcommand*\CDPerc{\CodeDelim\%} + +\newcommand*\CDPerc{\CodeDelim*\%} % And for documenting in general: % % A~general sectioning command because I~foresee a~possibility of % typesetting the same file once as independent document and another % time as a~part of bigger whole. -\@ifdefinable\division{}% just to test (this \LaTeX\ check issues an -% error if the first argument is already defined). \CodeDefine\division -\@ifundefined{section}{% - \@relaxen\division}{% \CodeDefine\division - \let\division=\section} +% \Define\division +\let\division=\section -\@ifdefinable\subdivision{}% just to test (see above). \CodeDefine\subdivision -\@ifundefined{subsection}{% - \@relaxen\subdivision}{% \CodeDefine\subdivision - \let\subdivision=\subsection} -% The |\let|s are inside |\@ifundefined|s because I'm not sure -% whether you will typeset a~documentation with usual classes. Maybe -% too much care. +% \Define\subdivision +\let\subdivision=\subsection + +% \Define\subsubdivision +\let\subsubdivision=\subsubsection % % % \stanza % To kill a~tiny little bug in \file{doc.dtx} (in line 3299 |\@tempb| and % |\@tempc| are written plain not verbatim): -% \CodeDefIndex*{gmd@mc} \CodeDefine\AfterMacrocode \newcounter{gmd@mc} \def\gmd@mchook{\stepcounter{gmd@mc}% \label{gmd@mchook} @@ -5791,7 +6589,6 @@ % One more detail to expalin and define: the |\gmd@mcdiag| macro may % be defined to type out a~diagnostic message (the % \env{macrocode(*)}'s number, code line number and input line number). -% \CodeDefine\gmd@mcdiag \CodeDefine\mcdiagOn \CodeDefine\mcdiagOff \@emptify\gmd@mcdiag \def\mcdiagOn{\def\gmd@mcdiag{% @@ -5800,6 +6597,15 @@ \def\mcdiagOff{\@emptify\gmd@mcdiag} % +% An environment to display the meaning of macro parameters: its +% items are automatically numbered as |#1|, |#2| etc. +\newenvironment*{enumargs} + {\enumerate + \@namedef{label\@enumctr}{% + \cs[]{\#\csname the\@enumctr\endcsname }}} + {\endenumerate} + + % % \subdivision[\docfm-Compatibility]{\gmhypertarget[doccompa]{\docfm-Compatibility}} % @@ -5820,8 +6626,7 @@ % At the very beginning of a~\docfm-prepared file we meet a~nice % command \cs{Char\-act\-er\-Tab\-le}. My \TeX\ Guru says it's a~bit old % fashioned these days so let's just make it notify the user: -% \CodeDefine\CharacterTable -% \CodeDefIndex\Character@Table + \def\CharacterTable{\begingroup \@makeother\{\@makeother\}% \Character@Table} @@ -5850,13 +6655,11 @@ % Let us now look over other original \docfm's control sequences and % let's `domesticate' them if they are not yet. % -% \gmdmarginpar{kici kici} % The \TextUsage\DescribeMacro\ and \TextUsage\DescribeEnv\ commands % seem to correspond with my |\TextUsage| macro in its plain and starred % version respectively except they don't typeset their arguments in the text % i.e., they do two things of the three. So let's |\def| them to do these % two things in this package, too: -% \CodeDefine\DescribeMacro \outer\def\DescribeMacro{% \begingroup\MakePrivateLetters \gmd@ifonetoken\Describe@Macro\Describe@Env} @@ -5864,27 +6667,27 @@ % a~(possibly starred) control sequence, then as an environment's name % shall it be processed \emph{except} the \cs{Mak\-ePriv\-at\-e\-Oth\-ers} % re|\catcode|ing shall not be done to it. -% \CodeDefine\DescribeEnv \outer\def\DescribeEnv{% \begingroup\MakePrivateOthers\Describe@Env} % Actually, I've used the |\Describe...| commands myself a~few times, so % let's |\def| a~common command with a~starred -% version:\CodeDefine\Describe -\outer\def\Describe{% +% version: +\outer\def\Describe{% It doesn't typeset its argument in the point of + % occurrence. \begingroup\MakePrivateLetters \@ifstarl{\MakePrivateOthers\Describe@Env}{\Describe@Macro}} % The below two definitions are adjusted \*s of |\Text@UsgMacro| and % |\Text@UsgEnvir|. -% \CodeDefIndex\Describe@Macro +% \DefIndex\Describe@Macro \long\def\Describe@Macro#1{% \endgroup \strut\Text@Marginize#1% \@usgentryze#1% we declare kind of formatting the entry \text@indexmacro#1\ignorespaces} -% \CodeDefIndex\Describe@Env +% \DefIndex\Describe@Env \def\Describe@Env#1{% \endgroup \strut\Text@Marginize{#1}% @@ -5912,13 +6715,13 @@ % We have provided \TextUsage\CodeIndent\ in line % \ref{CodeIndent}. And it corresponds with \docfm's % \Describe\MacroIndent\cs{Mac\-ro\-In\-dent} so -% \CodeDefine\MacroIndent +% \Define\MacroIndent \let\MacroIndent\CodeIndent -% And similarly the other skips: \CodeDefine\MacrocodeTopsep +% And similarly the other skips: \Define\MacrocodeTopsep \let\MacrocodeTopsep\CodeTopsep % Note that \TextUsage\MacroTopsep\ is defined in \gmdoc\ and has -% the same r\^ole as in \docfm. - +% the same r\ocircum le as in \docfm. +% \Define\SpecialEscapechar \let\SpecialEscapechar\CodeEscapeChar % \TextUsage\theCodelineNo\ is not used in @@ -5941,7 +6744,6 @@ % % \stanza % For further notifications let's define a~shorthand: -% \CodeDefine\noeffect@info \def\noeffect@info#1{\@ifundefined{#1}{}{\PackageInfo{gmdoc}{^^J% The \bslash#1 macro is not supported by this package^^J and therefore has no effect but this notification.^^J @@ -5981,20 +6783,17 @@ % correspond with the \pk{gmdoc}'s default and the |pageindex| option % respectively. % Therefore let's |\let| -% \CodeDefine\CodelineIndex \let\CodelineIndex\@pageindexfalse \@onlypreamble\CodelineIndex -% \CodeDefine\PageIndex \let\PageIndex\@pageindextrue % \label{PageIndex} \@onlypreamble\PageIndex % The next two declarations I~find useful and -% smart:\CodeDefine\DisableCrossrefs +% smart: \def\DisableCrossrefs{\@bsphack\gag@index\@esphack} -% \CodeDefine\EnableCrossrefs \def\EnableCrossrefs{\@bsphack\ungag@index \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack} % The latter definition is made due to the footnote 6 on p.\,8 of the @@ -6003,7 +6802,7 @@ % % \stanza % The subsequent few lines I~copy almost verbatim ;-) from the lines -% 611--620.\CodeDefine\AlsoImplementation +% 611--620. \newcommand*\AlsoImplementation{\@bsphack% \long\def\StopEventually##1{\gdef\Finale{##1}}% we define % \cs{Fi\+n\+a\+le} just to expand to the argument of |\StopEventually| not @@ -6023,7 +6822,7 @@ % \begin{quotation} When the user places an |\OnlyDescription| % declaration in the driver file the document should only be typeset % up to |\StopEventually|. We therefore have to redefine this -% macro.\end{quotation} \CodeDefine\OnlyDescription +% macro.\end{quotation} \def\OnlyDescription{\@bsphack\long\def\StopEventually##1{% % \begin{quotation} In this case the argument of |\StopEventually| @@ -6046,16 +6845,14 @@ % \stanza % Most of \docfm's indexing commands have already been `almost % defined' in \pk{gmdoc}: -% \CodeDefine\SpecialMainIndex -\let\SpecialMainIndex=\CodeDefIndex +\let\SpecialMainIndex=\DefIndex % \DoNotIndex\endcsname* -% \CodeDefine\SpecialMainEnvIndex \def\SpecialMainEnvIndex{\csname CodeDefIndex\endcsname*}% we don't -% type |\CodeDefIndex| explicitly here 'cause it's |\outer|, remember? +% type |\DefIndex| explicitly here because it's |\outer|, remember? -% \CodeDefine\SpecialIndex \CodeDefine\SpecialUsageIndex -% \CodeDefine\SpecialEnvIndex \CodeDefine\SortIndex +% \Define\SpecialIndex \Define\SpecialUsageIndex +% \Define\SpecialEnvIndex \Define\SortIndex \let\SpecialIndex=\CodeCommonIndex \let\SpecialUsageIndex=\TextUsgIndex @@ -6077,29 +6874,27 @@ % may have to redefine |\verbatimchar| if you use (and index) the |\+| % control sequence. \pk{gmdoc} does a~check for the analogous situation % (i.e., for processing |\&|) and -% if it occures it takes |$| as the |\verb*|'s delimiter. So strange +% if it occurs it takes |$| as the |\verb*|'s delimiter. So strange % delimiters are chosen deliberately to allow any `other' chars in the % environments' names. If this would cause problems, please % notify me and we'll think of adjustments. % -% \CodeDefine\verbatimchar +\def\verbatimchar{&} % \changes{v0.98c}{06/9/10}{put into all indexing macros for the % accordance of the `macro' and the `environment' index entries; the % \cs[]{\$} sign set as its alternative} -\def\verbatimchar{&} % One more a~very neat macro provided by \docfm. I~copy it % verbatim and put into \pk{gmutils}, too. (|\DeclareRobustCommand| % doesn't issue an error if its argument has been defined, it only % informs about redefining.) -% \CodeDefine\*\changes{v0.98}{06/09/05}{made robust.} \DeclareRobustCommand*\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}} +% \changes{v0.98}{06/09/05}{made robust.} % \TextUsage\IndexPrologue\ is defined in line % \ref{IndexPrologue}. And other \docfm\ index commands too. -% \CodeDefine\main \CodeDefine\usage \@ifundefined{main}{}{\let\DefEntry=\main} \@ifundefined{usage}{}{\let\UsgEntry=\usage} @@ -6110,29 +6905,27 @@ % doesn't count the modules' nesting. Therefore if we dont want an % error while \pk{gmdoc}umenting \docfm-prepared files, better let's % define \docfm's counter for the modules' depths. -% \CodeDefine*{StandardModuleDepth} \newcounter{StandardModuleDepth} % \stanza % For now let's just mark the macro for further development -% \CodeDefine*\DocstyleParms +% \Define*\DocstyleParms \noeffect@info{DocstyleParms} % For possible further development or to notify the user once and % forever: -% \CodeDefine\DontCheckModules \CodeDefine\CheckModules +% \Define\DontCheckModules \Define\CheckModules \@emptify\DontCheckModules \noeffect@info{DontCheckModules} \@emptify\CheckModules \noeffect@info{CheckModules} % The \TextMarginize\Module|\Module| macro \emph{is} provided exactly % as in \docfm. -% \CodeDefine\AltMacroFont +% \Define\AltMacroFont \@emptify\AltMacroFont \noeffect@info{AltMacroFont} % \begin{quotation} And finally the most important bit: we change the % |\catcode| of |%| so that it is ignored (which is how we are able to % produce this \pk{doc}ument!). We provide two commands to do the % actual switching.\end{quotation} -% \CodeDefine\MakePercentIgnore \CodeDefine\MakePercentComment \def\MakePercentIgnore{\catcode`\%9\relax} \def\MakePercentComment{\catcode`\%14\relax} % @@ -6166,22 +6959,23 @@ % % \changes[\OldMakeShortVerb]{v0.98a}{06/09/05}{and pals moved to % \pk{gmverb}.} -%\CodeDefine\OldDocInput +%\Define\OldDocInput % \changes{v0.98}{06/09/05}{\cs{@makeother\protect\bslash_} added} % \changes{v0.98a}{06/09/05}{\cs{AtBegInput} changed into % \cs{AtBegInputOnce}.} % \changes{v0.98b}{06/09/07}{enrichments of the \env{macrocode(*)} % definitions moved to the default definitions of these envs.} -\def\OldDocInput{% +\def\OldDocInput{% \changes{v0.99g}{2007/11/11}{obsolete redefinition + % of the \env{macro} environment removed} \AtBegInputOnce{\StraightEOL \let\@MakeShortVerb=\old@MakeShortVerb - %\label{oldmkshvrrb}\CodeDefIndex\gmd@@macro - \let\gmd@@macro\macro - \def\macro{\let\gmd@ifonetoken\@secondoftwo\gmd@@macro}% (Of course, - % na\-\"\i{}\-ve - % \nlpercent|\exp...\let\exp...\macro\cs...\macro*\endcs...| caused - % an infinite loop since in the definition of \env{macro*} the - % |\macro| macro occures.) + %\label{oldmkshvrrb}^^A\DefIndex\gmd@@macro +%^^A \let\gmd@@macro\macro +%^^A \def\macro{\let\gmd@ifonetoken\@secondoftwo\gmd@@macro}% (Of course, +%^^A % na\-\idiaeres\-ve +%^^A % \inverb|\exp...\let\exp...\macro\cs...\macro*\endcs...| caused +%^^A % an infinite loop since in the definition of \env{macro*} the +%^^A % |\macro| macro occurs.) \VerbMacrocodes}% \bgroup\@makeother\_% it's to allow |_| in the filenames. The next % macro will close the group. @@ -6217,13 +7011,13 @@ % to be shown verbatim as an example source must have been `additionally' % verbatimized for \gmdoc\ with the shortverb chars e.g. You may also % change the code delimiter for a~while, e.g., the line -% \CodeDelim*\. +% \CodeDelim\. % \AVerySpecialMacro % delete the first % when.\unskip|..|\par\CDPerc % % \gmdnoindent\label{AVerySpecialMacro} % was got with % \begin{verbatim} -%\CodeDelim*\. +%\CodeDelim\. %% \AVerySpecialMacro % delete the first % when.\unskip|..|\CDPerc %\end{verbatim} % @@ -6253,7 +7047,7 @@ % now let's assume this option is for draft versions so hasn't be % perfect. % -% Marcin Woli\'nski suggests to add the marginpar clauses for the +% Marcin Woli\nacute ski suggests to add the marginpar clauses for the % AMS classes as we did for the standard ones in the lines % \ref{mparclause1}--\ref{mparclause2}. Most probably I~can do it on % request when I~only know the classes' names and their `marginpar @@ -6279,7 +7073,7 @@ % documentations? If so, I~should `EOL-straighten' them like % |\tableofcontents|, I~suppose (cf.\ line \ref{straighttoc}). % -% Some lines of non-printing stuff such as |\CodeDefine...| and +% Some lines of non-printing stuff such as |\Define...| and % |\changes| connecting the narration with the code resulted with % unexpected large vertical space. Adding a~fully blank line between % the printed narration text and not printed stuff helped. @@ -6292,6 +7086,7 @@ % About the \ds\ \gmiflink{verbatim mode directive} see above. % % \end{bulletpars} +% \ \par\vspace*{-\baselineskip} % % \def\EOFMark{\<eof>} % \division{(No) \EOFMark} If the user doesn't wish the @@ -6301,18 +7096,16 @@ % Pearl Session where he presented \cs{input}ing a~file inside ^^B % \cs{edef}.}: % -% \CodeDefine\NoEOF -% \changes{v0.98}{06/09/05}{extended to add it the \cs{endinput} effect} -% \changes{v0.98l}{06/10/27}{divided in two macros first of which -% makes queer EOL and the latter gobbles the stuff till the EOL to -% suppress possible \cs{endinput} when used in \cs{StopEventually}} \bgroup\catcode`\^^M\active \firstofone{\egroup% \def\@NoEOF#1^^M{% \@relaxen\EOFMark\@xa\@nx\endinput^^M}} \def\NoEOF{\QueerEOL\@NoEOF} - +% \changes{v0.98}{06/09/05}{extended to add it the \cs{endinput} effect} +% \changes{v0.98l}{06/10/27}{divided in two macros first of which +% makes queer EOL and the latter gobbles the stuff till the EOL to +% suppress possible \cs{endinput} when used in \cs{StopEventually}} % \label{NoEOF} As you probably see, |\NoEOF| has also the % |\endinput| effect. @@ -6324,12 +7117,13 @@ % % %^^A~place for general changes: +% \ChangesGeneral % % \changes{v0.98a}{06/09/06}{\cs{AtBeginput}, \cs{AtEndinput}, % \cs{AtBeginputOnce} renamed to \cs{AtBegInput}, \cs{AtEndInput} % \cs{AtBegInputOnce} respect.} % -% \changes{v0.98c}{06/9/9}{making \cs{CodeDefine} and \cs{CodeUsage} +% \changes{v0.98c}{06/9/9}{making \cs{Define} and \cs{CodeUsage} % markers to add up; bug fixes in indexing macros and change of % concept of \cs{Code(Define$\quotechar|$Usage)*}: hence they serve not only for % environments but also for implicit def/use of macros} @@ -6387,6 +7181,15 @@ % \changes{v0.99e}{2007/04/29}{a~bug fixed in \cs{DocInput} and % \cs{IndexInput}} % +% \changes{v0.99g}{2007/11/12}{The bundle goes \XeTeX. The +% \TeX-related logos now are moved to \pk{gmutils}. \hathat{A} +% becomes more comment-like thanks to re\cs{catcode}'ing. Automatic +% detection of definitions implemented} +% +% \changes{v0.99h}{2007/11/16}{Fixed behaviour of sectioning commands +% (optional two heading skip check) of \pk{mwcls/gmutils} and +% respective macro added in \pk{gmdocc}. I~made a~\file{tds} archive} +% % % \Finale diff --git a/Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls b/Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls index b224ba6173d..c1dd06eb6aa 100644 --- a/Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls +++ b/Master/texmf-dist/tex/latex/gmdoc/gmdocc.cls @@ -6,10 +6,10 @@ % % \begin{copyrnote} % -%%Written by Natror (Grzegorz Murzynowski), -%% natror at o2 dot pl +%% Written by Natror (Grzegorz Murzynowski), +%% natror at o2 dot pl %% -%% \copyright\,2006 by Natror (Grzegorz Murzynowski). +%% \copyright\,2006, 2007 by Natror (Grzegorz Murzynowski). %% %% This program is subject to the \LaTeX\ Project Public License. %% See ^^A @@ -30,11 +30,13 @@ % \chschange{v0.72}{06/11/14}{122} % \chschange{v0.73}{06/12/1}{128} % \chschange{v0.75}{2007/3/2}{130} -% +% \chschange{v0.76}{2007/11/13}{257} +% \chschange{v0.77}{2007/11/16}{262} +% \chschange{v0.78}{2007/11/19}{267} \NeedsTeXFormat{LaTeX2e} \ProvidesClass{gmdocc} - [2007/03/02 v0.75 a class for gmdoc driver files (GM)] + [2007/11/19 v0.78 a class for gmdoc driver files (GM)] % % \division{Intro} @@ -45,7 +47,7 @@ %% probably you may use another document class you like. %% %% By default this class loads \pk{mwart} class with a4paper (default) -%% option and \pk{lmodern} package with QX fontencoding. It loads also +%% option and \pk{lmodern} package with T1 fontencoding. It loads also %% my \pk{gmdoc} documenting package which loads some auxiliary %% packages of mine and the standard ones. %% @@ -59,7 +61,7 @@ % % For the ideas and details of \pk{gmdoc}ing of the \LaTeXpar\ files % see the \pk{gmdoc.sty} file's documentation (chapter \ref{gmd}). The -% r\^ole of the \pk{gmdocc} document class is rather auxiliary and +% r\ocircum le of the \pk{gmdocc} document class is rather auxiliary and % exemplary. Most probably, you may use your favourite document class % with the settings you wish. This class I~wrote to meet my needs of % fine formatting, such as not numbered sections and sans serif demi @@ -101,7 +103,7 @@ % \dekmedskip % % The default base document class loaded by \pk{gmdocc.cls} is Marcin -% Woli\'nski's \pk{mwart}. If you have not installed it on your +% Woli\nacute ski \pk{mwart}. If you have not installed it on your % computer, the standard \pk{article} will be used. % % Moreover, if you like MW's classes (as I~do) and need |\chapter| @@ -114,76 +116,148 @@ % The existence test is done for any MW class option as it is in the % default case. % +% Since version 0.99g (November 2007) the bundle goes \XeTeX\ and that +% means you can use the system fonts if you wish, just specify the +% \TextUsage*{sysfonts} option and the three basic \XeTeX-related +% packages (\pk{fontspec}, \pk{xunicode} and \pk{xltxtra}) will be +% loaded and then you can specify fonts with the \pk{fontspec} +% declarations. For use of them check the driver of this documentation +% where the \TeX\ Gyre Pagella font is specified as the default Roman. +% % \stanza -% The \TextUsage\EOFMark\ is in this class typesets like this (of +% The \TextUsage\EOFMark\ in this class typesets like this (of % course, you can redefine it as you wish):\par\EOFMark % % \StopEventually\NoEOF % % \division{The Code} -% \CodeDefIndex\gmcc@baseclass -\def\gmcc@baseclass{mwart}% the default is Marcin Woli\'nski's class (\pk{mwcls}) -% analogous to \pk{article}. - -% Since you can choose the standard \pk{article} class, we'd better -% provide a~Boolean switch to keep the score of what was chosen. It's -% to avoid unused options if \pk{article} is chosen. -%\CodeDefIndex*{gmcc@mwcls} +\RequirePackage{xkeyval} + +% A~shorthands for options processing (I~know \pk{xkeyval} to little +% to redefine the default prefix and family). +% \HideDefining\DeclareOptionX +\newcommand*\gm@DOX{\DeclareOptionX[gmcc]<>} +\newcommand*\gm@EOX{\ExecuteOptionsX[gmcc]<>} +% \ResumeDefining\DeclareOptionX +% \DeclareDefining*[prefix=\bslash gmcc@]\gm@DOX + +% We define the |class| option. I~prefer the \pk{mwcls}, but you can +% choose anything else, then the standard \pk{article} is loaded. +% Therefore we'd better provide a~Boolean switch to keep the score of +% what was chosen. It's to avoid unused options if \pk{article} is +% chosen. \newif\ifgmcc@mwcls -\gmcc@mwclstrue -% \CodeDefine*{mwart} -\DeclareOption{mwart}{\def\gmcc@baseclass{mwart}}% The \pk{mwart} class may also + +% Note that the following option defines |\gmcc@class#1|. +\gm@DOX{class}{% the default will be Marcin Woli\nacute ski class + % (\pk{mwcls}) analogous to \pk{article}, see line \ref{EOXmwart}. + \def\gmcc@CLASS{#1}% + \@for\gmcc@resa:=mwart,mwrep,mwbk\do {% + \ifx\gmcc@CLASS\gmcc@resa\gmcc@mwclstrue\fi}% +} + + + +\gm@DOX{mwart}{\gmcc@class{mwart}}% The \pk{mwart} class may also % be declared explicitly. -% \CodeDefine*{mwrep} -\DeclareOption{mwrep}{\def\gmcc@baseclass{mwrep}}% If you need -% chapters, this option chooses an MW's class that corresponds to + +\gm@DOX{mwrep}{\gmcc@class{mwrep}}% If you need +% chapters, this option chooses an MW class that corresponds to % \pk{report}, -% \CodeDefine*{mwbk} -\DeclareOption{mwbk}{\def\gmcc@baseclass{mwbk}}% and this MW's class + +\gm@DOX{mwbk}{\gmcc@class{mwbk}}% and this MW class % corresponds to \pk{book}. -% \CodeDefine*{article} -\DeclareOption{article}{\gmcc@mwclsfalse}% you can also + +\gm@DOX{article}{\gmcc@class{article}}% you can also % \emph{choose} \pk{article}. +% A~meta-remark: When I~tried to do the most natural thing, to +% |\ExecuteOptionsX| inside such declared option, an error occured: +% 'undefined control sequence \inverb|\XKV@resa -> \@nil|'. -% \CodeDefine*{outeroff} -\DeclareOption{outeroff}{\let\outer\relax}% This option allows + +\gm@DOX{outeroff}{\let\outer\relax}% This option allows % |\outer|-prefixed macros to be \pk{gmdoc}-processed with all the % bells and whistles. -% \CodeDefine\if@debug \newif\if@debug -% \CodeDefine*{debug} -\DeclareOption{debug}{\@debugtrue}% This option causes \pk{trace} to + +\gm@DOX{debug}{\@debugtrue}% This option causes \pk{trace} to % be loaded and the Boolean switch of this option may be used to hide % some things needed only while debugging. -% \CodeDefine*{noindex} -\DeclareOption{noindex}{% - \PassOptionsToPackage{\CurrentOption}{gmdoc}}% This + +\gm@DOX{noindex}{% + \PassOptionsToPackage{noindex}{gmdoc}}% This % option turns the writing outto \file{.idx} file off. -% \CodeDefIndex\if@gmccnochanges -% \CodeDefIndex*\@gmccnochangestrue -% \CodeDefIndex*\@gmccnochangesfalse + \newif\if@gmccnochanges -% \CodeDefine*{nochanges} -\DeclareOption{nochanges}{\@gmccnochangestrue}% This option turns the + +\gm@DOX{nochanges}{\@gmccnochangestrue}% This option turns the % writing outto \file{.glo} file off. -% \CodeDefine*{gmeometric} -\def\gmTheGeometry{geometry} -\DeclareOption{gmeometric}{% - \IfFileExists{gmeometric.sty}{% - \def\gmTheGeometry{gmeometric}}{}}% It's an experimental option -% that causes the |\geometry| macro provided by \pk{geometry} package -% is not restricted to the preamble. This option causes the -% \pk{gmeometric} package is loaded (if available) that works the -% limitation around. +\gm@DOX{gmeometric}{}% The \pk{gmeometric} package +% causes the |\geometry| macro provided by \pk{geometry} package +% is not restricted to the preamble. +% +% Since version 0.99g of \pk{gmdoc} the bundle goes \XeTeX\ and that +% means \pk{geometry} should be loaded with |dvipdfm| option and the +% |\pdfoutput| counter has to be declared and that's what +% \pk{gmeometric} does by default if with \XeTeX. And \pk{gmeometric} +% has passed enough practical test. Therefore the |gmeometric| option +% becomes obsolete and the package is loaded always instead of +% original \pk{geometry}. +% +% \stanza As already mentioned, since version +% 0.99g the \pk{gmdoc} bundle goes \XeTeX. That means that if \XeTeX\ +% is detected, we may load the \pk{fontspec} package and the other two +% of basic three \XeTeX-related, and then we |\fontspec| the fonts. +% But the default remains the old way and the new way is given as the +% option below. + +\newif\ifgmcc@oldfonts +\gmcc@oldfontstrue +\gm@DOX{sysfonts}{\gmcc@oldfontsfalse} + +% Now we define a~key-val option that sets the version of marginpar +% typewriter font definition (relevant only with the |sysfonts| +% option). 0 for OpenType LMTT LC visible for the system (not on my +% computer), 1 for LMTT LC specially on my computer, any else number to avoid an +% error if you don't have OpenType LMTT LC installed (and leave the +% default \pk{gmdoc}'s definition of |\marginpartt|; all the versions +% allow the user to define marginpar typewriter \himher self). +\gm@DOX{mptt}[17]{\def\mpttversion{#1}}% the default value (17) works if +% the user puts the |mptt| option with no value. In that case leaving +% the default \pk{gmdoc}'s definition of marginpar typewriter and +% letting the user to redefine it \himher self seemed to me most natural. + +\def\gmcc@setfont#1{% + \gmcc@oldfontsfalse% note that if we are not in \XeTeX, this switch + % will be turned true in line \ref{ofstrue} + \AtBeginDocument{% + \@ifXeTeX{% + % ^^A \def\f@encoding{U}\selectfont + \setromanfont[Mapping=tex-text]{#1}% + \let\sl\it \let\textsl\textit + }{}}% +} + +\gm@DOX{minion}{\gmcc@setfont{Minion Pro}} +\gm@DOX{pagella}{\gmcc@setfont{TeX Gyre Pagella}} + + + +\gm@EOX{class=mwart}% \label{EOXmwart}We set the default basic class to +% be \pk{mwart}. + +\gm@EOX{mptt=0}% We default to set the marginpar typewriter font to +% OpenType LMTT LC. + +\ProcessOptionsX[gmcc]<> -\ProcessOptions % \newif\ifSecondClass^^A~to assure \TeX knows ifSecondClass % ^^A switch and therefore it counts the fis properly. @@ -197,42 +271,93 @@ \ifSecondClass\else %\fi\fi \ifgmcc@mwcls - \IfFileExists{\gmcc@baseclass.cls}{}{\gmcc@mwclsfalse}% As + \IfFileExists{\gmcc@CLASS.cls}{}{\gmcc@mwclsfalse}% As % announced, we do the ontological test to any \pk{mwcls}. \fi \ifgmcc@mwcls + \XKV@ifundefined{XeTeXdefaultencoding}{}{% + \XeTeXdefaultencoding "cp1250"}% \pk{mwcls} are encoding-sensitive + % because MW uses Polish diacritics in the commentaries. \LoadClass[fleqn, oneside, noindentfirst, 11pt, withmarginpar, - sfheadings]{\gmcc@baseclass}% + sfheadings]{\gmcc@CLASS}% + \XKV@ifundefined{XeTeXdefaultencoding}{}{% + \XeTeXdefaultencoding "utf-8"}% \else \LoadClass[fleqn, 11pt]{article}% Otherwise the standard \pk{article} is % loaded. \fi +% \iffalse\iffalse +\fi +% of ifSecondClass'es \cs{else} (a~feature under construction).\fi + +\RequirePackage{gmutils}% earlier to provide |\@ifXeTeX|. + +\ifgmcc@mwcls\afterfi\ParanoidPostsec\fi + +\@ifXeTeX{}{\gmcc@oldfontstrue} +% \label{ofstrue} \AtBeginDocument{\mathindent=\CodeIndent} -% The |fleqn| option makes displayed formuals be flushed left and +% The |fleqn| option makes displayed formul\ae\ be flushed left and % |\mathindent| is their indentation. Therefore we ensure it is always % equal |\CodeIndent| just like |\leftskip| in \env{verbatim}. Thanks % to that and the |\edverbs| declaration below you may display single % verbatim lines with |\[...\]|: % \[\verb+\[|\verbatim\stuff|\]+\,.\] -\IfFileExists{lmodern.sty}{% We also examine the ontological status of - % this package - \RequirePackage{lmodern}% and if it shows to be satisfactory (the - % package shows \emph{to be}), we load it and set the proper - % font encoding. - \RequirePackage[QX]{fontenc}% -}{} -%\iffalse\iffalse +\ifgmcc@oldfonts + \IfFileExists{lmodern.sty}{% We also examine the ontological status of + % this package + \RequirePackage{lmodern}% and if it shows to be satisfactory (the + % package shows \emph{to be}), we load it and set the proper + % font encoding. + \RequirePackage[T1]{fontenc}% + }{}% +% A~couple of diacritics I~met while \pk{gmdocing} these files and The +% Source etc. Somewhy the accents didn't want to work at my \XeTeX\ +% settings so below I~define them for \XeTeX\ as respective chars. + \def\agrave {\`a}% + \def\cacute {\'c}% + \def\eacute {\'e}% + \def\idiaeres{\"\i}% + \def\nacute {\'n}% + \def\ocircum {\^o}% + \def\oumlaut {\"o}% + \def\uumlaut {\"u}% +\else% this case hapens only with \XeTeX. + \let\do\relaxen + \do\Finv\do\Game\do\beth\do\gimel\do\daleth% these five caused the + % `already defined' error. + \XeTeXthree + %^^A \setromanfont{LMRoman12}% Regular +%^^A \setsansfont{LMSans10}% Regular +%^^A \setmonofont{LMTypewriter10}% Regular + \let\fontencoding\@gobble + \def\agrave {\char"00E0 }% + \def\cacute {\char"0107 }% Note the space to be sure the number + % ends here. + \def\eacute {\char"00E9 }% + \def\idiaeres{\char"00EF }% + \def\nacute {\char"0144 }% + \def\oumlaut {\char"00F6 }% + \def\uumlaut {\char"00FC }% + \def\ocircum {\char"00F4 }% + \AtBeginDocument{% + \def\ae{\char"00E6 }% + \def\l {\char"0142 }% + \def\oe{\char"0153 }% + }% \fi -% of ifSecondClass (a~feature under construction).\fi - -\RequirePackage[margin=2.7cm, left=4cm, - right=2.2cm]{\gmTheGeometry}% Now we set the -% page layout. +% Now we set the page layout. +\RequirePackage{gmeometric} \def\gmdoccMargins{% - \geometry{margin=2.7cm, left=4cm, right=2.2cm}} + \geometry{top=77pt, height=687pt, % =53 lines but the |lines| option + % seems not to work 2007/11/15 with \TeX\ Live 2007 and \XeTeX\ + % 0.996-patch1 + left=4cm, right=2.2cm}} +\gmdoccMargins + \if@debug% For debugging we load also the \pk{trace} package that was % very helpful to me. @@ -240,18 +365,38 @@ \errorcontextlines=100 % And we set an error info parameter. \fi -%\CodeDefine\ifdtraceon -%\CodeDefine\ifdtraceoff \newcommand*\ifdtraceon{\if@debug\afterfi\traceon\fi} \newcommand*\ifdtraceoff{\if@debug\traceoff\fi} % We load the core package: \RequirePackage{gmdoc} -\@ifpackageloaded{lmodern}{% The Latin Modern font family provides - % a~light condensed typewriter font that seems to be the most - % suitable for the marginpar CS marking. - \def\marginpartt{\normalfont\fontseries{lc}\ttfamily}}% +\ifgmcc@oldfonts + \@ifpackageloaded{lmodern}{% The Latin Modern font family provides + % a~light condensed typewriter font that seems to be the most + % suitable for the marginpar CS marking. + \def\marginpartt{\normalfont\fontseries{lc}\ttfamily}}{}% +\else + \IfFileExists{/media/BleuDeParis/texmf/tex/xelatex/crop.cfg}% + {\def\mpttversion{1}}{}% my system doesn't see LMTT LC, so on my + % computer I~have to tell \XeTeX explicitly where the font is. + \ifcase\mpttversion + \font\marginpartt= lmtypewriter10-lightcondensed.otf at 10.95pt + \or% (when =1, on my computer that is) + \font\marginpartt= % + [/home/natror/.fonts/lmtypewriter10-lightcondensed.otf] at 10.95pt + \else % other values allow you to define |\marginpartt| yourself. + \fi +%^^A~ \iffontchar \marginpartt 32 \show\relax \else \show\par\fi +%^^A~ +%^^A~ LMTypewriter10-LightCondensed.pfb at 10.95pt +%^^A~ "LMTypewriter10:style=LightCondensed" +%^^A~ "LMTypewriter10 LightCond,LMTypewriter10\bslash-LightCond:style=Regular" +%^^A~ "LMTypewriter10:style=LightCondensed" +%^^A~ Garamond +%^^A~ LMTypewriter10-Light.pfb +%^^A~ /home/natror/.fonts/lmtypewriter10-lightcondensed.otf +\fi % ^^A\setcounter{IndexColumns}{2} narrow columns do spare space and @@ -298,13 +443,26 @@ \def\EOFMark{\rightline{\ensuremath{\square}}} + \endinput % \changes{v0.677}{06/9/23}{Added checkings if \pk{mwart.cls} and -% \pk{lmodern.sty} are available and more standard behaviour if they -% are not} +% \pk{lmodern.sty} are available and more standard behaviour if they +% are not} % % \changes{v0.70}{06/10/10}{Added some options and Latin Modern Light -% Condensed to the marginpar CSs.} +% Condensed to the marginpar CSs.} +% +% \changes{v0.76}{2007/10/30}{The \cs[]{gmeometric} option made +% obsolete and the \pk{gmeometric} package is loaded always, for +% \XeTeX-compatibility. And the class options go \pk{xkeyval}.} +% +% \changes{v0.77}{2007/11/16}{Bug fix of sectioning commands in +% \pk{mwcls} and the default font encoding for \TeX ing old way +% changed from \acro{QX} to \acro{T1} because of the `corrupted +% \acro{NTFS} tables' error} +% +% \changes{v0.78}{2007/11/19}{Added the \env{pagella} option not to +% use Adobe Minion Pro that is not freely licensed} % % \Finale diff --git a/Master/texmf-dist/tex/latex/gmdoc/gmoldcomm.sty b/Master/texmf-dist/tex/latex/gmdoc/gmoldcomm.sty new file mode 100644 index 00000000000..e4bcc16cbf5 --- /dev/null +++ b/Master/texmf-dist/tex/latex/gmdoc/gmoldcomm.sty @@ -0,0 +1,92 @@ +% +% \GetFileInfo{gmoldcomm.sty} +% \title{The \pk{gmoldcomm} Package\thfileinfo} +% \author{Natror (Grzegorz Murzynowski)} +% \date{\today} +% \maketitle +% +% +% This is a~package +% for handling the old comments in \LaTeXe\ Source Files when \LaTeX^^B +% ing them with the \pk{gmdoc} package. +% +% Written by Natror (Grzegorz Murzynowski) 2007/11/10. +% +% It's a~part of the \pk{gmdoc} bundle and as such a~subject to the +% \LaTeX\ Project Public License. +% +% +% \stanza +% Scan CSs and put them in tt. If at beginning of line, precede them +% with |%|. Obey lines in the commentary. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{gmoldcomm} + [2007/11/10 v0.99 LaTeX old comments handling (GM)] + +\newenvironment{oldcomments}{% + \catcode`\\=\active + \let\do\@makeother + \do\$% Not only CSs but also special chars happen in the old comments. + \do\|\do\#\do\{\do\}\do\^\do\_\do\&% + \gmoc@defbslash + \obeylines + \StoreMacro\finish@macroscan + \def\finish@macroscan{% + \@xa\gmd@ifinmeaning\macro@pname\of\gmoc@notprinted% + {}{{\tt\ifvmode\%\fi\bslash\macro@pname}}% + \gmoc@checkenv + }% +}{} + +{\escapechar\m@ne +\xdef\gmoc@notprinted{\string\begin,\string\end}} + +\def\gmoc@maccname{macrocode} +\def\gmoc@ocname{oldcomments} + + +\foone{% + \catcode`\[=1 \catcode`\]=2 + \catcode`\{=12 \catcode`\}=12 } +[\def\gmoc@checkenv[% + \@ifnextchar{%^^A} + [\gmoc@checkenvinn][]]% +% +\def\gmoc@checkenvinn{#1}[% + \def\gmoc@resa[#1]% + \ifx\gmoc@resa\gmoc@maccname + \def\next[% + \begingroup + \def\@currenvir[macrocode]% + \RestoreMacro\finish@macroscan + \catcode`\\=\z@ + \catcode`\{=1 \catcode`\}=2 + \macrocode]% + \else + \ifx\gmoc@resa\gmoc@ocname + \def\next[\end[oldcomments]]% + \else + \def\next[% + % ^^A \typeout[**** detected environment [#1]]% + \{#1\}% + % ^^A \show\relax + ]% + \fi + \fi + \next]% +] + +\foone{% + \catcode`\/=\z@ + \catcode`\\=\active} +% \CodeEscapeChar\/ +{/def/gmoc@defbslash{% + /let\/scan@macro}} +% \CodeEscapeChar\\ + +\def\task#1#2{} + +\endinput + +%\NoEOF |