summaryrefslogtreecommitdiff
path: root/info/examples/ltt/xref.sty
blob: 218d814f97536462d6000b1cdf002adb11db57e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
%  XREF.STY
%  Querverweis-Mechanismus fuer mehrbaendige Werke
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xref}
\RequirePackage{ifthen}

% Kennung fuer eigene Bandnummer, Default: Band I
\newcommand{\@volume}{I}

% Userkommando zum Setzen der Bandzahl
\newcommand{\volume}[1]
  {\renewcommand{\@volume}{#1}}

% Vollstaendige Kennzeichnung nach einer 
% externen Referenz
\newcommand{\volnotation}[1]
  { (Band~#1)}

% Umdefinition einiger Interna fuer dreiteilige
% Labelinformationen
\long\def\@firstofthree#1#2#3{#1}
\long\def\@secondofthree#1#2#3{#2}
\long\def\@thirdofthree#1#2#3{#3}

% Analog zu \@setref:
% #1 ist dreiteilige Liste (Ref, Seite, Band), 
% #2 ist Befehl \@xofthree, #3 ist Labelname
\def\@setbref#1#2#3{%
  \ifx#1\relax
  \else
    \def\tmp{\expandafter#2#1}%
    \ifthenelse{\equal{\tmp}{\@volume}}
      {}
      {\volnotation{\tmp}}%
    \fi
  }

% Label, das neben Referenznummer und Seitenzahl
% auch die Bandnummer wegschreibt
\def\label#1{\@bsphack
  \protected@write\@auxout{}%
  {\string\newlabel{#1}%
    {{\@currentlabel}{\thepage}{\@volume}}}%
  \@esphack}

%% Lies Hilfsfiles fuer die externen Baende ein und
%% generiere Labelinfos daraus
%% -- Einige Zeilen aus File `xr.sty'/tools -------
%% xr.dtx Copyright (C) 1993-1994 David Carlisle
\def\externalaux#1{\makeatletter
  \XR@next#1.aux\relax\\}
\def\XR@next#1\relax#2\\{%
  \edef\XR@list{#2}%
  \XR@loop{#1}}
\def\XR@aux{%
  \ifx\XR@list\@empty\else\expandafter\XR@explist\fi}

\def\XR@explist{\expandafter\XR@next\XR@list\\}
\def\XR@loop#1{\openin\@inputcheck#1\relax
  \ifeof\@inputcheck
    \PackageWarning{xref}%
      {^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
    \expandafter\XR@aux
  \else
    \PackageInfo{xref}{IMPORTING LABELS FROM #1}%
    \expandafter\XR@read\fi}
\def\XR@read{%
  \read\@inputcheck to\XR@line
  \expandafter\XR@test\XR@line...\XR@}
\long\def\XR@test#1#2#3#4\XR@{%
  \ifx#1\newlabel
    \newlabel{#2}{#3}%
  \else\ifx#1\@input
     \edef\XR@list{\XR@list#2\relax}%
  \fi\fi
  \ifeof\@inputcheck\expandafter\XR@aux
  \else\expandafter\XR@read\fi}
% ----- Ende des xr-Imports --------

% ---- Hauptbefehle ------
% Zunaechst die normalen Funktionalitaeten: Druck
% der Referenz, Seitenzahl, Bandzahl
% r@name enthaelt liste der drei Daten
\newcommand{\rref}[1]{%
  \expandafter\@setref%
    \csname r@#1\endcsname\@firstofthree{#1}}
\newcommand{\ppageref}[1]{%
  \expandafter\@setref%
    \csname r@#1\endcsname\@secondofthree{#1}}
\newcommand{\bref}[1]{%
  \expandafter\@setref%
    \csname r@#1\endcsname\@thirdofthree{#1}}
  
% Liefert Referenzzahl und ggf. Hinweis auf den
% zugehoerigen Band, falls extern
\renewcommand{\ref}[1]{%
  \expandafter\@setref%
    \csname r@#1\endcsname\@firstofthree{#1}%
  \expandafter\@setbref%
    \csname r@#1\endcsname\@thirdofthree{#1}%
  }

% dto. fuer Seitenzahlen
\renewcommand{\pageref}[1]{%
  \expandafter\@setref%
    \csname r@#1\endcsname\@secondofthree{#1}%
  \expandafter\@setbref%
    \csname r@#1\endcsname\@thirdofthree{#1}%
  }