Hallöchen!
Ich habe das CrossReferencesDict nun endlich implementiert. Dabei
ergibt sich folgendes abschließendes Bild:
Zunächst einmal muß man sauber unterscheiden zwischen Labels, die
mit Dokument-Elementen verknüpft sind (\label), und Labels, die in
Querverweisen benutzt werden (\ref).
Erstere bilden sogenannte absolute Pfade zu Elementen. Das kann
z. B. so aussehen:
Experimente → Ergebnisse → µc-Si:H → Beweglichkeiten der µc-Si:H-Proben
Die Pfeile trennen Labels. Dieser Pfad besteht also aus vier
Labels.
Dabei ist „Experimente“ das Kapitel, „Ergebnisse“ ein Abschnitt
darin, „µc-Si:H“ ein Unterabschnitt, und „Beweglichkeiten der
µc-Si:H-Proben“ eine Bildunterschrift in einem Float darin. Das
sind alles sogenannte _implizite_ Labels, d. h. sie werden aus
Überschriften, Bildunterschriften etc. gemacht.
Alle Labels werden normalisiert, d. h. der Whitespace in ihnen wird
normalisiert, und dann wird ihre Länge auf 80 Zeichen begrenzt.
Labels können in sich aber auch mehrere alternative Namen aufnehmen.
Wenn beispielsweise die Abbildung das explizite Label „µc-Si:H“
bekommt, sieht es so aus:
Experimente → Ergebnisse → µc-Si:H → Beweglichkeiten der µc-Si:H-Proben
µc-Si:H
Es gibt nun also zwei Möglichkeiten, auf das Bild zu verweisen.
Hätten alle Ebenen ein explizites Label, gäbe es 2⁴ = 16
Möglichkeiten, auf das Bild zu verweisen.
Im CrossReferencesDict werden solche absoluten Pfade gespeichert,
zusammen mit den Elementen des AST, auf die sie verweisen.
So, und dann gibt es noch die Labels, die der Autor eingibt, um auf
andere Elemente zu verweisen (LaTeXs \ref). Das sind sogenannte
“sparse paths”, also etwa „dünne Pfade“. Es geht dabei im Prinzip
um die Möglichkeit, beliebige Teile des absoluten Pfades
auszulassen, so daß nur die innere Reichenfolge der Pfad-Komponenten
erhalten bleibt. Es muß bloß gewährleistet bleiben, daß der dünne
Pfad auf genau einen absoluten Pfad paßt, damit der Querverweis
eindeutig aufgelöst werden kann. Folgende dünne Pfade verweisen auf
den obigen absoluten Pfad:
Experimente → Ergebnisse → µc-Si:H → Beweglichkeiten …
Experimente → Beweglichkeiten …
Ergebnisse → µc-Si:H → µc-Si:H
Bew… µc-Si:H-Proben
Die Auslassungspunkte werden dabei in ".+" von regulären Ausdrücken
umgewandelt. Es sei hier nochmal daran erinnert, daß man wirklich
„…“ und nicht etwa „...“ schreiben muß. Die Input-Method bzw. der
Editor muß dem Autor die Möglichkeit geben, diesen Unicode-Codepoint
auch einzugeben.
Beachte, daß der sparse Path „µc-Si:H“ erstmal nicht eindeutig ist,
weil er sowohl auf den Unterabschnitt, als auch auf das explizite
Label der Abbildung verweisen könnte. Explizite Labels haben keine
höhere Priorität vor impliziten Labels.
Aber zwei Dinge _haben_ höhere Priorität:
1. Labels, die in demselben Abschnitt stehen, von dem aus der
Querverweis kommt. Das habe ich so gemacht, weil es ein
häufiger Fall ist und Autoren normalerweise einen guten
Überblick über den aktuellen Abschnitt haben.
2. Labels, die in demselben Dokument stehen wie der Querverweis.
Die haben also Priorität über Labels, die in eingebundenen
Dokumenten stehen.
Wenn man also von einer Stelle innerhalb des Unterabschitts
„µc-Si:H“ auf die Abbildung verweist, genügt „µc-Si:H“.
Tschö,
Torsten.
--
Torsten Bronger, aquisgrana, europa vetus
Jabber-ID: [EMAIL PROTECTED]
(Siehe http://imd.webhop.org für ICQ, MSN, etc.)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Latex-bronger-gummi mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/latex-bronger-gummi