diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/tools/showkeys.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/tools/showkeys.dtx | 796 |
1 files changed, 796 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/tools/showkeys.dtx b/Master/texmf-dist/source/latex/tools/showkeys.dtx new file mode 100644 index 00000000000..e64dbda0956 --- /dev/null +++ b/Master/texmf-dist/source/latex/tools/showkeys.dtx @@ -0,0 +1,796 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the Standard LaTeX `Tools Bundle'. +% ------------------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% 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 +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% The list of all files belonging to the LaTeX `Tools Bundle' is +% given in the file `manifest.txt'. +% +% \fi +% \iffalse +%% File: showkeys.dtx Copyright (C) 1992-1997 David Carlisle +% +%<*dtx> + \ProvidesFile{showkeys.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{showkeys} +%<driver> \ProvidesFile{showkeys.drv} +% \fi +% \ProvidesFile{showkeys.dtx} + [1997/06/12 v3.12 Show cite and label keys (DPC)] +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage +% [notcite,notref,color] + {showkeys} +\setlength{\belowcaptionskip}{\baselineskip} +\setlength{\abovecaptionskip}{0pt} +\begin{document} +\DocInput{showkeys.dtx} +\end{document} +%</driver> +% \fi +% +% \GetFileInfo{showkeys.dtx} +% \title{The \textsf{showkeys} package\thanks{This file +% has version number \fileversion, last +% revised \filedate.}} +% \author{David Carlisle} +% \date{\filedate} +% \maketitle +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \CheckSum{516} +% +% +% \changes{v1.01}{1992/08/25}{Initial version} +% \changes{v1.02}{1994/01/05} +% {Fix incorrect initialisation (FGBDA19@CC1.KULEUVEN.AC.BE)} +% \changes{v2.00}{1994/01/31}{new version for LaTeX2e} +% \changes{v2.01}{1994/06/30}{Fix \cs{ProvidesPackage} usage.} +% \changes{v3.00}{1994/09/07} +% {Support harvard, varioref and natbib packages,} +% \changes{v3.02}{1995/03/17} +% {Support new AMS files} +% +% \section{Introduction}\label{sec:intro} +% +% |showkeys.sty| modifies the |\label|, |\ref|, |\pageref|, |\cite|, and +% |\bibitem| commands so that the `internal' key is printed. The package +% tries hard to position these labels so that the formatting of the rest +% of the document is unchanged. |\label| and |\bibitem| cause the +% key to appear in a box either in the margin, or in a \TeX\ box of zero +% width, which may possibly over-print other text. The |\ref|, +% |\pageref| and |\cite| commands print their arguments in small type, +% raised just above the line, like this: \ref{sec:intro}. +% This package works with the \textsf{fleqn} option, the packages +% in the AMS-\LaTeX\ collection, and the \textsf{varioref}, +% \textsf{natbib} and \textsf{harvard} packages. +% +% \changes{v2.00}{1992/01/31} +% {leqno or ams* may now be loaded after showkeys} +% +% \section{Package Options}\label{options} +% Some people have commented that the printing of the |\ref| and +% |\cite| keys is less useful than the printing of the |\label| keys +% and so \textsf{showkeys} now supports two options that can be given +% in the |\usepackage| command: +% \begin{description} +% \item[notref] to stop the redefinition of |\ref| and |\pageref|, +% and related commands from the \textsf{varioref} package. +% \item[notcite] to stop the redefinition of |\cite| and related +% commands from the \textsf{harvard} and \textsf{natbib} packages. +% \end{description} +% So if the package is loaded with |\usepackage[notref]{showkeys}| +% then |\ref| will have its standard definition, but |\label| will +% print its key argument (usually in the margin). +% +% If you find the printed keys distracting, but don't want to use the +% above options to stop them altogether you may use: +% \begin{description} +% \item[color] Print the keys in a distinguishing colour. The default +% value is a light grey. +% \end{description} +% The colours may be changed by redefining the following two colours +% after the package is loaded. +% |refkey| (also used for |\cite|) and +% |labelkey| (also used for |\bibitem|). +% The defaults are: +%\begin{verbatim} +% \definecolor{refkey}{gray}{.75} +% \definecolor{labelkey}{gray}{.75} +%\end{verbatim} +% +% If this option is used the \textsf{color} package will be loaded. +% +% The package accepts two further options. +% \begin{description} +% \item[final] to supress the action of this package, for `final' +% versions. +% \item[draft] the normal behaviour of this package. +% \end{description} +% Clearly there is not much point in entering the |final| option +% directly in the |\usepackage| command, as just not loading this +% package would have the same effect, and execute more quickly, +% however the |final| option may be useful as it may be used once in +% the |documentclass| command to affect any number of packages that +% may be loaded. The |draft| option does not do anything, but is there +% to honour an informal convention that packages have these options in +% pairs. +% +% \section{More Examples}\label{examples} +% The only other similar package that I could find in the macro index, +% \cite{DMJ:mi}, was |showlabels.sty|, \cite{GN:sl}. After the first +% draft of this package was written, I found \cite{anon:sk} on my local +% installation! I think the current package is more robust than +% \cite{anon:sk}, but I thought that |showkeys| was rather a good name, +% so I have stolen it for this file. +% +% \begin{enumerate} +% \item \label{e^1}This has |\label| immediately after |\item|. +% \item This has the |\label| at the end.\label{e^2} +% \end{enumerate} +% +% \[ +% \mbox{A minipage :- }\left\{ +% \begin{minipage}{3in} +% Within environments like this |minipage|, we cannot use +% |\marginpar|\footnotemark, +% so the appearance is slightly different. Here is that |enumerate| +% environment again: +% +% \begin{enumerate} +% \item \label{m&e^1}This has |\label| immediately after |\item|. +% \item This has the |\label| at the end.\label{m&e^2} +% \end{enumerate} +% \end{minipage} +% \right. +% \] +% +% Displayed math (without |equation| counter). +% \[0=0\label{disp}\] +% +% Some text refering to the maths on page~\pageref{disp}, and the +% item~\ref{e^1}.\footnotetext{Actually \texttt{\string\marginpar} is +% not used at all in this package now.} +% +% If |showkeys| thinks that the current environment is going to produce +% an ``equation number'', then it does not show the label where the +% |\label| command occurs, but tries to put it in the margin, as shown +% with equation~\ref{eq:xx}. +% The package `knows' about the standard |equation| and |eqnarray| +% environments, and also all the numbered alignment environments offered +% by the AMS\LaTeX\ package, |amsmath|. +% +% ^^A (|amstex.sty| must be loaded before |showkeys.sty| +% ^^A for this to work.) +% \changes{v2.00}{1992/01/31} +% {leqno or ams* may now be loaded after showkeys} +% +% \begin{equation} +% 1=1\label{eq:xx} +% \end{equation} +% +% \begin{eqnarray} +% 2&=&2\label{eqnar:a}\\ +% 3&=&3\nonumber\\ +% 4&=&4\label{eqnar:b} +% \end{eqnarray} +% +% +% \begin{figure}[ht] +% Within a |figure| environment, the |\label| must not come before the +% |\caption| command. If you place |\label| inside the argument of +% |\caption| the label will be shown like this: +% +% \caption{Within the caption argument.\label{cap:a}} +% +% If you place |\label| immediately after the |\caption| command it will +% be shown like this: +% +% \caption{Immediately after the caption argument.}\label{cap:b} +% +% If you place the |\label| command at some random point after the +% |\caption| command, it may be shown like: +% +% \caption{In vertical mode not immediately after a box.} +% \vspace{2pt} +% +% \label{cap:c} +% \end{figure} +% +% +% \begin{thebibliography}{9} +% +% \bibitem{GN:sl} +% Gil Neiger, \emph{showlabels.sty}, +% Undated package, similar to this one, but shows labels +% inline, affecting the formating of the document. +% +% \bibitem{anon:sk} +% Annonymous, \emph{showkeys.sty}, +% Package, dated 14 May 1988. Very similar to this one, +% also uses |\marginpar| in outer vertical mode. +% +% \bibitem{DMJ:mi} +% David M. Jones, \emph{\TeX\ Macro Index}, +% A catalogue of \TeX\ macros, including \LaTeX\ packages, +% available from all good \TeX\ archives. +% +% \end{thebibliography} +% +% \StopEventually{} +% +% \section{The Macros} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% +% First we handle the options. Normally all related comands are +% defined to show their `keys'. But since v3.03 one can specify: +% +% \texttt{notref} to stop the redefinition of |\ref| (and |\pageref|, +% and related commands from \textsf{varioref} package), +% +% \texttt{notcite} to stop the redefinition of |\cite| and related +% commands from the \textsf{harvard} and \textsf{natbib} packages. +% +% \changes{v3.03}{1995/04/25} +% {Add option handling.} +% \begin{macrocode} +\DeclareOption{notref}{\let\SK@ref\@empty} +\DeclareOption{notcite}{\let\SK@cite\@empty} +% \end{macrocode} +% +% \begin{macro}{\SK@refcolor} +% \begin{macro}{\SK@labelcolor} +% Colour commands. Normally no-op. +% \begin{macrocode} +\let\SK@refcolor\relax +\let\SK@labelcolor\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v3.11}{1996/11/01} +% {Colour support added, inspired by tools/2297} +% |color| option loads the \textsf{color} package and defines the +% colours. Delayed to the end of the package as package loading not +% allowed in this option section. +% \begin{macrocode} +\DeclareOption{color}{\AtEndOfPackage{% + \RequirePackage{color}% + \definecolor{refkey}{gray}{.75}% + \definecolor{labelkey}{gray}{.75}% + \def\SK@refcolor{\color{refkey}}% + \def\SK@labelcolor{\color{labelkey}}}} +% \end{macrocode} +% +% \changes{v3.04}{1995/10/30} +% {final and draft options handling.} +% Allow |final| to be specified in the document class options +% to supress the loading of this package. +% \begin{macrocode} +\DeclareOption{final}{\endinput} +\DeclareOption{draft}{} +% \end{macrocode} +% +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% \changes{v2.00}{1992/01/31} +% {\cmd{reset@font} is now standard} +% +% \begin{macro}{\SK@label} +% \begin{macro}{\SK@bibitem} +% \begin{macro}{\SK@lbibitem} +% The saved original definitions +% \begin{macrocode} +\let\SK@label\label +\let\SK@bibitem\@bibitem +\let\SK@lbibitem\@lbibitem +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\label} +% \changes{v3.09}{1996/08/30} +% {Add extra group so brace hack works. Donald Arseneau tools/2147} +% The new definition, print the argument, and then do the old +% definition. +% \begin{macrocode} +\def\label#1{% + \@bsphack + \SK@\SK@@label{#1}% + \begingroup + \SK@label{#1}% + \endgroup + \@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@bibitem} +% \begin{macro}{\@lbibitem} +% \changes{v3.02}{1995/03/17} +% {New label code.} +% For |\bibitem|, position the \textsf{showkeys} code as for a standard +% list with |\item| and |\label|. +% \begin{macrocode} +\def\@bibitem#1{% + \SK@bibitem{#1}\SK@\SK@@label{#1}\ignorespaces} +% \end{macrocode} +% +% \begin{macrocode} +\def\@lbibitem[#1]#2{% + \SK@lbibitem[#1]{#2}\SK@\SK@@label{#2}\ignorespaces} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SK@} +% \changes{v3.07}{1996/05/17} +% {use \cs{protected@edef} for tools/2147} +% Grab hold of |#2| via |\meaning| so characters like |&| and +% |^| do not cause problems later, and pass the result on to the command +% |#1|. +% \begin{macrocode} +\def\SK@#1#2{% + \protected@edef\@tempa{#2}% + \expandafter#1\meaning\@tempa\SK@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SK@@label} +% Strip off the initial segment of the |\meaning| output, and then put +% the rest either in a |\marginpar| or in a box of size 0pt, +% hopefully not disturbing the surrounding text. +% \begin{macrocode} +\def\SK@@label#1>#2\SK@{% +% \end{macrocode} +% Need to work globally as in some cases like alignments, and |fleqn|, +% the counter will be printed in a different group to the |\label| +% command. +% \begin{macrocode} + \gdef\SK@lab{\smash{\SK@labelcolor\fbox{% + \normalfont\small\ttfamily#2}}}% + \ifvmode + \if@inlabel +% \end{macrocode} +% \changes{v3.02}{1995/03/17} +% {New code for `in label' case.} +% If the |\label| is straight after |\item| (|\bibitem| is handled by +% this case as well) then the item label has not been added to the page +% yet. It is hanging around in the box |\@labels| waiting for the +% paragraph to start. So just need to attatch the label to this box. +% \begin{macrocode} + \global\setbox\@labels\hbox{% + \llap{\SK@lab\SK@lab@relax + \kern\@totalleftmargin\kern\marginparsep}% + \box\@labels}% +% \end{macrocode} +% +% \begin{macrocode} + \else +% \end{macrocode} +% \changes{v3.10}{1996/09/06} +% {Save prevdepth and restore later} +% If we insert a box into the main vertical list, do not want to +% change |\prevdepth| as that would afect vertical spacing in the +% document. (The box itself should not cause any difference in break +% points as there is a node there anyway coming from the |\write| to +% the aux file. +% \begin{macrocode} + \dimen@\prevdepth + \nointerlineskip +% \end{macrocode} +% The inner vertical mode cases are mainly designed to do the right +% thing with float captions, but seem to work OK in other cases as well. +% \begin{macrocode} + \ifinner + \skip@\lastskip\unskip +% \end{macrocode} +% In inner vertical mode, attach the label to the right of the +% immediately preceding box, if it is a box before the current point. +% Otherwise just put it in a box of zero dimensions, with no interline +% skip. (This may slightly move the surrounding text (but perhaps not +% now that |\prevdepth| is restored.) +% \changes{v3.00}{1994/09/07} +% {Back up over a previous skip because of the new +% \cs{belowcaptionskip}} +% \changes{v3.04}{1995/10/30} +% {\cs{advance} added, to total two successive skips.} +% \changes{v3.04}{1995/10/30} +% {\cs{nointerlineskip} called before \cs{ifvoid} test, not just +% void case} +% \changes{v3.04}{1995/10/30} +% {\cs{marginparskip} added in inner vmode case} +% \begin{macrocode} + \advance\skip@\lastskip\unskip + \setbox\z@\lastbox +% \end{macrocode} +% \changes{v3.10}{1996/09/06} +% {Inner vertical mode case, put it in the margin.} +% \begin{macrocode} + \ifvoid\z@ + \llap{\SK@lab\SK@lab@relax\kern\marginparsep}% + \else + \hbox{\box\z@\kern\marginparsep\SK@labx}% + \fi + \vskip\skip@ + \else +% \end{macrocode} +% In outer vertical mode, previously used a |\vadjust| at the start of +% the next paragraph (and before that used |\marginpar|). These +% methods sometimes cause extra space, eg if paragraph starts with a +% math display, so now just insert the box directly, taking care not +% to change |\prevdepth|. +% \changes{v3.02}{1995/03/17} +% {Use \cs{vadjust} instead of \cs{marginpar}} +% \changes{v3.10}{1996/09/06} +% {Insert the box directly} +% \begin{macrocode} + \llap{\SK@lab\SK@lab@relax\kern\marginparsep}% + \fi +% \end{macrocode} +% Restore |\prevdepth|. +% \begin{macrocode} + \prevdepth\dimen@ +% \end{macrocode} +% +% \begin{macrocode} + \fi + \else +% \end{macrocode} +% If we are in an numbered equation-style environment, do nothing as the +% code to print the number will also print the label, otherwise just +% stick the label at the current point, in a box of zero dimensions. +% \changes{v3.02}{1995/03/17} +% {Add \cs{ifmmode} test} +% \begin{macrocode} + \csname SK@\@currenvir\endcsname + \ifSK@equation\else + \ifmmode + \SK@labx + \else +% \end{macrocode} +% Inner horizontal mode. Not much we can do, just stick it here. +% \changes{v3.03}{1995/04/25} +% {Fix inner horizontal mode case (broken in 3.02)} +% \begin{macrocode} + \ifinner + \rlap\SK@lab + \else +% \end{macrocode} +% In outer horizontal mode use |\vadjust| to get to the margin. +% \changes{v3.02}{1995/03/17} +% {Use \cs{vadjust} in horizontal mode} +% \begin{macrocode} + \vadjust{\llap{\SK@lab\kern\marginparsep}}% + \fi + \SK@lab@relax + \fi + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\iftagsleft@} +% Make sure that this AMS\LaTeX\ command really is an |\if..| +% \changes{v2.00}{1992/01/31} +% {Defer tests to begin document} +% \begin{macrocode} +\AtBeginDocument{% + \let\SK@eqnnum\@eqnnum + \def\@tempa{\let\iftagsleft@\iffalse}% + \ifx\iftagsleft@\undefined\@tempa\fi% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tag@form@} +% \changes{v3.02}{1995/03/17} +% {Support new AMS files} +% \begin{macro}{\eqnnum} +% Perhaps if |leqno| is operative, I should define |\@eqnnum| with the +% `left' version, but it does not really matter. +% \begin{macrocode} + \let\SK@tagform@\tagform@ + \iftagsleft@ + \def\tagform@#1{% + \ifx\df@label\@empty + \SK@lab@relax + \else + \expandafter\SK@@label\meaning\df@label\SK@ + \fi + \llap{\SK@lab\kern\marginparsep}% + \SK@lab@relax\SK@tagform@{#1}}% + \def\@eqnnum{% + \llap{\SK@lab\kern\displaywidth\kern\marginparsep}% + \SK@lab@relax\SK@eqnnum}% +% \end{macrocode} +% +% \begin{macrocode} + \else + \def\tagform@#1{% + \ifx\df@label\@empty + \SK@lab@relax + \else + \expandafter\SK@@label\meaning\df@label\SK@ + \fi +% \end{macrocode} +% \changes{v3.08}{1996/07/10}{Missing percent added. /2215} +% \begin{macrocode} + \SK@tagform@{#1}% + \rlap{\kern\marginparsep\SK@lab}\SK@lab@relax}% + \def\@eqnnum{\SK@eqnnum\rlap{\kern\marginparsep\SK@lab}% + \SK@lab@relax}% + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SK@labx} +% Print the label, and then globally reset the print command to +% |\relax|. +% \begin{macrocode} +\def\SK@labx{\rlap\SK@lab\global\let\SK@lab\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SK@lab@relax} +% Clear the label. +% \changes{v1.02}{1994/01/05}{Execute to initialise correctly} +% \begin{macrocode} +\def\SK@lab@relax{\global\let\SK@lab\relax}\SK@lab@relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SK@equation} +% \begin{macro}{\SK@eqnarray} +% The following environments print an equation number, so |\label| +% should not print its argument at the point where it appears. +% Note this will fail to show the label if you are in an |eqnarray| +% environment, and use |\label| together with |\nonumber| This might +% just about make sense if you are going to use |\pageref|, but that is +% too bad\ldots +% \begin{macrocode} +\newif\ifSK@equation +\let\SK@equation\SK@equationtrue +\let\SK@eqnarray\SK@equationtrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\eqnarray} +% \changes{v3.09}{1996/08/30} +% {Fix eqnarray AMS incompatibility. tools/2252} +% When the AMS packages are loaded |showkeys| assumes environments +% work `The AMS way' However |eqnarray| (unlike |equation|) is not +% redefined, so here we need to remove some of the AMS hacks. +% \begin{macrocode} +\toks@\expandafter{\eqnarray} +\edef\eqnarray{\let\noexpand\tagform@\noexpand\SK@tagform@\the\toks@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SK@align} +% \begin{macro}{\SK@alignat} +% \begin{macro}{\SK@xalignat} +% \begin{macro}{\SK@xxalignat} +% \begin{macro}{\SK@gather} +% \begin{macro}{\SK@multline} +% \begin{macro}{\SK@flalign} +% \changes{v3.02}{1995/03/17} +% {Add \cs{SK@flalign}} +% The AMS environments +% \begin{macrocode} +\let\SK@align\SK@equationtrue +\let\SK@alignat\SK@equationtrue +\let\SK@xalignat\SK@equationtrue +\let\SK@xxalignat\SK@equationtrue +\let\SK@gather\SK@equationtrue +\let\SK@multline\SK@equationtrue +\let\SK@flalign\SK@equationtrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\SK@def} +% \changes{v3.05}{1995/11/09} +% {Macro added} +% This macro redefines a command |#1|. The new definition can make use +% of the old definition as |\SK@|\emph{old name}. If |#1| is really a +% |\protect|'ed command with the real definition in a `\emph{space}' +% command then the `space' version is used as the old definition. +% Need to test this for each command as some package may have changed +% the status of a command to being `protected'. +% The new definition is made as if with |\DeclareRobustCommand|, but +% with |\def| syntax for the argument specification. +% \begin{macrocode} +\def\SK@def#1{% + \edef\@tempa{\expandafter\@gobble\string#1}% + \@ifundefined{\@tempa\space}% + {\expandafter\let\csname SK@\@tempa\endcsname#1}% + {\expandafter\let\csname SK@\@tempa\expandafter\endcsname + \csname\@tempa\space\endcsname}% + \expandafter\def\expandafter#1\expandafter{% + \expandafter\protect\csname\@tempa\space\endcsname}% + \expandafter\def\csname\@tempa\space\endcsname} +% \end{macrocode} +% \end{macro} +% +% The next section redefines |\ref| and |\pageref| (unless the +% \texttt{notref} option was given). +% \begin{macrocode} +\ifx\SK@ref\@empty +% \end{macrocode} +% Even if \texttt{notref} option is used, need to fudge the +% \textsf{varioref} commands as they use |\label| internally. +% \changes{v3.04}{1995/10/30} +% {improve varioref support in notref option case, for tools/1744} +% \begin{macrocode} +\AtBeginDocument{% + \ifx\vpageref\@undefined\else + \SK@def\@@vpageref#1[#2]#3{{% + \let\label\SK@label + \SK@@@vpageref#1[#2]{#3}}}% + \DeclareRobustCommand\vref[1]{% + \unskip~\ref{#1}% + {\let\label\SK@label + \SK@@@vpageref\unskip[\unskip\space]{#1}}}% + \fi} +\else +% \end{macrocode} +% +% \begin{macro}{\ref} +% \begin{macro}{\pageref} +% Save the redefinition to |\begin{document}| so that this package can +% work with packages that redefine |\cite|. Tested with harvard and +% natbib packages. Also add code at this point to support varioref. +% \changes{v3.00}{1994/09/07} +% {Delay \cs{ref} redefinition.} +% \changes{v3.03}{1995/04/25} +% {Make redefinition conditional on notref option} +% \begin{macrocode} +\AtBeginDocument{% + \SK@def\ref#1{\SK@\SK@@ref{#1}\SK@ref{#1}}% + \SK@def\pageref#1{\SK@\SK@@ref{#1}\SK@pageref{#1}}% + \ifx\vpageref\@undefined\else +% \end{macrocode} +% varioref support. +% \begin{macrocode} + \SK@def\@@vpageref#1[#2]#3{{% + \let\label\SK@label\let\ref\SK@ref\let\pageref\SK@pageref + \leavevmode\unskip\SK@\SK@@ref{#3}\SK@@@vpageref#1[#2]{#3}}}% + \DeclareRobustCommand\vref[1]{% + \unskip~\ref{#1}% + {\let\label\SK@label\let\ref\SK@ref\let\pageref\SK@pageref + \SK@@@vpageref\unskip[\unskip\space]{#1}}}% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Now redefine |\cite| unless \texttt{notcite} option given. +% \begin{macrocode} +\ifx\SK@cite\@empty +% \end{macrocode} +% \changes{v3.06}{1995/11/22} +% {Fix \cs{harvarditem} support} +% \begin{macrocode} +\AtBeginDocument{% + \ifx\HAR@checkdef\@undefined\else + \expandafter\let\expandafter + \SK@HAR@bi\csname\string\harvarditem\endcsname + \expandafter\def\csname\string\harvarditem\endcsname[#1]#2#3#4{% + \SK@HAR@bi[#1]{#2}{#3}{#4}\SK@\SK@@label{#4}}% + \fi} +\else +% \end{macrocode} +% +% \begin{macro}{\cite} +% \changes{v3.00}{1994/09/07} +% {Delay \cs{cite} redefinition.} +% \changes{v3.03}{1995/04/25} +% {Make redefinition conditional on notcite option} +% \begin{macrocode} +\AtBeginDocument{% + \ifx\HAR@checkdef\@undefined +% \end{macrocode} +% Standard (non-harvard) support, including extra cite commands from +% \textsf{natbib} and \textsf{cite}. +% \changes{v3.01}{1994/09/09} +% {Add \cs{citefullauthor}} +% \changes{v3.12}{1997/06/12} +% {Support cite package. tools/2490} +% +% If \textsf{cite} or \textsf{overcite} is being used, redefine |\citen| +% rather than |\cite| so as not to spoil the space and punctuation +% calculations done by those packages. +% \begin{macrocode} + \ifx\citen\@undefined + \SK@def\cite#1#{\SK@citea{#1}}% + \else + \SK@def\citen#1{\SK@\SK@@ref{#1}\SK@citen{#1}}% + \fi + \SK@def\citeauthor#1{\SK@\SK@@ref{#1}\SK@citeauthor{#1}}% + \SK@def\citefullauthor#1{\SK@\SK@@ref{#1}\SK@citefullauthor{#1}}% + \SK@def\citeyear#1{\SK@\SK@@ref{#1}\SK@citeyear{#1}}% + \else +% \end{macrocode} +% In the \textsf{harvard} style do \emph{not} redefine individual cite +% commands. Just redefine one internal command that is used in all the +% citation forms. +% \begin{macrocode} + \SK@def\HAR@checkdef#1#2{% + \expandafter\SK@\expandafter\SK@@ref\expandafter{#1}% + \SK@HAR@checkdef{#1}{#2}}% + \expandafter\let\expandafter + \SK@HAR@bi\csname\string\harvarditem\endcsname +% \end{macrocode} +% \changes{v3.06}{1995/11/22} +% {Fix \cs{harvarditem} support} +% \begin{macrocode} + \expandafter\def\csname\string\harvarditem\endcsname[#1]#2#3#4{% + \SK@HAR@bi[#1]{#2}{#3}{#4}\SK@\SK@@label{#4}}% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\SK@citea#1#2{% + \SK@\SK@@ref{#2}\SK@cite#1{#2}} +% \end{macrocode} +% +% \begin{macrocode} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SK@@ref} +% This is much simpler than the printing of the label, as we know that +% we can be in horizontal mode. +% \begin{macrocode} +\def\SK@@ref#1>#2\SK@{% + \leavevmode\vbox to\z@{% + \vss + \SK@refcolor + \rlap{\vrule\raise .75em% + \hbox{\underbar{\normalfont\footnotesize\ttfamily#2}}}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \Finale +% |