% \iffalse %% File: showkeys.dtx Copyright (C) 1992-1996 David Carlisle % %<*dtx> \ProvidesFile{showkeys.dtx} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{showkeys} % \ProvidesFile{showkeys.drv} % \fi % \ProvidesFile{showkeys.dtx} [1996/11/01 v3.11 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} % % \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{506} % % % \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 can not 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 % natbib. % \changes{v3.01}{1994/09/09} % {Add \cs{citefullauthor}} % \begin{macrocode} \SK@def\cite#1#{\SK@citea{#1}}% \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 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} % % \end{macrocode} % % \Finale %