% \iffalse meta-comment % %%---------------------------------------------------------------------------- % %% File: savefnmark.dtx Copyright (C) 2000 Volker Kuhlmann %% All rights are reserved. %% % %<*dtx> \NeedsTeXFormat{LaTeX2e}[1999/06/01] \ProvidesFile{savefnmark.dtx} % %\NeedsTeXFormat{LaTeX2e}[1998/06/01] %\ProvidesPackage{savefnmark} % \ProvidesFile{savefnmark.drv} %\ProvidesFile{savefnmark.tex} % % \fi % \ProvidesFile{savefnmark.dtx} [2000/05/11 v1.0 save footnote marks for multiple use (VK)] % %% %% \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 \~} %% % % \iffalse %<*driver> \NeedsTeXFormat{LaTeX2e}[1999/06/01] \documentclass{ltxdoc} %%\IfFileExists{ltxdoc.cfg}{}{\OnlyDescription\RecordChanges\CodelineIndex} %\OnlyDescription % uncomment to suppress code line listing \RecordChanges % uncomment for a change history %\CodelineIndex\EnableCrossrefs % uncomment for command index \GetFileInfo{savefnmark.dtx} \usepackage{savefnmark} \begin{document} \DocInput{savefnmark.dtx} %%\IfFileExists{ltxdoc.cfg}{}{\PrintChanges\PrintIndex} \PrintChanges % uncomment for a change history %\PrintIndex % uncomment for command index \end{document} % % \fi % % % \GetFileInfo{savefnmark.dtx} % \CheckSum{30} % % \title{The \textsf{savefnmark} Package\thanks % {This file has version number \fileversion, % last modified \filedate.}} % \author{Volker Kuhlmann\thanks{%^^A % Email:\ \url{v.kuhlmann@elec.canterbury.ac.nz}. % For a postal address refer to the license section.}} % \date{\filedate} % % % %^^A MACROS used for this document % \let\package\textsf % \let\env\textsf % \let\url\texttt % \newcommand\optmeta[1]{[\meta{#1}]} % \providecommand\MF{\textsc{meta-font}} % \providecommand\fixendverbatim{\vspace{-\bigskipamount}} % \newenvironment{pckcmd}{%^^A % \ifvmode \else \par\vspace{-\parskip}\fi % \vspace{1mm}\noindent \hangindent 4em\hangafter 0\ignorespaces % }{%^^A % \par\vspace{1mm}\vspace{-\parskip}} % \renewenvironment{quote}{% % \list{}{\leftmargin=0.5\leftmargin\rightmargin\leftmargin}\item\relax % }{% % \endlist % } % \makeatletter % \providecommand\DescribeWord[1]{% % \leavevmode\@bsphack % \marginpar{\raggedleft\PrintDescribeEnv{#1}}%^^A % \@bsphack\index{#1\actualchar{\protect\ttfamily#1}\encapchar usage}\@esphack % \@esphack\ignorespaces % } % \makeatother % % \changes{v1.0}{2000/05/10} % {Initial version.} % % % % \maketitle % % \begin{abstract} % Sometimes the same footnote applies to more than one location in a table. With % this package the mark of a footnote can be saved into a name, and re-used % subsequently without creating another footnote at the bottom. % \end{abstract} % % \tableofcontents % % % \section{License} % % This package is copyright \textcopyright\ 2000 by: % % \begin{quote} % Volker Kuhlmann, % c/o University of Canterbury, % ELEC Dept, Creyke Road, % Christchurch, New Zealand\\ % E-Mail: \url{v.kuhlmann@elec.canterbury.ac.nz} % \end{quote} % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % To obtain a copy of the license, write to the % Free Software Foundation, Inc., % 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA, % or browse \url{http://www.fsf.org/}. % % % \section{Introduction} % % Sometimes the same footnote applies to more than one location in a table. With % this package the mark of a footnote can be saved into a name, and re-used % subsequently without creating another footnote at the bottom. % % This even works between tables (in minipages) and footnotes in surrounding % text. The appearance of the footnote mark is kept, that is when a footnote of % a previous table is mentioned in the text following the table, the mark looks % the same as it does in the table. % % The footnote marks are saved globally into a given control sequence. This % control sequence must not have already been used and is defined for the whole % of the document. % % \pagebreak % % Currently forward references are not possible. In other words footnotes which % appear later in the text can't be referenced. % % \DescribeMacro{\saveFN} % The following two commands are defined by this package: % % \begin{pckcmd} % |\saveFN{|\meta{name}|}| % \end{pckcmd} % % saves the number of the footnote which was last introduced into \meta{name}. % \meta{name} can be any valid control sequence not already used. % % \DescribeMacro{\useFN} % To place the same footnote mark again later in the text, use % % \begin{pckcmd} % |\useFN{|\meta{name}|}| % \end{pckcmd} % % % \section{Example} % % The following example is produced with this input: % % %^^A************************************************************************ % \begingroup % \small % \begin{verbatim} % Surrounding text before the minipage with table. % text text text\footnote{footnote 1 in text} text % text\footnote{footnote 2 in text; also in table}\saveFN\sft\ text text text % % \begin{minipage}{\textwidth} % \begin{tabular}{lll} % abc % &abc abc abc\footnote{footnote 1}\saveFN\sfn % &abc\\ % abc abc abc % &abc abcdef efgh\footnote{footnote 2} abc % &same mark as first\useFN\sfn\ footnote\\ % www\footnote{footnote 3} % &mark as text\useFN\sft\ footnote % &abc\\ % \end{tabular} % \end{minipage} % % Surrounding text after the minipage with table. % text text text\footnote{footnote 3 in text} text text text % \end{verbatim} % \fixendverbatim % \endgroup % %^^A************************************************************************ % % \parskip 2.5ex % \parindent 0em % % Surrounding text before the minipage with table. % text text text\footnote{footnote 1 in text} text % text\footnote{footnote 2 in text; also in table}\saveFN\sft\ text text text % % \begin{minipage}{\textwidth} % \begin{tabular}{lll} % abc % &abc abc abc\footnote{footnote 1}\saveFN\sfn % &abc\\ % abc abc abc % &abc abcdef efgh\footnote{footnote 2} abc % &same mark as first\useFN\sfn\ footnote\\ % www\footnote{footnote 3} % &mark as text\useFN\sft\ footnote % &abc\\ % \end{tabular} % \end{minipage} % % Surrounding text after the minipage with table. % text text text\footnote{footnote 3 in text} text text text % % % \section{To Do and Bugs} % % Any bugs? % % Is it worth implementing a forward reference capability? % % % %^^A This command extracts all index entries: % %^^A sed < savefnmark.idx -e 's,indexentry{,,' -e 's,=.*$,,' % % \DoNotIndex{\ ,\.,\_}%^^A DOES NOT WORK!! % \DoNotIndex{\@footnotetext,\@mpfn,\@xfootnote,\begingroup,\csname,\def} % \DoNotIndex{\endcsname,\endgroup,\expandafter,\let,\newcommand,\noexpand} % \DoNotIndex{\relax,\show,\the,\thempfn,\xdef} % % \StopEventually{} % % % % \section{Implementation} % % % \begin{macrocode} %<*package> % \end{macrocode} % % \begin{macro}{\saveFN} % First part: save the footnote number and whether it was a normal footnote or % one from inside a minipage. We test first whether the control sequence to save % it in is already defined. % % \begin{macrocode} \newcommand\saveFN[1]{% \newcommand{#1}{}% \xdef#1{\noexpand\@useFN{\@mpfn}{\the\csname c@\@mpfn\endcsname}}% %\show#1% } % \end{macrocode} % \end{macro} % % \begin{macro}{\useFN} % Start a new group and temporarily disable the creation of the footnote text by % \cs{@xfootnote}, then run the command defined when saving the mark. This % restores the footnote type and its number, then prints the corresponding mark. % % \begin{macrocode} \newcommand\useFN[1]{\begingroup\let\@footnotetext\relax#1\endgroup} \newcommand\@useFN[2]{% \def\@mpfn{#1}% \expandafter\let\expandafter\thempfn\csname the#1\endcsname \@xfootnote[#2]% } % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % % \Finale % % \iffalse % %% EOF savefnmark.dtx % %%---------------------------------------------------------------------------- % \fi