\ifx\plainpkginfo\undefined \gdef\plainpkginfo{\ProvidesFile{% % plainpkg.tex} [% 2012/09/19 v0.4a plain package management]} %% %% Copyright (C) 2012 Uwe Lueck, %% http://www.contact-ednotes.sty.de.vu %% -- author-maintained in the sense of LPPL below -- %% %% This file can be redistributed and/or modified under %% the terms of the LaTeX Project Public License; either %% version 1.3c of the License, or any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% We did our best to help you, but there is NO WARRANTY. %% %% Please report bugs, problems, and suggestions via %% %% http://www.contact-ednotes.sty.de.vu %% %% == Purpose and Usage == %% ... of the file `plainpkg.tex' is described in Section~\ref{sec:pu} %% of the documentation file `plainpkg-doc.pdf' generated from %% `plainpkg-doc.tex' (... in case somebody is reading the plain %% text of `plainpkg.tex'). %% %% == Avoiding Being Loaded Twice == %% \label{sec:once} %% Continuing the first conditional: \else %% Keeping the `\endinput' \emph{outside} the conditional: \expandafter \endinput \fi %% The earlier idea to close the conditional more below %% conflicted with avoiding `\input stacklet' under 'readprov'. %% %% == \cs{global} == %% A funny idea of my earlier 'makedoc' in the 'nicetext' bundle %% was that its macro definitions should be \emph{local}, %% for \emph{preprocessing} documentation files---results %% being written to files. Well, but when `makedoc.sty' loads %% the present `plainpkg.tex', the latter's definitions should %% \emph{last}. Therefore, v0.4 renders all definitions \emph{global}. %% I.e., `\def' is replaced by `\gdef', `\edef' by `\xdef', %% and `\let' assignments are prefixed with `\global'. %% %% == A Tool for \cs{csname} == %% \label{sec:withcs} %% |\withcsname| is a little helper with `\csname' %% that will be used by 'stacklet' as well. Usage actually should be %% about as %% \[`\withcsname\ \endcsname'\] %% or %% \[`\withcsname\\endcsname'\] %% (but better don't expect that `@' were a non-letter-char!\@) %% 2012/08/27 %% or %% \[`\withcsname\\endcsname'\] %% (tokenization~...) %% and should result in a sequence of two tokens---in %% %% <- fixed 2012/08/27 -> %% the \ctanpkgref{dowith} notation--- %% \[?\,?\quad \mbox{or}\quad %% ?\,?\] %% or\quad ?\,? ... \gdef\withcsname#1{\expandafter#1\csname} %% 2012/08/27 I realize that from the three files I made this weekend %% ('plainpkg.tex', 'stacklet.sty', 'actcodes.sty'), %% a single ?`withcsname' token appears in macro replacement %% ``texts" ('actcodes' doesn't use it at all)---wondering %% whether I should remove it TODO---however, %% it improves readability of the files. %% %% == \cs{Provides\dots}, \cs{ifltx} == \ifx\ProvidesPackage\undefined %% ... or can it be `\relax', cf. concern in 'german.sty'? %% %% We expect that |\ProvidesFile| and |\ProvidesPackage| %% are used with the trailing ``optional" argument: \gdef\ProvidesFile#1[#2]{\wlog{#1 #2}} %% |\ProvidesPackage| gets \ctanpkgref{maybeload} functionality. %% v0.2 aims at saving a few tokens. And we form a token name %% containing an `@' without changing its `\catcode'. \xdef\ProvidesPackage#1{% \noexpand\withcsname \withcsname\noexpand @providespkg\endcsname %% ` ' v0.3 ver@#1.sty\endcsname{#1}} %% .sty v0.3 %% ... so `\ProvidesPackage{}' should result in %% P 2012/09/15 %% \[\!\!\!\!?`withcsname'\,?`@providespkg'\,\textsf{in}\sb{k}\sp*(`ver@')\, %% ?`endcsname'\,.`{'\,\textsf{in}\sb{k}\sp*()\,.`}'\!\] %% where $\textsf{in}\sb{k}\sp*(\chi)$ is the tokenization of $\chi$ %% with current `\catcode' function $k$; and this should further result in %% \[?`@providespkg'\,?`ver@'\,.`{'\,\textsf{in}\sb{k}\sp*()\,.`}'\] % \show\ProvidesPackage %% The first tokens of the next code line result in %% ?`gdef'\,?`@providespkg': %% gdef 2012/09/19 \withcsname\gdef @providespkg\endcsname#1#2[#3]{% %% ` ' v0.3 \ifx#1\relax \ProvidesFile{#2.sty}[#3]% \xdef#1{#3}% %% ... like \LaTeX, while 'maybeload' consumes less memory. \else \expandafter \endinput \fi } %% Moreover, if `\ProvidesPackage' has not been defined before, %% neither \LaTeX\ is present nor \ctanpkgref{miniltx} has been %% loaded, so |\ifltx| is rendered `\iffalse' %% (the construction ensures proper skipping by the outer %% conditional, and `\ifltx' rather than `\iflatex' alludes to %% considering 'miniltx' and to our worries): \global \expandafter \let \expandafter \ifltx \csname iffalse\endcsname %% If `\ProvidesPackage' has been defined, how come? %% Not from 'plainpkg.tex' which is not loaded twice. %% Rather from \LaTeX\ or 'miniltx': \else \global \withcsname \let ifltx\expandafter\endcsname %% 2012/08/26 \csname iftrue\endcsname \fi %% Now `\ProvidesFile' for 'plainpkg.tex' can be executed: \plainpkginfo %% %% == \cs{RequirePackage} == %% Without \LaTeX\, ... \ifltx \else %% 2012/08/25 %% |\RequirePackage| simply is ... \gdef\RequirePackage#1{\input #1.sty} \fi %% %% == \cs{catcode} Stacks == %% ... (for private letters) are provided by 'stacklet.sty' ... \RequirePackage{stacklet} %% %% == Leaving and \acro{HISTORY} == \endinput %% VERSION HISTORY v0.1 2012/08/22 very first v0.2 2012/08/23 refinements with \csname v0.3 2012/08/24 \oncsname -> \withcsname; loading `stacklet.sty' with LaTeX; doc. extended 2012/08/25 doc. "installing" mv. here; aligning first conditional + label, \ifltx 2012/08/26 explaining \withcsname; corrected second \ifltx; bug fix "ver@#1.sty"!!! 2012/08/27 account for `@' being letter; doc. fix remark on keeping \withcsname v0.4 2012/08/27 \global 2012/09/15 doc. was \Providespackage 2012/09/16 doc: endorsing \RequirePackage more clearly 2012/09/17 bug fix: \def\plain... -> \gdef\plain... (for local makedoc processing) STORED SEPARATELY v0.4a 2012/09/19 moving documentation outside, \label..., ?gdef