summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/nag
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:55:25 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:55:25 +0000
commit7755f6051d2f3160eec1c086b02fb51ce63d4d98 (patch)
tree2f3c6463d006fc4f6c5b82fd6551c8ab3d6b4295 /Master/texmf-dist/source/latex/nag
parent3195e988a5f7517733c94f67240253dd127fac80 (diff)
trunk/Master/texmf-dist/source/latex/nag
git-svn-id: svn://tug.org/texlive/trunk@404 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/nag')
-rw-r--r--Master/texmf-dist/source/latex/nag/nag.dtx572
-rw-r--r--Master/texmf-dist/source/latex/nag/nag.ins46
2 files changed, 618 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/nag/nag.dtx b/Master/texmf-dist/source/latex/nag/nag.dtx
new file mode 100644
index 00000000000..3a39009b428
--- /dev/null
+++ b/Master/texmf-dist/source/latex/nag/nag.dtx
@@ -0,0 +1,572 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2005 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3a or, at your
+% option, any later version. The latest version of this license is in
+%
+% http://www.latex-project.org/lppl.txt
+%
+% \fi
+%
+%\iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[l2tabu]{nag}
+\GetFileInfo{nag.sty}
+\typeout{\fileversion}
+\usepackage[T1]{fontenc}
+\usepackage{bera}% much smaller pdf now.
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{nag.dtx}
+\end{document}
+%</driver>
+%<*l2tabunag>
+\ProvidesFile{l2tabu.nag}[2005/03/23 v1.7 l2tabu rules for nag.sty (ulmi)]
+%%
+%% The sins.
+%%
+%% Section numbers refer to l2tabuen 1.7 revised/enlarged dated 2004OCT24
+%% \S 1.1
+\ObsoletePackage{a4wide}{the \lq a4paper\rq\space class option}
+\ObsoletePackage{a4}{the \lq a4paper\rq\space class option}
+%% \S 1.2--1.5 cannot reasonably be checked programmatically
+%% \S 1.6 is handled by H.Harders' onlyamsmath package
+%% \S 1.7 cannot reasonably be checked programmatically
+%% \S 1.8 \sloppy is called by parbox, among others, and would
+%% give many spurious warnings.
+%% \S 2.1.1
+\ObsoleteCS[an old LaTeX 2.09 command]{bf}{\protect\bfseries\space or \protect\textbf}
+\ObsoleteCS[an old LaTeX 2.09 command]{it}{\protect\itshape\space or \protect\textit}
+\ObsoleteCS[an old LaTeX 2.09 command]{rm}{\protect\rmfamily\space or \protect\textrm}
+\ObsoleteCS[an old LaTeX 2.09 command]{sc}{\protect\scshape\space or \protect\textsc}
+\ObsoleteCS[an old LaTeX 2.09 command]{sf}{\protect\sffamily\space or \protect\textsf}
+\ObsoleteCS[an old LaTeX 2.09 command]{sl}{\protect\slshape\space or \protect\textsl}
+\ObsoleteCS[an old LaTeX 2.09 command]{tt}{\protect\ttfamily\space or \protect\texttt}
+\ObsoleteCS[an old LaTeX 2.09 command]{cal}{\protect\mathcal}% Hmm, this is not in l2tabu?
+%% \S 2.1.2
+\ObsoleteCS[TeX]{over}{\protect\frac}
+\ObsoleteCS[TeX]{choose}{\protect\frac\space or amsmath's \protect\binom}
+%% \S 2.1.3
+\ObsoleteCS[TeX]{centerline}{\protect\centering\space or center environment}
+%% \S 2.2.1
+\ObsoleteClass{scrlettr}{the scrlttr2 package}
+%% \S 2.2.2
+\ObsoletePackage{epsf}{the graphicx package}
+\ObsoletePackage{psfig}{the graphicx package}
+\ObsoletePackage[deprecated]{epsfig}{the graphicx package directly}
+%% \S 2.2.3
+\ObsoletePackage{doublespace}{the setspace package}
+%% \S 2.2.4
+\ObsoletePackage{fancyheadings}{the fancyhdr or scrpage2 packages}
+\ObsoletePackage{scrpage}{the scrpage2 package}
+%% \S 2.2.5
+\ObsoletePackage{isolatin}{the inputenc package with option latin1}
+\ObsoletePackage{umlaut}{the inputenc package with suitable option
+ (latin1, utf8 ...)}
+\ObsoletePackage{isolatin1}{the inputenc package with option latin1}
+%% \S 2.2.6
+\ObsoletePackage{t1enc}{the fontenc package with option T1}
+%% \S 2.2.7 we don't check for bst yet.
+%% (This is in l2tabu 1.8)
+\ObsoletePackage{caption2}{the caption package v3.0 or later}
+%% \S 2.3.1-3
+\ObsoletePackage{times}{the mathptmx, helvet (option scaled=.9), courier packages}
+\ObsoletePackage{pslatex}{the mathptmx, helvet (option scaled=.9), courier packages}
+\ObsoletePackage{mathptm}{the mathptmx package}
+%% \S 2.3.4-5
+\ObsoletePackage{palatino}{the mathpazo, helvet (option scaled=.95), courier packages}
+\ObsoletePackage{mathpple}{the mathpazo package}
+%% \S 2.3.6 can't be checked
+%% \S 2.3.7
+\ObsoletePackage{euler}{the eulervm package}
+\ObsoletePackage{utopia}{the fourier package}
+%% \S 3.1
+\g@addto@macro\nag@floats{,figure,table}%
+%% \S 3.2
+\ObsoleteCS[a misuse]{endappendix}{%
+ \protect\appendix\space as a switch, not an environment.\MessageBreak
+ \protect\end{appendix} detected}
+%% \S 3.3 handled by onlyamsmath.
+%% \S 3.4 -- nothing to be done --
+%</l2tabunag>
+%
+%<*abortnag>
+\ProvidesFile{abort.nag}[2005/05/08 v0.1 treat complaints as errors (ulmi)]
+\renewcommand\nag@warn[1]{%
+ \addtocounter{nag@sins}{1}%
+ \PackageError{nag}{#1}{#1}%
+}
+\renewcommand\nag@warnNoLine[1]{%
+ \addtocounter{nag@sins}{1}%
+ \PackageError{nag}{#1}{#1}%
+}
+%</abortnag>
+%
+%<*nagdemo>
+%% Test document: finding and complaining about obsolete macros.
+%%
+\RequirePackage[l2tabu]{nag}
+\documentclass{article}
+%% some usual culprits
+\usepackage{times, a4wide, epsfig, palatino}
+\begin{document}
+\typeout{Next: it and bf complaints}
+{\it f{\bf oo}f}highter
+
+\typeout{Next: center in float complaint}
+\begin{figure}
+ \begin{center}
+ Foo.
+ \end{center}
+ \caption{\label{fig}Higher!}
+\end{figure}
+
+\typeout{Next: no complaints: manually fake caption}
+\begin{figure}
+ Foo.
+\makeatletter\nag@hascaptiontrue\makeatother
+ \label{date}
+\end{figure}
+
+\typeout{Next: put-label-after-caption complaint}
+\begin{figure}
+ Foo.
+ \label{coconut}\caption{Bar.}
+\end{figure}
+
+\typeout{Next: no-caption complaint}
+\begin{figure}
+ Foo.
+\end{figure}
+
+\begin{appendix}
+ \begin{center}
+ Foo.
+ \end{center}
+\typeout{Next: over complaint, centerline complaint}
+ \centerline{Ferner gilt $4\over 2=2$.}
+\typeout{Next: appendix complaints}
+\end{appendix}
+\typeout{You should get 13 warnings.}
+\end{document}
+%</nagdemo>
+%
+%<*!(l2tabunag,abortnag,nagdemo)>
+%\fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%\CheckSum{169}
+%
+%\DoNotIndex{\if,\else,\fi,\PackageWarning,\PackageWarningNoLine,\typeout}
+%\DoNotIndex{\@for,\addtocounter,\arabic,\centering,\csname,\CurrentOption}
+%\DoNotIndex{\DeclareOption,\def,\do,\endcsname,\expandafter,\ifnum,\ifx}
+%\DoNotIndex{\InputIfFileExists,\let,\lq,\rq,\MessageBreak,\protect}
+%\DoNotIndex{\space,\stepcounter,\the,\value,\relax,\ProcessOptions}
+%\DoNotIndex{\ifcsname,\@ifundefined,\flo,\begingroup,\endgroup}
+%
+%\changes{0.1}{2005/03/29}{First official version.}
+%\changes{0.2}{2005/05/08}{Rephrased umlaut.sty warning, suggested by
+%Patrick Happel.}
+%\changes{0.2}{2005/05/08}{Added abort.nag, suggested by Michael Zedler}
+%\changes{0.3}{2005/07/07}{New ifdefined that won't relax the commands}
+%
+%\newcommand\pkg[1]{\textsf{#1}}
+%\title{The \pkg{nag} package\ignorespaces%
+% \thanks{This document corresponds to \pkg{nag}~\fileversion,
+% dated~\filedate.}}
+% \author{Ulrich Michael Schwarz\ignorespaces%
+% \thanks{\texttt{ulmi@users.sarovar.org}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% Old habits die hard. All the same, there are commands, classes and
+% packages which are outdated and superseded. \pkg{nag} provides
+% routines to warn the user about the use of those. As an example, we
+% provide an extension that detects many of the ``sins'' described in
+% \pkg{l2tabu}.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{User-side considerations.}
+%
+% \subsection{Installation.}
+%
+% Process \texttt{nag.ins} with \LaTeX\ to obtain four files:
+% \texttt{nag.sty} and \texttt{l2tabu.nag} must go to a place where
+% \LaTeX\ will find them, like the local TEXMF tree. (If all else fails and
+% you need it to work \emph{right now}, having them in the same
+% directory as the \LaTeX\ file you want to use them on may work under
+% many circumstances.) You can, as usual, run \LaTeX\ on
+% \texttt{nag.dtx} to obtain this documentation, including the
+% implemenation docs. (This is recommended if you plan to extend
+% \pkg{nag} to handle your own packages.) \texttt{nagdemo.tex} is
+% a horrible document that will show you many of the warnings that
+% \pkg{nag} can generate.
+%
+% \subsection{Usage.}
+%
+% Add the following to the beginning your main document (Comments and
+% |\listfiles| can be safely left before it, though):
+% \begin{verbatim}
+% \RequirePackage[l2tabu]{nag}\end{verbatim}
+% This will check for many common mistakes, and give some hints on what
+% to use instead. However, you should always refer to l2tabu for a more
+% detailed explanation of the whats and whys: it gives more information
+% than can be possibly pressed into two lines of error message.
+%
+% \subsection{\texttt{l2tabu.nag}}
+%
+% In a nutshell, \texttt{l2tabu.nag} detects the following:
+% \begin{itemize}
+% \item Usage of the 2.09-style font commands |\it|, |\bf|, |\rm|,
+% |\sc|, |\sl|, |\tt| and |\cal|.
+% \item Usage of the \TeX-style commands |\over| and |\choose|.
+% \item Usage of |\centerline|.
+% \item Usage of the outdated packages \pkg{epsfig}, \pkg{psfig},
+% \pkg{epsf}, \pkg{doublespace}, \pkg{fancyheadings}, \pkg{scrpage},
+% \pkg{umlaut}, \pkg{isolatin}, \pkg{isolatin1}, \pkg{t1enc},
+% \pkg{caption2}, \pkg{psfonts}, \pkg{mathptm}, \pkg{times},
+% \pkg{palatino}, \pkg{mathpple}, \pkg{euler} and \pkg{utopia}, and of
+% the outdated class \pkg{scrlttr}.
+% \item Figures and tables without caption (this is not technically
+% in l2tabu, but the people who have floats without captions tend
+% to ask ``Why is \LaTeX\ moving my pictures away from where I
+% put them?''), labels within floats
+% that do not reference the caption, and usage of the center
+% environment within floats.
+%\end{itemize}
+%
+% It is beyond the possibilities of this package to detect things like
+% use of \TeX\ assignment syntax, or direct change of paper
+% parameters, or reliable detection of user-issued |\sloppy|.
+% Outdated maths environments are not treated because those can
+% already be handled by Harald Harders' \pkg{onlyamsmath}.
+%
+% Be warned, hence, that this package will possibly balk at
+% legitimate use, and not find illegitimate use in all cases. It is a
+% tool, not a replacement for study of \pkg{l2tabu}.
+%
+% \subsection{\texttt{abort.nag}}
+% Requesting this nag file will turn all complaints into errors.
+%
+%\StopEventually{\PrintChanges}
+% \section{Author-side considerations and implementation.}
+% If you are a package or class author and want to extend the range
+% of \pkg{nag} (or prevent \pkg{nag} from criticizing
+% your macros), please see the description below, in
+% sections~\ref{sec:obsol-cmds} and following. It is
+% probably wise to group new rules in a seperate nag file:
+% users can request nag files by passing their name as a package
+% parameter, as shown above for the example of l2tabu.
+%
+% \subsection{Low-level tools.}
+% Identify ourselves.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{nag}[2005/07/07 0.3 warning about nag things (ulmi)]
+% \end{macrocode}
+% First of all, two counters we need. The first is used to
+% generate running numbers for replacement macros, the latter is
+% stepped for each complaint we have, so that the user gets a
+% frighteningly high number, showing how sinful he or she is.
+% \begin{macrocode}
+\newcounter{nag@c}
+\newcounter{nag@sins}
+% \end{macrocode}
+%
+% \begin{macro}{\nag@prepend}
+% |\nag@prepend|\marg{cs}\marg{something}:
+% Prepend \meta{something} to the macro definition of |\|\meta{cs}.
+%
+% In reality, we do call indirection: save old macro away,
+% redefine macro to do the something, call old macro.
+% (With thanks to Juergen Goebel, Heiko Oberdiek and Rolf Niepraschk
+% (\pkg{savesym}))
+%
+% \begin{macrocode}
+ \newcommand\nag@prepend[2]{%
+ \expandafter\let
+ \csname nag@@#1@\the\value{nag@c}\expandafter\endcsname
+ \csname #1\endcsname
+ \expandafter\nag@pr@p@nd\csname #1\expandafter\endcsname
+ \csname nag@@#1@\the\value{nag@c}\endcsname{#2}%
+ \stepcounter{nag@c}%
+}
+\newcommand\nag@pr@p@nd[3]{%
+ \def#1{#3#2}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nag@warn}
+% All complaints to the user run through one of these two macros,
+% with or without source line.
+% \begin{macrocode}
+\newcommand\nag@warn{%
+ \addtocounter{nag@sins}{1}%
+ \PackageWarning{nag}%
+}
+\newcommand\nag@warnNoLine{%
+ \addtocounter{nag@sins}{1}%
+ \PackageWarningNoLine{nag}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Obsoletifying commands.}\label{sec:obsol-cmds}
+%
+% (No, I do not think that is a proper word either.)
+%
+% \begin{macro}{\ObsoleteCS}
+% Usage: |\ObsoleteCS|\oarg{reason}\marg{CS}\marg{suggestions}
+% Mark |\|\meta{CS} as obsolete. \meta{reason} defaults to
+% obsolete. When the macro is used anyway, the following
+% warning is logged:
+%
+% \noindent|Command \|\meta{CS}| is |\meta{reason}|. Use |\meta{suggestions}| instead.|
+% \begin{macrocode}
+\newcommand\ObsoleteCS[3][obsolete]{%
+ \AtBeginDocument{%
+ \nag@prepend{#2}{%
+ \nag@warn{%
+ Command \expandafter\protect\csname #2\endcsname\space is #1.
+ \MessageBreak
+ Use #3 instead}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Obsoletifying packages and classes.}
+%
+% Checking for packages and classes is done by looking for
+% |ver@foo.sty|, which holds the version information that is also
+% displayed by |\listfiles|. This means that we're out of luck if
+% fontenc ever becomes obsolete, because that won't be detected.
+%
+% First, define a macro to check if a control sequence is defined.
+% Unlike |\@ifundefined|, this will not define the control sequence
+% to |\relax|, but the arguments will be executed in a group. For
+% our purposes, this doesn't matter, because we only give a warning
+% (and |\addtocounter| already is |\global|).
+% \begin{macrocode}
+\newcommand\nag@ifcsname[3]{%
+ \begingroup\@ifundefined{#1}{#3}{#2}\endgroup
+}
+% \end{macrocode}
+% Just because we can, use $\epsilon$\TeX' |\ifcsname| if we can. This
+% bootstrapping gives me a big grin\dots Note we add an extra group
+% for compatibility with the non-$\epsilon$ case.
+% \begin{macrocode}
+\nag@ifcsname{ifcsname}{%
+ \renewcommand*\nag@ifcsname[3]{%
+ \begingroup
+ \ifcsname #1\endcsname #2\else #3\fi
+ \endgroup
+ }%
+% \end{macrocode}
+% This way of escaping the grouping gives me an even
+% bigger grin.
+% \begin{macrocode}
+ \global\let\nag@ifcsname\nag@ifcsname
+}{}
+% \end{macrocode}
+%
+% \begin{macro}{\ObsoletePackage}
+% Usage: |\ObsoletePackage|\oarg{reason}\marg{package}\marg{%
+% alternative}. Mark \meta{package} as obsolete. \meta{reason} defaults
+% to obsolete. If the \meta{package} is used anyway, at the end of
+% the compilation, the following warning will be displayed:
+%
+% \noindent|Package |\meta{package}| is |\meta{reason}|. Use |
+% \meta{alternative}| instead.|
+% \begin{macrocode}
+\newcommand\ObsoletePackage[3][obsolete]{%
+ \AtEndDocument{%
+ \nag@ifcsname{ver@#2.sty}{%
+ \nag@warnNoLine{%
+ Package #2 is #1.\MessageBreak
+ Use #3 instead}%
+ }{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ObsoleteClass}
+% Usage: |\ObsoleteClass|\oarg{reason}\marg{class}\marg{%
+% alternative}. Mark \meta{class} as obsolete. \meta{reason} defaults
+% to obsolete. If the \meta{class} is used anyway, at the end of
+% the compilation, the following warning will be displayed:
+%
+% \noindent|Class |\meta{class}| is |\meta{reason}|. Use |
+% \meta{alternative}| instead.|
+% \begin{macrocode}
+\newcommand\ObsoleteClass[3][obsolete]{%
+ \AtEndDocument{%
+ \nag@ifcsname{ver@#2.cls}{%
+ \nag@warnNoLine{%
+ Class #2 is #1.\MessageBreak
+ Use #3 instead}%
+ }{}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Common float errors and no-nos.}
+%
+% We do the following:
+% \begin{itemize}
+% \item check for presence of a caption
+% \item check for absence of the center environment
+% \item check that a label comes only after a caption
+% \end{itemize}
+%
+% First of all, we define two ifs to memorize whether we have a
+% label and/or a caption in the float already. Package writers may
+% want to set these manually behind \pkg{nag}'s back. In this
+% way, they can suppress possible warnings if they know what
+% they're doing -- we only check at the end of the float
+% environment, which gives them plenty of time to call
+% |\csname nag@haslabeltrue\endcsname| et al.
+% (Thanks to Markus Kohm for pointing out this need.)
+% \begin{macrocode}
+\newif\ifnag@haslabel
+\newif\ifnag@hascaption
+% \end{macrocode}
+% Now, to the work proper: first, add the endcenter check, then,
+% prepare to set up the caption/label checks locally to the floats,
+% and finally, add the code that generates the warning.
+% \begin{macrocode}
+\newcommand\nag@hackfloat[1]{%
+ \nag@prepend{#1}{%
+ \nag@prepend{endcenter}{%
+ \nag@warn%
+ {\lq center\rq\space environment in #1.\MessageBreak
+ Maybe you want \protect\centering\space instead}
+ }%
+ }
+ \nag@prepend{#1}{%
+% \end{macrocode}
+% Add checks to all macros named by |\nag@labels|
+% and |\nag@captions|, respectively.
+% \changes{0.3}{2005/07/07}{Fixed missing globals}
+% The hascounter etc. information is now global. I don't think
+% those should be hidden by groups. In particular, a center or
+% minipage environment would hide the caption inside from a label
+% outside.
+%
+% \emph{Note:} we cannot exchange the order of the for loops here:
+% if a cs generates both a label and a caption, it shouldn't get
+% complained about.
+% \begin{macrocode}
+ \@for\labelprovider:=\nag@labels\do{%
+ \nag@prepend{\labelprovider}%
+ {\nag@captioncheck\global\nag@haslabeltrue}
+ }%
+ \@for\captionprovider:=\nag@captions\do{%
+ \nag@prepend{\captionprovider}{\global\nag@hascaptiontrue}%
+ }%
+ \global\nag@haslabelfalse\global\nag@hascaptionfalse
+ }%
+ \nag@prepend{end#1}{%
+ \ifnag@hascaption\relax\else
+ \nag@warn%
+ {#1 with no \protect\caption}%
+ \fi
+ }%
+}
+\newcommand\nag@captioncheck{%
+ \ifnag@hascaption\else
+ \nag@warn{\protect\label\space in float, but not after
+ \protect\caption}%
+ \fi
+}
+% \end{macrocode}
+% Define the lists of commands that are floats, generate labels,
+% and generate captions, respectively. We don't start with defined
+% floats (that is for l2tabu.obs to set up), but keep the list
+% non-empty, so that we can always add to it with
+% |\g@addto@macro|\marg{list}|{,|\meta{things}|}|.
+% \begin{macrocode}
+\def\nag@floats{nag@dummy}
+\def\nag@labels{label}
+%% The latter two are used by KOMA-Script.
+\def\nag@captions{caption,captionabove,captionbelow}
+% \end{macrocode}
+%
+% We call the above for each float environment named via
+% |\nag@floats|:
+% \begin{macrocode}
+\newcommand\nag@floatsetup{%
+ \@for\flo:=\nag@floats\do{%
+ \expandafter\nag@hackfloat\expandafter{\flo}%
+ }%
+}
+% \end{macrocode}
+% but only after all other packages get their chance to add to the
+% list:
+% \begin{macrocode}
+\AtBeginDocument{%
+ \nag@floatsetup
+}
+% \end{macrocode}
+%
+% At the very end, we will display a running total of complaints.
+% This feature was more-or-less suggested by David Kastrup.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \AtEndDocument{%
+ \ifnum\value{nag@sins}>0%
+ \PackageWarningNoLine{nag}{\arabic{nag@sins} complaints
+ in total}%
+ \else
+ \typeout{No complaints by nag.}%
+ \fi
+ }%
+}
+% \end{macrocode}
+%
+% Finally, we deal with package options.
+% This is simple: just try to input appropriate nag files.
+% \begin{macrocode}
+\DeclareOption*{%
+ \InputIfFileExists{\CurrentOption.nag}{%
+ \typeout{package nag: Loaded \CurrentOption.nag}%
+ }{%
+ \PackageWarningNoLine{nag}{Required ruleset
+ \CurrentOption.nag, and it wasn't there}
+ }%
+}
+\ProcessOptions*
+% \end{macrocode}
+%\PrintIndex
+%\Finale
+%\iffalse
+%</!(l2tabunag,abortnag,nagdemo)>
+%%X Local Variables:
+%%X mode: latex
+%%X End:
+%\fi
diff --git a/Master/texmf-dist/source/latex/nag/nag.ins b/Master/texmf-dist/source/latex/nag/nag.ins
new file mode 100644
index 00000000000..ea449ef3b41
--- /dev/null
+++ b/Master/texmf-dist/source/latex/nag/nag.ins
@@ -0,0 +1,46 @@
+%%
+%% This is a bog-standard .ins file: nag.ins
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+This is a generated file.
+
+This file is part of the `nag' package.
+The `nag' package has the LPPL maintenance status: maintained.
+Current Maintainer is Ulrich M. Schwarz, ulmi@users.sarovar.org
+
+Copyright (C) 2005 by Ulrich M. Schwarz.
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3a of this license or (at your option) any later
+version. The latest version of this license is in:
+http://www.latex-project.org/lppl.txt
+
+\endpreamble
+
+\generate{\file{nag.sty}{\from{nag.dtx}{nag}}
+ \file{l2tabu.nag}{\from{nag.dtx}{l2tabunag}}
+ \file{abort.nag}{\from{nag.dtx}{abortnag}}
+ \file{nagdemo.tex}{\from{nag.dtx}{nagdemo}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space nag.sty}
+\Msg{* \space\space l2tabu.nag}
+\Msg{* \space\space abort.nag}
+\Msg{*}
+\Msg{* To produce the fully-indexed documentation run}
+\Msg{latex nag.dtx}
+\Msg{makeindex -s gglo.ist -o nag.gls nag.glo}
+\Msg{makeindex -s gind.ist -o nag.ind nag.idx}
+\Msg{latex nag.dtx}
+\Msg{*}
+\Msg{* To see something happen, run}
+\Msg{latex nagdemo}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endbatchfile \ No newline at end of file