summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/xcite/xcite.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/xcite/xcite.dtx')
-rw-r--r--macros/latex/contrib/xcite/xcite.dtx189
1 files changed, 189 insertions, 0 deletions
diff --git a/macros/latex/contrib/xcite/xcite.dtx b/macros/latex/contrib/xcite/xcite.dtx
new file mode 100644
index 0000000000..d341e4399d
--- /dev/null
+++ b/macros/latex/contrib/xcite/xcite.dtx
@@ -0,0 +1,189 @@
+% \iffalse meta-comment
+%
+% Copyright 2011 Enrico Gregorio
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c 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.3c 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 Enrico Gregorio.
+%
+% This work consists of the files
+% xcite.dtx
+% xcite.ins
+% and the derived file xcite.sty.
+%
+% \fi
+% \iffalse
+%
+%<*driver>
+\ProvidesFile{xcite.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{xcite}
+%<*package>
+ [2011/09/02 v1.0 eXternal Citations (EG)]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{xcite.dtx}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \CheckSum{82}
+%
+% \changes{v1.00}{2011/09/02}
+% {First version}
+%
+% \GetFileInfo{xcite.dtx}
+%
+% \title{The \textsf{xcite} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
+% \author{Enrico Gregorio\thanks{%
+% This package derives from \textsf{xr} by David Carlisle}\\
+% {\small\texttt{Enrico dot Gregorio at univr dot it}}}
+% \date{\filedate}
+% \maketitle
+%
+% \section{Description}
+% This package implements a system for eXternal Citations.
+% If one document needs to refer to citations in another, say |aaa.tex|,
+% then this package may be loaded in the main file, and the command\\[\topsep]
+% |\externalcitedocument{aaa}|\\[\topsep]
+% given in the preamble.
+%
+% Then you may use |\cite| to refer to anything which has been
+% declared by |\bibitem| in either |aaa.tex| or the main document.
+% You may declare any number of such external documents. Notice that
+% |\bibitem| commands may not appear in |aaa.tex|, but rather in
+% |aaa.bbl| if \textsc{Bib}\negthinspace\TeX{} or Biber are used to
+% generate the bibliography, but this doesn't matter. The important
+% thing is that |aaa.tex| is in final form with all citations resolved
+% and that |aaa.aux| is readable.
+%
+% If any of the external documents, or the main document, use the same
+% citation key then an error will occur as the label will be multiply
+% defined. To overcome this problem |\externalcitedocument| has an
+% optional argument. If you declare\\[\topsep]
+% |\externalcitedocument[A-]{aaa}|\\[\topsep]
+% then all references from |aaa| are prefixed by |A-|. So for
+% instance, if |aaa.tex| had |\bibitem{xyz}|, then this could be
+% referenced with |\cite{A-xyz}|. The prefix need not be |A-|, it can
+% be any string chosen to ensure that all the keys imported from
+% external files are unique. Note however that if your style declares
+% certain active characters (|:| in French, |"| in German) then these
+% characters can not usually be used in |\cite|, and similarly may
+% not be used in the optional argument to |\externalcitedocument|.
+%
+% \section{Acknowledgment}
+% This package is just a straightforward modification of David
+% Carlisle's \textsf{xr} package (based on Jean-Pierre Drucbert's
+% work). The changes consisted in renaming the main command and
+% substituting |\newlabel| with |\bibcite|; the |XR| prefix to
+% internal commands has been changed into |XC|.
+%
+% These modifications are possible because |\newlabel| and |\bibcite|
+% are almost the same command in disguise.
+%
+% This package originated from a question in
+% |TeX.StackExchange.com|.\footnote{\ttfamily
+% http://tex.stackexchange.com/questions/27243/}
+%
+% \StopEventually{}
+%
+% \section{The macros}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Save the optional prefix. Start processing the first |aux| file.
+% \begin{macrocode}
+\newcommand\externalcitedocument[2][]{{%
+ \makeatletter
+ \def\XC@prefix{#1}%
+ \XC@next#2.aux\relax\\}}
+% \end{macrocode}
+%
+% Process the next |aux| file in the list and remove it from the head of
+% the list of files to process.
+% \begin{macrocode}
+\def\XC@next#1\relax#2\\{%
+ \edef\XC@list{#2}%
+ \XC@loop{#1}}
+% \end{macrocode}
+%
+% Check whether the list of |aux| files is empty.
+% \begin{macrocode}
+\def\XC@aux{%
+ \ifx\XC@list\@empty\else\expandafter\XC@explist\fi}
+% \end{macrocode}
+%
+% Expand the list of |aux| files, and call |\XC@next| to process the first
+% one.
+% \begin{macrocode}
+\def\XC@explist{\expandafter\XC@next\XC@list\\}
+% \end{macrocode}
+%
+% If the |aux| file exists, loop through line by line, looking for
+% |\bibcite| and |\@input|. Otherwise process the next file in the
+% list.
+% \begin{macrocode}
+\def\XC@loop#1{\openin\@inputcheck#1\relax
+ \ifeof\@inputcheck
+ \PackageWarning{xc}{^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
+ \expandafter\XC@aux
+ \else
+ \PackageInfo{xc}{IMPORTING LABELS FROM #1}%
+ \expandafter\XC@read\fi}
+% \end{macrocode}
+%
+% Read the next line of the aux file.
+% \begin{macrocode}
+\def\XC@read{%
+ \read\@inputcheck to\XC@line
+% \end{macrocode}
+% The |...| make sure that |\XC@test| always has sufficient arguments.
+% \begin{macrocode}
+ \expandafter\XC@test\XC@line...\XC@}
+% \end{macrocode}
+%
+% Look at the first token of the line.
+% If it is |\bibcite|, do the |\bibcite|. If it is |\@input|, add the
+% filename to the list of files to process. Otherwise ignore.
+% Go around the loop if not at end of file. Finally process the next
+% file in the list.
+% \begin{macrocode}
+\long\def\XC@test#1#2#3#4\XC@{%
+ \ifx#1\bibcite
+ \bibcite{\XC@prefix#2}{#3}%
+ \else\ifx#1\@input
+ \edef\XC@list{\XC@list#2\relax}%
+ \fi\fi
+ \ifeof\@inputcheck\expandafter\XC@aux
+ \else\expandafter\XC@read\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
+