summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r--Master/texmf-dist/source/latex/rcs-multi/Makefile99
-rw-r--r--Master/texmf-dist/source/latex/rcs-multi/rcs-multi.dtx1263
-rw-r--r--Master/texmf-dist/source/latex/rcs-multi/rcs-multi.ins67
3 files changed, 1429 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/rcs-multi/Makefile b/Master/texmf-dist/source/latex/rcs-multi/Makefile
new file mode 100644
index 00000000000..90179e6dd00
--- /dev/null
+++ b/Master/texmf-dist/source/latex/rcs-multi/Makefile
@@ -0,0 +1,99 @@
+# $Id: Makefile 628 2007-07-10 20:32:06Z martin $
+
+PACKAGE=rcs-multi
+PACKFILES = ${PACKAGE}.dtx ${PACKAGE}.ins ${PACKAGE}.pdf example.tex \
+ example.pdf Makefile README
+TEXAUX = *.aux *.log *.glo *.ind *.idx *.out *.svt *.toc *.ilg *.gls *.hd
+TESTDIR = tests
+TESTS = $(patsubst %.tex,%,$(subst ${TESTDIR}/,,$(wildcard ${TESTDIR}/test?.tex ${TESTDIR}/test??.tex))) # look for all test*.tex file names and remove the '.tex'
+TESTARGS = -output-directory ${TESTDIR}
+INSGENERATED = ${PACKAGE}.sty
+GENERATED = ${INSGENERATED} ${PACKAGE}.pdf example.pdf ${PACKAGE}.zip ${PACKAGE}.tar.gz ${TESTDIR}/test*.pdf
+ZIPFILE = ${PACKAGE}-${ZIPVERSION}.zip
+
+LATEX_OPTIONS = -interaction=batchmode
+LATEX = pdflatex ${LATEX_OPTIONS}
+
+RED = \033[01;31m
+GREEN = \033[01;32m
+WHITE = \033[00m
+
+.PHONY: all doc package clean fullclean example testclean ${TESTS}
+
+all: package doc example
+new: fullclean all
+
+doc: ${PACKAGE}.pdf
+
+package: ${PACKAGE}.sty
+
+%.pdf: %.dtx
+ ${LATEX} $*.dtx
+ ${LATEX} $*.dtx
+ -makeindex -s gind.ist -o $*.ind $*.idx
+ -makeindex -s gglo.ist -o $*.gls $*.glo
+ ${LATEX} $*.dtx
+ ${LATEX} $*.dtx
+
+%.pdf: %.eps
+ epstopdf $<
+
+%.eps: %.dia
+ dia -t eps -e $@ $<
+
+${PACKAGE}.pdf:
+
+${INSGENERATED}: *.dtx ${PACKAGE}.ins
+ yes | latex ${PACKAGE}.ins
+
+clean:
+ rm -f ${TEXAUX} $(addprefix ${TESTDIR}/, ${TEXAUX})
+
+fullclean:
+ rm -f ${TEXAUX} $(addprefix ${TESTDIR}/, ${TEXAUX}) ${GENERATED} *~ *.backup
+
+example: example.pdf
+
+example.pdf: example.tex ${PACKAGE}.sty
+ ${RM} example_chap*.tex
+ ${LATEX} $<
+ ${LATEX} $<
+
+zip: fullclean package doc example tests ${ZIPFILE}
+${PACKAGE}.zip: zip
+
+zip: ZIPVERSION=$(shell grep '\\def\\fileversion{.*}' ${PACKAGE}.dtx | sed -e 's/\\def\\fileversion{\(.*\)}/\1/' -e 's/\s\+//g')
+
+${ZIPFILE}: ${PACKFILES}
+ grep -q '\* Checksum passed \*' ${PACKAGE}.log
+ -pdfopt ${PACKAGE}.pdf opt_${PACKAGE}.pdf && mv opt_${PACKAGE}.pdf ${PACKAGE}.pdf
+ zip ${ZIPFILE} ${PACKFILES}
+ @echo
+ @echo "ZIP file ${ZIPFILE} created!"
+
+tar.gz: ${PACKAGE}.tar.gz
+
+${PACKAGE}.tar.gz:
+ tar -czf $@ ${PACKFILES}
+
+# Make sure TeX finds the input files in TESTDIR
+tests ${TESTS}: export TEXINPUTS:=${TEXINPUTS}:${TESTDIR}
+tests ${TESTS}: LATEX_OPTIONS=
+
+testclean:
+ @${RM} $(foreach ext, aux log out pdf, tests/test*.${ext})
+
+tests: package testclean
+ @echo "Running tests: ${TESTS}:"
+ @${MAKE} -e -i --no-print-directory ${TESTS} \
+ TESTARGS="-interaction=batchmode -output-directory=${TESTDIR}"\
+ TESTPLOPT="-q"\
+ > /dev/null
+
+${TESTS}: % : ${TESTDIR}/%.tex package testclean
+ @-${LATEX} -interaction=nonstopmode ${TESTARGS} $< 1>/dev/null 2>/dev/null
+ @if (${LATEX} ${TESTARGS} $< && (test ! -e ${TESTDIR}/$*.pl || ${TESTDIR}/$*.pl ${TESTPLOPT})); \
+ then /bin/echo -e "${GREEN}$@ succeeded${WHITE}" >&2; \
+ else /bin/echo -e "${RED}$@ failed!!!!!!${WHITE}" >&2; fi
+
+
diff --git a/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.dtx b/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.dtx
new file mode 100644
index 00000000000..1fb8f988255
--- /dev/null
+++ b/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.dtx
@@ -0,0 +1,1263 @@
+% \iffalse meta-comment
+% Copyright (C) 2009 by Martin Scharrer <martin@scharrer-online.de>
+% http://www.scharrer-online.de/latex/
+% -----------------------------------------------------------------
+%
+% This work 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Martin Scharrer.
+%
+% This work consists of the file rcs-multi.dtx and the derived file
+% rcs-multi.sty.
+% $Id: rcs-multi.dtx 638 2009-03-23 19:21:36Z martin $
+% \fi
+% \iffalse
+%<*package|driver|wrapper>
+\def\filedate$#1: #2 #3 #4-#5-#6 #7 ${%
+ \year#4\month#5\day#6\relax
+ \def\filedate{#4/#5/#6}%
+ \def\filerev{#3}%
+}
+\filedate$Id: rcs-multi.dtx 638 2009-03-23 19:21:36Z martin $
+\def\fileversion{v0.1}
+%</package|driver|wrapper>
+%<*driver>
+\ProvidesFile{rcs-multi.dtx}
+ [\filedate\space\fileversion\space RCS Keywords for multi-file LaTeX documents]
+
+\documentclass{ltxdoc}
+\usepackage{rcs-multi}
+\usepackage{booktabs}
+\usepackage{ifpdf}
+\ifpdf
+ % use hypdoc if you have it, hyperref else
+ \IfFileExists{hypdoc.sty}
+ {\usepackage{hypdoc}}
+ {\usepackage{hyperref}}
+\else
+ \let\url\texttt
+\fi
+\usepackage{xspace}
+\newcommand{\ie}{i.e.\@\xspace}
+\newcommand{\eg}{e.g.\@\xspace}
+
+\iffalse
+\let\css=\cs
+\let\op=\cs
+\let\DescribeOption\DescribeMacro
+\let\DescribeScript\DescribeOption
+\else % crossreference of macros in documentation
+\makeatletter
+
+\usepackage{xspace}
+\@namedef{seen@package@latex}{1} %^^A avoid footnotes for 'latex'
+\newcommand*{\pkg}[1]{%
+ \href{http://tug.ctan.org/pkg/#1}{\texttt{#1}}%
+ % URL footnote (for print-out) on first appearance:
+ \@ifundefined{seen@package@#1}{%
+ \footnote{CTAN: \url{http://tug.ctan.org/pkg/#1}}%
+ \@namedef{seen@package@#1}{1}%
+ }{}%
+ \xspace
+}
+\newcommand*{\rcsmulti}{%
+ \texttt{rcs-multi}\xspace%
+}
+
+% link \cs to macro definitions
+\let\origmacro\macro
+\let\origendmacro\endmacro
+\let\origStopEventually\StopEventually
+\let\origPrintDescribeMacro\PrintDescribeMacro
+\usepackage{xcolor}
+\definecolor{darkred}{rgb}{0.333.0.0,0.0}
+\hypersetup{colorlinks=true,linkcolor=darkred,urlcolor=darkred}
+\definecolor{macrodesccolor}{rgb}{0.0,0.0,0.8}
+\definecolor{macroimplcolor}{rgb}{0.0,0.0,0.4}
+\definecolor{metacolor}{rgb}{0.0,0.4,0.4}
+\definecolor{scriptcolor}{rgb}{0.2,0.6,0.2}
+\definecolor{optioncolor}{rgb}{0.3.0.2,0}
+
+\let\macroline\\
+\newlength{\macrosep}
+\setlength{\macrosep}{-3em}
+\renewcommand{\meta@font@select}{\color{metacolor}\itshape}
+\newcommand{\macroformat}[1]{\textbf{\ttfamily #1}}
+\newcommand{\optionformat}[1]{\textbf{\sffamily #1}}
+\newcommand{\scriptformat}[1]{\textbf{\ttfamily #1}}
+\newcommand{\macroargformat}[1]{\texttt{#1}}
+\newcommand{\scriptargformat}[1]{\textbf{#1}}
+\newcommand{\macrohlinkprefix}{desc}
+\newcommand{\macrolink}{}
+
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+
+\def\DescribeMacro{\@ifnextchar*{\DescribeMacroS}{\DescribeMacroN}}
+\def\DescribeMacroN{%
+ \bigskip\pagebreak[3]\par\noindent\DescribeMacroS*%
+}
+\def\DescribeMacroS*#1#2{%
+ \begingroup
+ \g@namedef{href@desc@#1}{}%
+ \immediate\write\@mainaux{%
+ \noexpand\g@namedef{href@desc@#1}{}%
+ }%
+ \@ifundefined{href@impl@#1}%
+ {\let\macrolink\relax}%
+ {\def\macrolink{\hyperlink{impl@#1}}}%
+ \hypersetup{linkcolor=macrodesccolor}%
+ \hspace*{\macrosep}%
+ \raisebox{\baselineskip}[\baselineskip]{\hypertarget{desc@#1}{}}%
+ \macrolink{\macroformat{\textcolor{macrodesccolor}{\textbackslash #1}}}%
+ \noindent\mbox{}\macroargformat{#2}\nopagebreak
+ \macroline*[0.2\baselineskip]%
+ \endgroup
+ \nopagebreak
+ \ignorespaces
+}
+\def\DescribeScript{\@ifnextchar*{\DescribeScriptS}{\DescribeScriptN}}
+\def\DescribeScriptN{%
+ \bigskip\par\pagebreak[2]\noindent\DescribeScriptS*%
+}
+\def\DescribeScriptS*#1#2{%
+ \hspace*{\macrosep}%
+ \raisebox{\baselineskip}[\baselineskip]{\hypertarget{script@#1}{}}%
+ \scriptformat{\textcolor{scriptcolor}{#1}}%
+ \noindent\mbox{}\scriptargformat{\ {#2}}\macroline*[0.2\baselineskip]%
+ \nopagebreak
+}
+\def\DescribeOption{\@ifnextchar*{\DescribeOptionS}{\DescribeOptionN}}
+\def\DescribeOptionN{%
+ \bigskip\par\noindent\DescribeOptionS*%
+}
+\def\DescribeOptionS*#1{%
+ \hspace*{\macrosep}%
+ \raisebox{\baselineskip}[\baselineskip]{\hypertarget{option@#1}{}}%
+ \optionformat{\textcolor{optioncolor}{#1}}%
+ \noindent\mbox{}\macroline*[0.2\baselineskip]%
+ \nopagebreak
+}
+\newcounter{macrolevel}
+\renewenvironment{macro}[1]{%
+ \addtocounter{macrolevel}{1}%
+ \expandafter\macroX\expandafter{\expandafter\@gobble\string#1}%
+}{%
+ \addtocounter{macrolevel}{-1}%
+}
+\providecommand*{\g@namedef}[1]{%
+ \expandafter\gdef\csname #1\endcsname
+}
+\newcommand*{\macroX}[1]{%
+ \ifnum\c@macrolevel<2
+ \smallskip
+ \fi
+ \par\noindent
+ \g@namedef{href@impl@#1}{}%
+ \immediate\write\@mainaux{%
+ \noexpand\g@namedef{href@impl@#1}{}%
+ }%
+ \@ifundefined{href@desc@#1}%
+ {\let\macrolink\relax}%
+ {\def\macrolink{\hyperlink{desc@#1}}}%
+ \hspace*{\macrosep}%
+ \raisebox{\baselineskip}[\baselineskip]{\hypertarget{impl@#1}{}}%
+ \macrolink{\macroformat{%
+ \textcolor{macroimplcolor}{\textbackslash #1}}}%
+ \\*[\smallskipamount]%
+ \@ifnextchar\begin{\vspace*{-\baselineskip}}{\imacroarg}%
+}
+
+\newcounter{macroargs}
+\newcounter{nmacroarg}
+
+\newcommand*{\imacroarg}[1][0]{%
+ \setcounter{macroargs}{#1}%
+ \setcounter{nmacroarg}{1}%
+ \ifnum\c@macroargs>0
+ \expandafter\imacroargX
+ \fi
+}
+\newcommand*{\aftermacroargs}{%
+ \@ifnextchar\begin
+ {\\*[-2ex]\ignorespaces}%
+ {\\*[\smallskipamount]\ignorespaces}%
+}
+\newcommand*{\imacroargX}[1]{%
+ \hspace*{-1em}\texttt{\#\thenmacroarg:} #1\relax
+ \ifnum\c@macroargs>1
+ \newline
+ \fi
+ \addtocounter{nmacroarg}{1}%
+ \addtocounter{macroargs}{-1}%
+ \ifnum\c@macroargs>0
+ \expandafter\imacroargX
+ \else
+ \expandafter\aftermacroargs
+ \fi
+}
+
+
+\def\karg#1{\{\$\textcolor{metacolor}{#1}\$\}}
+\def\kmarg#1{\{\$\meta{#1}\$\}}
+
+\DeclareRobustCommand{\csi}[1]{%
+ \begingroup
+ \hypersetup{linkcolor=macroimplcolor}%
+ \renewcommand{\macrohlinkprefix}{impl}%
+ \@ifundefined{href@impl@#1}%
+ {\let\macrolink\relax}%
+ {\def\macrolink{\hyperlink{impl@#1}}}%
+ \csX{#1}%
+ \endgroup
+}
+\DeclareRobustCommand{\csd}[1]{%
+ \begingroup
+ \hypersetup{linkcolor=macrodesccolor}%
+ \renewcommand{\macrohlinkprefix}{macro}%
+ \@ifundefined{href@desc@#1}%
+ {\let\macrolink\relax}%
+ {\def\macrolink{\hyperlink{desc@#1}}}%
+ \csX{#1}%
+ \endgroup
+}
+\DeclareRobustCommand{\csX}[1]{%
+ \begingroup
+ \macrolink{\texttt{\textbackslash#1}}%
+ \endgroup
+}
+\let\cs\csd
+\DeclareRobustCommand{\css}[1]{\texttt{\textbackslash#1}}
+\DeclareRobustCommand{\op}[1]{%
+ \begingroup
+ \hypersetup{linkcolor=optioncolor}%
+ \hyperlink{option@#1}{\textbf{\sffamily #1}}%
+ \endgroup
+}
+\DeclareRobustCommand{\scr}[1]{%
+ \begingroup
+ \hypersetup{linkcolor=scriptcolor}%
+ \hyperlink{script@#1}{\scriptformat{#1}}%
+ \endgroup
+}
+
+\def\StopEventually#1{\origStopEventually{#1}%
+\let\cs\csi
+}
+
+\fi
+
+\usepackage{graphicx}
+
+\EnableCrossrefs
+%\DisableCrossrefs
+\CodelineIndex
+%\PageIndex
+\RecordChanges
+%\OnlyDescription
+\widowpenalty=500
+\clubpenalty=500
+\begin{document}
+ \DocInput{rcs-multi.dtx}%
+ \PrintChanges
+ %\clearpage
+ \PrintIndex
+\end{document}
+%</driver>
+%<*package>
+% \fi
+%
+% \CheckSum{616}
+%
+% {\makeatother
+% \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 \~}
+% }
+% \changes{v0.1}{2009/03/23}{Initial version forked from rcs-multi v2.0}
+%
+% ^^A \GetFileInfo{rcs-multi.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment,\AtBeginDocument,\AtEndDocument}
+% \DoNotIndex{\def,\let,\edef,\xdef,\item,\space,\write,\jobname,\relax,\!}
+% \DoNotIndex{\closeout,\csname,\DeclareRobustCommand,\else,\empty,\newwrite}
+% \DoNotIndex{\endcsname,\expandafter,\fi,\Hurl,\hyper@normalise,\@ifnextchar}
+% \DoNotIndex{\ifnum,\@ifundefined,\ifx,\immediate,\InputIfFileExists,\ }
+% \DoNotIndex{\newcount,\noexpand,\openout,\PackageWarning,\@percentchar}
+% \DoNotIndex{\@sanitize,\@makeother,\@iwrcs,\%,\_,\&,\^,\$,\#,\ ,\\,\if@filesw}
+% \DoNotIndex{\gdef,\begingroup,\endgroup,\catcode}
+% \DoNotIndex{\^,\ ,\_,\(,\),\$,\&,\#,\@ampersamchar,\AtEndOfPackage}
+% \DoNotIndex{\@backslashchar,\begin,\bgroup,\chapter,\day}
+% \DoNotIndex{\DeclareOption,\do,\dospecials,\@dottedtocline,\egroup}
+% \DoNotIndex{\end,\ExecuteOptions,\filedate,\fileversion,\@for}
+% \DoNotIndex{\futurelet,\g@addto@macro,\global,\@gobbletwo,\hline}
+% \DoNotIndex{\hspace,\if@restonecol,\if@twocolumn,\ignorespaces}
+% \DoNotIndex{\makeatletter,\MakeUppercase,\@mkboth,\month,\@namedef}
+% \DoNotIndex{\NeedsTeXFormat,\newif,\onecolumn,\orig@fink@prepare}
+% \DoNotIndex{\orig@fink@restore,\PackageError,\ProcessOptions}
+% \DoNotIndex{\ProvidesPackage,\renewcommand,\RequirePackage}
+% \DoNotIndex{\@restonecolfalse,\@restonecoltrue,\section,\strut}
+% \DoNotIndex{\tableofcontents,\tableofrevisions,\texttt,\today}
+% \DoNotIndex{\twocolumn,\@undefined,\url,\year}
+% \DoNotIndex{\textwidth,\the,\string,\raggedright,\providecommand,\small,\toks@}
+% \DoNotIndex{\medskipamount,\long,\leftskip,\clearpage,\advance,\addtolength}
+% \DoNotIndex{\DeclareBoolOption,\DeclareStringOption,\DeclareVoidOption}
+% \DoNotIndex{\ProcessKeyvalOptions,\SetupKeyvalOptions}
+% \DoNotIndex{\@firstoftwo,\@secondoftwo,\@gobble}
+%
+% \title{The \textsf{rcs-multi} package}
+% \author{Martin Scharrer \\ \url{martin@scharrer-online.de} \\
+% \url{http://www.scharrer-online.de/latex/rcs-multi}\\
+% CTAN: \url{http://tug.ctan.org/pkg/rcs-multi}}
+% \date{Version \expandafter\@gobble\fileversion\\[0.5ex]\today}
+%
+% \ifpdf
+% \hypersetup{%
+% pdfauthor = {Martin Scharrer <martin@scharrer-online.de>},
+% pdftitle = {The rcs-multi package, \fileversion, r\filerev\ from
+% \filedate},
+% pdfsubject = {Documentation of LaTeX package rcs-multi which allows the
+% typesetting of RCS keywords in multi-file LaTeX documents},
+% pdfkeywords = {rcs-multi, LaTeX, RCS, multiple files, keywords, Version
+% Control, Id}
+% }%
+% \fi
+% \maketitle
+%
+% \section{Introduction}
+% This package allows to typeset version control (VC) information provided by
+% RCS\footnote{RCS homepage: \url{http://www.gnu.org/software/rcs/}} keywords
+% (\eg |$||Id: ... $|) in \LaTeX\ documents which can contain of multiple |.tex|
+% files included using |\include| or |\input|. It is based on the
+% \pkg{svn-multi} which macros have been renamed and modified to support RCS.
+%
+% This package reads the keywords of all files and provides the VC information
+% of of the most recent changed file of the document to the user through a set
+% of macros. This information is written to the auxiliary |.aux| file during the
+% first \LaTeX\ run and read back at the next which introduces the same delay
+% known from the table of contents. The standard \LaTeX{} switch |\nofiles| can
+% be used to suppress the file generation.
+%
+% \subsection{Scope of Keywords}
+% This package provides the RCS keyword data in two different scopes:
+% document-global and file-local.
+%
+% \subsubsection*{Document Global}
+% The document global macros, like \cs{rcsrev}, return the latest version
+% control information (keyword data) for the whole multi-file document, \ie the
+% information of the latest changed file of the document. To collect, sort and
+% provide this information is the main functionality of this package.
+%
+% \subsubsection*{Local to Current File}
+% There are also file-local macros, \eg \cs{rcsfilerev}, which return the
+% version control information of the current file, \ie the file they are used
+% in. It is assumed here that every file using this macros calls first the macro
+% \cs{rcsid}. See section~\ref{sec:usage:id} for more details about this macro.
+% Please note that the file-local macros technically actually return the
+% \emph{last registered} information from the last \cs{rcsid}.
+%
+%
+% \section{Usage}
+% The version control information are provided by RCS keywords which
+% first need to be read in by dedicated macros and can then be typeset using
+% different macros.
+%
+% \subsection{Including RCS Keywords}\label{sec:usage:id}
+% RCS keywords are included using \cs{rcsid}. This macro should be written very
+% early in each file, \ie in the preamble of the main document soon after
+% |\documentclass| and |\usepackage{rcs-multi}| and as first in \emph{every}
+% subfile before an |\chapter| or similar macro. It does not create any output.
+% See section~\ref{sec:kwaccess} to learn how to typeset the keyword values.
+%
+% \DescribeMacro{rcsid}{\karg{Id}}
+% \DescribeMacro*{rcsid}{\karg{Header}}
+% The macro is for the |Id| keyword and must be written like shown. A trailing
+% colon with or without spaces after the keyword name (`|Id|') is also valid but
+% \textbf{everything else} except a valid RCS string will cause a \TeX{} parse
+% error. The difference between |Id| and |Header| is that the latter includes
+% the full URL/path and not only the filename.
+%
+% \DescribeMacro{rcs}{\kmarg{keyword}}
+% This macro let you typeset rcs keywords directly. The dollars will be stripped
+% and the rest is typeset as normal text.
+%
+% \DescribeMacro{rcskwsave}{\kmarg{keyword}}
+% This macro lets you include and save any keyword you like. The keyword can be
+% already expanded or not (no value and only ``|:|'' or nothing after the key
+% name). This macro is also used internally and does not create any output.
+% Please note that the argument is read verbatim and that there should be no
+% space between the macro and the argument's left brace.
+%
+%
+% \subsection{Typesetting the Keyword Values}\label{sec:kwaccess}
+% The following macros can be used to typeset the keyword values anywhere in the
+% document. Please note that not all \LaTeX{} fonts have all special
+% characters, \eg `|_|' is not provided in the standard roman font. To proper
+% typeset file names and URLs containing these letters you can use either
+% teletype font (|\texttt|) or use |{\urlstyle{rm}\rcsnolinkurl{...}}| which
+% requires the \pkg{hyperref} package.
+%
+% \DescribeMacro{rcsrev}{}
+% \DescribeMacro*{rcsdate}{}
+% \DescribeMacro*{rcsauthor}{}
+% These macros hold the keyword values of the whole document, \ie of the most
+% recent revision. They can be used everywhere in every file of the \LaTeX{}
+% document, after |\usepackage{rcs-multi}| of course. Please see
+% section~\ref{sec:date} how to typeset parts of the date.
+%
+% \DescribeMacro{rcsfilerev}{}
+% \DescribeMacro*{rcsfiledate}{}
+% \DescribeMacro*{rcsfileauthor}{}
+% These macros hold the keyword values of the current \LaTeX{} file, but only if
+% it contains a \cs{rcsid} or \cs{rcsidlong} macro. Otherwise the macros hold
+% either zero values or the values of the last file dependent on whether an
+% option is enabled which enabled the \pkg{fink} package. Please see
+% section~\ref{sec:date} how to typeset parts of the date. See \cs{rcskw} below
+% for all other keywords.
+%
+% \DescribeMacro{rcsmainfilename}{}
+% The macro \cs{rcsmainfilename} hold the filename of the main \LaTeX{file}.
+% It can be used to typeset this information anywhere in the document which
+% might be more descriptive as the name of the current file (which can be
+% typeset with \cs{rcskw}|{HeadURL}| or \cs{rcskw}|{Filename}| after \cs{rcsid}
+% or \cs{rcsidlong}, respectively). ^^A TODO: Change to correct names!
+%
+% \DescribeMacro{rcssetmainfile}{}
+% This will declare the current file as the main LaTeX file by defining the
+% above macros. It will automatically be called at the end of the preamble so
+% the user normally doesn't have to use it by him- or herself as long it isn't
+% needed in the preamble.\par Please note that this macro changes the definition
+% of \cs{rcsmainfilename} directly without going over the auxiliary file.
+% Calling it in several files will make this two macros inconsistent.
+%
+% \DescribeMacro{rcskw}{\marg{keyword name}}
+% All keywords saved with \cs{rcsid} or \cs{rcskwsave} can be typeset by this
+% macro which is a holdover from a very early version of this
+% package when multiple files where not supported. It takes one argument which
+% must be a RCS keyword name. It then returns the current value of this
+% keyword or nothing (|\relax|) when the keyword was not set yet.
+% Examples:\\
+% \indent\indent |\textsl{Revision: \rcskw{Revision}}|\\
+% \indent\indent |URL: \url{\rcskw{HeadURL}}|\\ ^^A TODO: Change name!
+% In the second example |\url| (\pkg{hyperref} package) is used to add a hyperlink
+% and to avoid problems with underscores (|_|) inside the URL. \rcsmulti is
+% also providing a macro \cs{rcsnolinkurl} which works like |\url| but doesn't
+% adds an hyperlink. See the description of this macro for more details.
+%
+% If the given keyword doesn't exists a package warning is given to allow
+% spelling errors to be tracked down. This doesn't work well when \cs{rcskw} is
+% used inside |\url|. In this case the warning code will be typeset(!) verbatim
+% into the document by |\url|.
+%
+% \DescribeMacro{rcskwdef}{\marg{keyword name}\marg{value}}
+% This macro is used to define the keyword values. This is normally only called
+% internally but could be used by the user to override single keywords. The
+% values can then be typeset by \cs{rcskw}. Note that this macro has no
+% influence on the calculation of the latest revision.
+%
+% \subsection{Accessing Date Values}\label{sec:date}
+% \begin{tabular}{@{}l@{\hspace{-2\macrosep}}ll@{}}\\
+% \DescribeMacro*{rcsyear}{}&
+% \DescribeMacro*{rcsfileyear}{}\\
+% \DescribeMacro*{rcsmonth}{}&
+% \DescribeMacro*{rcsfilemonth}{}\\
+% \DescribeMacro*{rcsday}{}&
+% \DescribeMacro*{rcsfileday}{}\\
+% \DescribeMacro*{rcshour}{}&
+% \DescribeMacro*{rcsfilehour}{}\\
+% \DescribeMacro*{rcsminute}{}&
+% \DescribeMacro*{rcsfileminute}{}\\
+% \DescribeMacro*{rcssecond}{}&
+% \DescribeMacro*{rcsfilesecond}{}\\
+% \end{tabular}
+% \\*[\medskipamount]
+% Whenever the date information is read, \ie by
+% \cs{rcskwsave}|{Date}| or \cs{rcsid}, the following macros are set to the
+% appropriate date parts for the
+% current file (the |\rcsfile...| versions) and for the whole document.
+%
+%
+% \DescribeMacro{rcstime}{}
+% \DescribeMacro*{rcsfiletime}{}
+% This macros return the time part of the date only and simply return the
+% corresponding hour, minute and second macros with a colon as separator.
+%
+% \DescribeMacro{rcspdfdate}{}
+% Returns the last changed date of the whole document in a format needed for
+% |\pdfinfo|. Can be used like this:\\
+% \hbox{}\hfill|\pdfinfo{ /CreationDate (D:\rcspdfdate) }|\hfill\hbox{}\\
+% to set the PDF creation date to the last changed date if you use |pdflatex| to
+% compile your \LaTeX{} document.
+%
+% \DescribeMacro{rcstoday}{}
+% \DescribeMacro*{rcsfiletoday}{}
+% These macros typeset the document-global or current-file, respectively, using
+% the format of |\today| which depends on the used language.
+% To adjust the language of your document use the \pkg{babel} package.
+%
+% \subsection{Using Full Author Names}
+% If you like to have the full author\footnote{This means RCS authors,
+% \eg the persons who commit changes into the rcs repository.} names, not only
+% the usernames, in your document you can use the following macros. First you
+% have to register all authors of the document with \cs{rcsRegisterAuthor} and
+% then you can write \eg |\rcsFullAuthor{\rcsauthor}| or
+% |\rcsFullAuthor{\rcsfileauthor}|.
+%
+% \DescribeMacro{rcsRegisterAuthor}{\marg{author}\marg{full name}}
+% This macro registers \meta{full name} as full name for \meta{author} (a
+% RCS username) for later use with \cs{rcsFullAuthor}.
+%
+% \DescribeMacro{rcsFullAuthor}{\marg{author name or macro}}
+% \DescribeMacro*{rcsFullAuthor*}{\marg{author name or macro}}
+% Takes the username as argument and returns the full name if it was registered
+% first with \cs{rcsRegisterAuthor}, otherwise it returns the given username.
+% The star version returns the username in parentheses after the full name.
+% This is normally used in one of the following forms:\\
+% \hspace*{3em}\cs{rcsFullAuthor}|{|\cs{rcsauthor}|}|\\
+% \hspace*{3em}\cs{rcsFullAuthor}|{|\cs{rcsfileauthor}|}|\\
+%
+% \subsection{Using Full Revision Names}
+% Like the author's also revision names/tags can be registered and used later.
+% These macros were implemented on user request and have the drawback that you
+% have to guess the next revision number of your document in order to get
+% correct results when you like to tag the to-be-checked-in revision. Please
+% note that this has nothing to do with the normal tagging.
+%
+% \DescribeMacro{rcsRegisterRevision}{\marg{revision number}\marg{tag name}}
+% This registers \meta{tag name} as tag name for \meta{revision number} for
+% later use with \cs{rcsFullRevision}.
+%
+% \DescribeMacro{rcsFullRevision}{\marg{revision number or macro}}
+% \DescribeMacro*{rcsFullRevision*}{\marg{revision number or macro}}
+% Takes a revision number coming from a macro like \cs{rcsrev}, \cs{rcsfilerev}
+% or a number as argument and returns the full name if it was registered first
+% with \cs{rcsRegisterRevision}, otherwise it returns ``Revision \meta{revision
+% number}''. The star version returns also the revision number leaded by `r' in
+% parentheses after the tag name, \eg |Name (1.2)|.
+%
+% \subsection{Verbatim URLs with and without Hyperlinks}
+% \vspace{-\baselineskip}
+% \DescribeMacro{rcsnolinkurl}{\marg{macro with returns special text}}
+% This macro allows you to write |\rcsnolinkurl{\rcskw{HeadURL}}| and get the
+% Head URL typeset verbatim. However |\url{|\cs{rcskw}|{HeadURL}}|
+% (\pkg{hyperref} package) gives you the same result with a hyperlink. Both
+% macros require the \pkg{hyperref} package which is not automatically loaded by
+% \rcsmulti. Please load it manually when you like to use \cs{rcsnolinkurl}.
+%
+% Please note that you can't use \pkg{hyperref}'s |\nolinkurl| because it won't
+% expand \cs{rcskw}.
+%
+% \StopEventually{}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+% \subsection{Package Header}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{rcs-multi}
+ [\filedate\space\fileversion\space RCS Keywords for multi-file LaTeX documents]
+% \end{macrocode}
+
+% \subsection{General Internal Macros}
+% Some internal used macro which don't fit in any other section.
+%
+% \begin{macro}{\rcs@ifempty}[1]{string}
+% Tests if the given argument is empty. If so the first of the next two token
+% will be expanded, the second one otherwise.
+% \begin{macrocode}
+\def\rcs@ifempty#1{%
+ \begingroup
+ \edef\rcs@temp{#1}%
+ \ifx\rcs@temp\empty
+ \endgroup
+ \expandafter
+ \@firstoftwo
+ \else
+ \endgroup
+ \expandafter
+ \@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@ifequal}[2]{string a}{string b}
+% Tests if the given arguments are identical, \eg same strings. If so the first
+% of the next two token will be expanded, the second one otherwise.
+% \begin{macrocode}
+\def\rcs@ifequal#1#2{%
+ \begingroup
+ \edef\rcs@stringa{#1}%
+ \edef\rcs@stringb{#2}%
+ \ifx\rcs@stringa\rcs@stringb
+ \endgroup
+ \expandafter
+ \@firstoftwo
+ \else
+ \endgroup
+ \expandafter
+ \@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@ifvalidrev}[1]{macro name}
+% Checks if the given macro (by name) is a valid revision, \ie defined and
+% greater than zero.
+% \begin{macrocode}
+\def\rcs@ifvalidrev#1{%
+ \begingroup
+ \@ifundefined{#1}%
+ {\def\rcs@temp{-1}}%
+ {\expandafter\edef
+ \expandafter\rcs@temp\expandafter{\csname #1\endcsname}}%
+ \ifnum\rcs@temp>-1\relax
+ \endgroup
+ \expandafter
+ \@firstoftwo
+ \else
+ \endgroup
+ \expandafter
+ \@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Definition of init values}
+% \begin{macrocode}
+% Init values
+\def\rcsrev{0.0} \def\@rcs@rev{0.0}
+\def\rcsdate{} \def\@rcs@date{}
+\def\rcsauthor{} \def\@rcs@author{}
+\def\rcsyear{0000} \def\@rcs@year{0000}
+\def\rcsmonth{00} \def\@rcs@month{00}
+\def\rcsday{00} \def\@rcs@day{00}
+\def\rcshour{00} \def\@rcs@hour{00}
+\def\rcsminute{00} \def\@rcs@minute{00}
+\def\rcssecond{00} \def\@rcs@second{00}
+\def\rcsname{} \def\@rcs@name{}
+\def\rcsurl{} \def\@rcs@url{}
+\def\rcsmainfilename{}
+\def\rcsmainurl{\rcsmainfilename}
+\def\rcs@temp{}
+\def\rcs@lastkw{}
+
+\def\rcsfilerev{0.0}
+\def\rcsfiledate{}
+\def\rcsfileauthor{}
+\def\rcsfileyear{0000}
+\def\rcsfilemonth{00}
+\def\rcsfileday{00}
+\def\rcsfilehour{00}
+\def\rcsfileminute{00}
+\def\rcsfilesecond{00}
+\def\rcsfileurl{}
+\def\rcsfilename{}
+% \end{macrocode}
+%
+
+% \subsection{Time and \textit{Today} macros}
+%
+% \begin{macro}{\rcstime}
+% \begin{macro}{\rcsfiletime}
+% This macros simple use the hour, minute and second macros.
+% \begin{macrocode}
+\def\rcstime{\rcshour:\rcsminute:\rcssecond}
+\def\rcsfiletime{\rcsfilehour:\rcsfileminute:\rcsfilesecond}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% These macros use the |\today| macro to typeset the current date using the
+% local language settings. Thanks and credit goes to Manuel P\'egouri\'e-Gonnard
+% for suggesting this feature and for providing some code.
+% \begin{macro}{\rcstoday}
+% \begin{macrocode}
+\newcommand*{\rcstoday}{%
+ \begingroup
+ \year\rcsyear \month\rcsmonth \day\rcsday
+ \relax \today
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rcsfiletoday}
+% \begin{macrocode}
+\newcommand*{\rcsfiletoday}{%
+ \begingroup
+ \year\rcsfileyear \month\rcsfilemonth \day\rcsfileday
+ \relax \today
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Id macro}
+% \begin{macro}{\rcsid}
+% Calls \cs{rcskwsave} with |\@rcsidswtrue| so that the Id keyword will be
+% parsed at the end of \cs{rcskwsave}.
+% \begin{macrocode}
+\newcommand*{\rcsid}{%
+ \@rcsidswtrue
+ \rcskwsave
+}
+\newif\if@rcsidsw
+\@rcsidswfalse
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\rcs@scanId}[6]{file name}{revision}{date (YYYY-MM-DD)}{time
+% (HH:MM:SS)}{author (username)}{rest}
+% Scans rcs Id (after it got parsed by \cs{rcskwsave}). Awaits only Id value
+% without leading `|Id:|' and a trailing |\relax| as end marker. It calls
+% \cs{@rcs@scandate} to extract the date information and \cs{@rcs@updateid} to
+% update global Id values and also sets the appropriate keywords.
+% \begin{macrocode}
+\def\rcs@scanId#1,v #2 #3 #4 #5 #6\relax{%
+ \@rcs@scandate{#3 #4}%
+ \@rcs@updateid{#2}{#3 #4}{#5}{#1}%
+ \rcskwdef{Filename}{#1}%
+ \rcskwdef{Date}{#3 #4}%
+ \rcskwdef{Revision}{#2}%
+ \rcskwdef{Author}{#5}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\@rcs@updateid}[4]{rev}{date}{author (username)}{url}
+% We first define the expanded arguments to variables for the user. The
+% expansion is needed because the arguments content is mostly generic like
+% |\rcs@value| which can change very soon after this macro.
+% \begin{macrocode}
+\def\@rcs@updateid#1#2#3#4{%
+ \xdef\rcsfilerev{#1}%
+ \xdef\rcsfiledate{#2}%
+ \xdef\rcsfileauthor{#3}%
+ \xdef\rcsfileurl{#4}%
+ \rcs@getfilename\rcsfileurl
+% \end{macrocode}
+% Then we check if the revision is non-empty (not yet expanded by RCS?)
+% and larger then the current maximum value |\@rcs@rev|. If yes we save all
+% value to save them in the .aux-file later.
+% \begin{macrocode}
+ \ifx\rcsfiledate\empty\else
+ \begingroup
+ \edef\@tempa{\@rcs@year\@rcs@month\@rcs@day}
+ \edef\@tempb{\rcsfileyear\rcsfilemonth\rcsfileday}
+ \ifnum\@tempa<\@tempb
+ \rcs@update
+ \else\ifnum\@tempa=\@tempb
+ \edef\@tempa{\@rcs@hour\@rcs@minute\@rcs@second}
+ \edef\@tempb{\rcsfilehour\rcsfileminute\rcsfilesecond}
+ \ifnum\@tempa<\@tempb
+ \rcs@update
+ \fi
+ \fi\fi
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\rcs@updateid}
+% Updates the max-hold macros with the values of the current file VC
+% information.
+% \begin{macrocode}
+\def\rcs@update{%
+ \xdef\@rcs@rev{\rcsfilerev}%
+ \xdef\@rcs@date{\rcsfiledate}%
+ \xdef\@rcs@author{\rcsfileauthor}%
+ \xdef\@rcs@year{\rcsfileyear}%
+ \xdef\@rcs@month{\rcsfilemonth}%
+ \xdef\@rcs@day{\rcsfileday}%
+ \xdef\@rcs@hour{\rcsfilehour}%
+ \xdef\@rcs@minute{\rcsfileminute}%
+ \xdef\@rcs@second{\rcsfilesecond}%
+ \xdef\@rcs@name{\rcsfilename}%
+ \xdef\@rcs@url{\rcsfileurl}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\rcs@catcodes}
+% Changes all \TeX-special character to category ``other''. The newline aka
+% return is changed to category ``ignore'' so line breaks are not taken as part
+% of the verbatim arguments.
+% \begin{macrocode}
+\def\rcs@catcodes{%
+ \let\do\@makeother
+ \dospecials
+ \catcode`\^^M9
+ \catcode`\ 10
+ \catcode`\{1
+ \catcode`\}2
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@gdefverb}[1]{macro}
+% \begin{macrocode}
+\def\rcs@gdefverb#1{%
+ \begingroup
+ \def\rcs@temp{#1}%
+ \begingroup
+ \rcs@catcodes
+ \rcs@gdefverb@
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@defverb@}[1]{verbatim stuff}
+% \begin{macrocode}
+\def\rcs@gdefverb@#1{%
+ \endgroup
+ \expandafter\gdef\rcs@temp{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Keyword Macros}
+% \begin{macro}{\rcskwsave}
+% Enabled verbatim mode and uses a sub macro to read the arguments afterwards.
+% \begin{macrocode}
+\def\rcskwsave{%
+ \begingroup
+ \rcs@catcodes
+ \rcskwsave@readargs
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcskwsave@readargs}[1]{\$kw: value\$}
+% Reads full argument, calls parse submacro and ends catcode changes.
+% If \cs{rcskwsave} was called by \cs{rcsid} scans the id keyword by calling the
+% scan macro.
+% \begin{macrocode}
+\gdef\rcskwsave@readargs#1{%
+ \rcskwsave@read#1\relax
+ \endgroup
+ \if@rcsidsw
+ \rcs@ifequal{\rcs@lastkw}{Id}%
+ {\ifx\rcskwId\empty\else
+ \expandafter
+ \rcs@scanId\rcskwId\relax
+ \@rcsidswfalse
+ \fi}{%
+ \rcs@ifequal{\rcs@lastkw}{Header}%
+ {\ifx\rcskwHeader\empty\else
+ \expandafter
+ \rcs@scanId\rcskwHeader\relax
+ \@rcsidswfalse
+ \fi}{}%
+ }%
+ \fi
+ \ignorespaces
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcskwsave@read}[1]{keyword line without surrounding \$ \$}
+% Reads the full keyword and strips the dollars.
+% \begin{macrocode}
+\begingroup
+\catcode`\$=12
+\gdef\rcskwsave@read $#1$\relax{%
+ \rcs@checkcolon#1:\relax
+}
+\endgroup
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcskwsave@parse}[2]{key}{value}
+% Parse the keyword and save it away.
+% \begin{macrocode}
+\begingroup
+\catcode`\$=11
+\gdef\rcskwsave@parse$#1:#2${%
+ \expandafter\xdef\csname rcskw#1\endcsname{#2}%
+}%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcskwdef}[2]{key}{value}
+% \begin{macrocode}
+\newcommand{\rcskwdef}[2]{%
+ \gdef\rcs@lastkw{#1}%
+ \expandafter\xdef\csname rcskw#1\endcsname{#2}%
+}
+% \end{macrocode}
+% Example: |\rcskwdef{Rev}{2.3}| will define |\rcskwRev| as `|2.3|'.
+% \end{macro}
+
+% We define default values for normal keywords. Keyword |Filename| is the name
+% given by |Id| and not a real keyword.
+% \begin{macrocode} ^^A TODO: check if needed
+\rcskwdef{Rev}{0.0}
+\rcskwdef{Date}{}
+\rcskwdef{Author}{}
+\rcskwdef{Filename}{}
+\rcskwdef{HeadURL}{}
+% \end{macrocode}
+
+% \begin{macro}{\rcskw}[1]{keyword name}
+% Macro to get keyword value. Just calls \cs{rcskw}\meta{ARGUMENT} where
+% the argument interpreted as text. So \eg |\rcskw{Date}| is the same as
+% |rcskwDate| but this could be changed later so always use this interface
+% to get the keyword values.
+%
+% \changes{v1.2}{2007/06/22}{Added warning when a wrong, maybe
+% misspelled, keyword is given.}
+% \begin{macrocode}
+\newcommand{\rcskw}[1]{%
+ \@ifundefined{rcskw#1}%
+ {\PackageWarning{rcs-multi}{RCS keyword '#1' not defined (typo?)}}%
+ {\csname rcskw#1\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+
+% \subsection{Keyword check and strip macros}
+% The following macros are used to test whether the given keywords are fully
+% expanded or not.
+% RCS supports unexpanded keywords as input with or without colon and
+% with or without trailing space(s), \ie a:~|$KW$|, b:~|$KW:$| or c:~|$KW: $|.
+% To avoid \LaTeX{} syntax errors in this pre-commit state the keyword is
+% checked by the following macros. Unexpanded keywords result in an empty value.
+% Also leading and trailing spaces are removed.
+%
+% \begin{macro}{\rcs@checkcolon}[2]{key}{potential value, might be empty}
+% Checks if the keyword contains a colon. It is called by \cs{rcskwsave@read}
+% with a trailing |:\relax| so that \#2 will be empty if there is no earlier
+% colon or will hold the value with this trailing colon otherwise.
+% The first case means that the keyword is unexpanded without colon (case a)
+% which leads to an empty value. In the second case \cs{rcs@stripcolon} is
+% called to strip the colon and surrounding spaces. The final value is
+% returned by |\rcs@value|.
+% \begin{macrocode}
+\def\rcs@checkcolon#1:#2\relax{%
+ \rcs@ifempty{#2}%
+ {\rcskwdef{#1}{}}%
+ {\rcs@stripcolon#2\relax\rcskwdef{#1}{\rcs@value}}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@stripcolon}[1]{potential value}
+% Strips the previous added colon (for \cs{rcs@checkcolon}).
+% The remaining argument is checked if it's empty (case b) or only a space
+% (case c). Otherwise the keyword is expanded and \cs{rcs@stripspace} is
+% called to strip the spaces.
+% \begin{macrocode}
+\def\rcs@stripcolon#1:\relax{%
+ \rcs@ifempty{#1}%
+ {\gdef\rcs@value{}}%
+ {\rcs@ifequal{#1}{ }%
+ {\gdef\rcs@value{}}%
+ {\rcs@stripspace#1\relax\relax}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@stripspace}[2]{first character}{rest of string}
+% Strips leading space if present and calls \cs{rcs@striptrailingspace} to
+% strip the trailing space.
+% \begin{macrocode}
+\def\rcs@stripspace#1#2\relax{%
+ \rcs@ifequal{#1}{ }%
+ {\gdef\rcs@value{#2}}%
+ {\rcs@striptrailingspace#1#2\relax}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@striptrailingspace}[1]{string}
+% Strips trailing space using the macros parameter text. Must be called with
+% |\relax| as end marker.
+% \begin{macrocode}
+\def\rcs@striptrailingspace#1 \relax{%
+ \gdef\rcs@value{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \subsection{Date Macros}
+% \begin{macro}{\@rcs@scandate}[1]{date}
+% Scans data information in Id keyword and saves them in macros.
+% \begin{macrocode}
+\def\@rcs@scandate#1{\@rcs@scandate@#1\empty\relax}
+
+\def\@rcs@scandate@#1/#2/#3 #4:#5:#6#7#8\relax{%
+ \gdef\rcsfileyear{#1}%
+ \gdef\rcsfilemonth{#2}%
+ \gdef\rcsfileday{#3}%
+ \gdef\rcsfilehour{#4}%
+ \gdef\rcsfileminute{#5}%
+ \gdef\rcsfilesecond{#6#7}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcspdfdate}
+% Returns date in a format needed for |\pdfinfo|.
+% \begin{macrocode}
+\def\rcspdfdate{%
+ \rcsyear\rcsmonth\rcsday
+ \rcshour\rcsminute\rcssecond00'00'%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Mainfile Makros}
+% \begin{macro}{\rcssetmainfile}
+% Saves the current filename and URL to macros.
+% Will be called automatically in the preamble.
+% \changes{v1.2}{2007/06/22}{New macro}
+% \begin{macrocode}
+\newcommand{\rcssetmainfile}{%
+ \xdef\rcsmainfilename{\rcsfilename}%
+ \xdef\rcsmainfileurl{\rcsfileurl}%
+}
+\AtBeginDocument{\rcssetmainfile}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Register and FullName Macros}
+% \begin{macro}{\rcsRegisterAuthor}[2]{author username}{Full Name}
+% Saves the author's name by defining |rcs@author@|\meta{username} to it.
+% \begin{macrocode}
+\newcommand{\rcsRegisterAuthor}[2]{%
+ \expandafter\def\csname rcs@author@#1\endcsname{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcsFullAuthor}
+% \begin{macro}{\rcsFullAuthor*}
+% We test if the starred or the normal version is used and call the
+% appropriate submacro |rcsFullAuthor@star| or |rcsFullAuthor@normal|.
+% \changes{v1.2}{2007/06/22}{Macro now returns the username if the full name
+% was not registered.}
+% \begin{macrocode}
+\newcommand{\rcsFullAuthor}{%
+ \@ifnextchar{*}%
+ {\rcsFullAuthor@star}%
+ {\rcsFullAuthor@normal}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rcsFullAuthor@star}[1]{username}
+% Both submacros are calling |rcsFullAuthor@| but with different arguments.
+% The star macro also removes the star of course.
+% \begin{macrocode}
+\def\rcsFullAuthor@star*#1{%
+ \edef\rcs@temp{#1}%
+ \rcsFullAuthor@{\rcs@temp}{~(\rcs@temp)}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rcsFullAuthor@normal}[1]{username}
+% \begin{macrocode}
+\def\rcsFullAuthor@normal#1{%
+ \edef\rcs@temp{#1}%
+ \rcsFullAuthor@{\rcs@temp}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rcsFullAuthor@}[2]{username}{previous defined trailing string}
+% |rcsFullAuthor@| now sets the author's full name. Note that |#2| is empty
+% when the normal version is called.
+% \begin{macrocode}
+\def\rcsFullAuthor@#1#2{%
+ \@ifundefined{rcs@author@#1}%
+ {#1}%
+ {\csname rcs@author@#1\endcsname #2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcsRegisterRevision}[2]{revision number}{tag name}
+% Saves the revision's name or tag by defining
+% |rcs@revision@|\meta{revisionnumber} to it.
+% \changes{v1.2}{2007/06/22}{New macro}
+% \begin{macrocode}
+\newcommand{\rcsRegisterRevision}[2]{%
+ \expandafter\def\csname rcs@revision@#1\endcsname{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcsFullRevision}
+% \begin{macro}{\rcsFullRevision*}
+% We test if the starred or the normal version is used and call the
+% appropriate submacro |rcsFullRevision@star| or |rcsFullRevision@normal|.
+% \changes{v1.2}{2007/06/22}{New macro}
+% \begin{macrocode}
+\newcommand{\rcsFullRevision}{%
+ \@ifnextchar{*}%
+ {\rcsFullRevision@star}%
+ {\rcsFullRevision@normal}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rcsFullRevision@star}[1]{revision number}
+% Both submacros are calling |rcsFullRevision@| but with different arguments.
+% The star macro also removes the star of course.
+% \begin{macrocode}
+\def\rcsFullRevision@star*#1{%
+ \edef\rcs@temp{#1}%
+ \rcsFullRevision@{\rcs@temp}{~(r\rcs@temp)}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rcsFullRevision@normal}[1]{revision number}
+% \begin{macrocode}
+\def\rcsFullRevision@normal#1{%
+ \edef\rcs@temp{#1}%
+ \rcsFullRevision@{\rcs@temp}{}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\rcsFullRevision@}[2]{revision number}{previous defined trailing
+% string}
+% |rcsFullRevision@| now sets the revision name. Note that |#2| is empty
+% when the normal version is called.
+% \begin{macrocode}
+\def\rcsFullRevision@#1#2{%
+ \@ifundefined{rcs@revision@#1}%
+ {Revision #1}%
+ {\csname rcs@revision@#1\endcsname #2}%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Other macros}
+% This section contains macros which don't fit in any other section.
+%
+% \begin{macro}{\rcs}
+% Strips the |$ $| around the keyword. A space must be before the final dollar.
+% \begin{macrocode}
+\providecommand{\rcs}[1]{\@revs#1}
+\def\@rcs$#1 ${#1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcsnolinkurl}[1]{URL}
+% This code is taken from the \pkg{hyperref} package and is the definition of
+% |\url| just without the part which creates the actual hyperlink. This needs
+% of course the \pkg{hyperref} package. A warning is given if it isn't loaded.
+% \changes{v1.2}{2007/06/22}{New macro}
+% \begin{macrocode}
+%% Adapted from the \url macro of the `hyperref` package.
+\DeclareRobustCommand*{\rcsnolinkurl}{%
+ \@ifundefined{hyper@normalise}%
+ {\PackageWarning{rcs-multi}{Package hyperref is needed for \noexpand
+ \rcsnolinkurl.}}%
+ {\hyper@normalise\rcsnolinkurl@}%
+}%
+\def\rcsnolinkurl@#1{\Hurl{#1}}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\rcs@getfilename}[1]{URL}
+% This macro expands the content using the temporary macro and sets it in front
+% of the \csi{rcs@getfilename} sub-macro together with |/{}| to make sure the
+% macro does not break at values without directories. A |\relax| is used as
+% end marker.
+% \begin{macrocode}
+\def\rcs@getfilename#1{%
+ \begingroup
+ \edef\rcs@temp{#1}%
+ \expandafter\@rcs@getfilename\rcs@temp/{}\relax
+}%
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@rcs@getfilename}[2]{URL part before first slash}{URL part after
+% first slash}
+% Splits the content at the first slash (|/|) and checks if the remainder is
+% empty. If so the end marker got reached and the part before the slash is the
+% filename which is returned. Otherwise the macro recursively calls itself to
+% split the remainder.
+% \begin{macrocode}
+\def\@rcs@getfilename#1/#2\relax{%
+ \rcs@ifempty{#2}%
+ {\endgroup\gdef\rcsfilename{#1}}%
+ {\@rcs@getfilename#2\relax}%
+}%
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Write to Auxiliary file}
+%
+
+% \begin{macro}{\rcs@writeaux}
+% This macro writes the |.aux| auxiliary file and is called from a
+% |\AtEndDocument| macro later on.
+% \begin{macrocode}
+\def\rcs@writeaux{%
+ \immediate\write\@mainaux{^^J%
+ \noexpand\gdef\noexpand\rcsrev{\@rcs@rev}^^J%
+ \noexpand\gdef\noexpand\rcsdate{\@rcs@date}^^J%
+ \noexpand\gdef\noexpand\rcsauthor{\@rcs@author}^^J%
+ \noexpand\gdef\noexpand\rcsyear{\@rcs@year}^^J%
+ \noexpand\gdef\noexpand\rcsmonth{\@rcs@month}^^J%
+ \noexpand\gdef\noexpand\rcsday{\@rcs@day}^^J%
+ \noexpand\gdef\noexpand\rcshour{\@rcs@hour}^^J%
+ \noexpand\gdef\noexpand\rcsminute{\@rcs@minute}^^J%
+ \noexpand\gdef\noexpand\rcssecond{\@rcs@second}^^J%
+ \noexpand\rcs@gdefverb\noexpand\rcsname{\@rcs@name}^^J%
+ \noexpand\rcs@gdefverb\noexpand\rcsurl{\@rcs@url}^^J%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% At the end of document the values are written to the auxiliary file.
+% \begin{macrocode}
+\AtEndDocument{%
+ \if@filesw
+ \ifx\@rcs@date\empty\else
+ \rcs@writeaux
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.ins b/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.ins
new file mode 100644
index 00000000000..69075e66821
--- /dev/null
+++ b/Master/texmf-dist/source/latex/rcs-multi/rcs-multi.ins
@@ -0,0 +1,67 @@
+%% Copyright (C) 2009 by Martin Scharrer <martin@scharrer-online.de>
+%%
+%% This work 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 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the file rcs-multi.dtx and the derived file
+%% rcs-multi.sty.
+%%
+%% $Id: rcs-multi.ins 626 2009-03-23 13:48:17Z martin $
+
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/rcs-multi}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2009 by Martin Scharrer <martin@scharrer-online.de>
+
+This work 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 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Martin Scharrer.
+
+This work consists of the file rcs-multi.dtx and the derived file rcs-multi.sty.
+
+\endpreamble
+
+\generate{\file{rcs-multi.sty}{\from{rcs-multi.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* rcs-multi.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file rcs-multi.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
+
+% vim: ft=tex