Archiv verlassen und diese Seite im Standarddesign anzeigen : Verhindern gleicher label
Hallo,
ich bin mir sicher einmal was gelesen zu haben, nur finde ich es leider nicht mehr.
Meine Teildokumente sind mittels \include im Hauptdokument eigebunden. In den Überschriften, Bildern, Tabellen usw. verwende label für die Querverweise.
Jetzt bekomme ich beim Setzen die folgende Warnung:
LaTeX Warning: There were multiply-defined labels.
Wie kann ich gleiche labels verhindern?
Wie kann ich gleiche labels verhindern?
schau mal hier (http://www.mrunix.de/forums/showthread.php?t=47138)...
MfG,
daswaldhorn
17-12-2006, 18:19
Hallo,
also du musst schon selber sehen, dass das nicht passiert. Ich helfe mir damit, das ich die Art des Labels mit angebe, also bei Kapiteln oder Abschnitten \label{chap:bla}, \label{sec:blubb}, bei Abbildungen und Tabellen \label{fig:foo}, \label{tab:bar} und bei Gleichungen \label{eq:baz}.
Lass dir ein System einfallen.
Grüße, Carsten
P.S: Einen Punkt für Rainer :)
schau mal hier (http://www.mrunix.de/forums/showthread.php?t=47138)...
MfG,
Das Paket werde ich mir einmal ansehen...
...also bei Kapiteln oder Abschnitten \label{chap:bla}, \label{sec:blubb}, bei Abbildungen und Tabellen \label{fig:foo}, \label{tab:bar} und bei Gleichungen \label{eq:baz}...
Dieses System verwende ich schon.
Meine Idee war hier mehr an das System zu übergeben und nicht mehr an so was denken zu müssen, aber gut, hinbekommen werde ich es auch so...
trinix
Meine Idee war hier mehr an das System zu übergeben und nicht mehr an so was denken zu müssen, aber gut, hinbekommen werde ich es auch so...
Du könntest natürlich erstmal grob danach suchen, indem Du die \include-Anweisungen im Hauptdokument der Reihe nach auskommentierst und zwischendurch schaust, ob es immer noch mehrere label gleichen Namens gibt. Wenn Dich das nicht weiterbringt, hast Du entweder mehrere solcher Fälle -- oder bereits eine doppelte Bezeichnung innerhalb einer Datei bzw. Überschneidung mit dem Hauptdokument, falls Du darin auch Marken gesetzt hast. Letzteres kriegst Du raus, indem Du alle \include-Anweisungen auskommentierst und dann jeweils nur eine davon aktivierst.
@Carsten: immer noch voll im Rennen :D
MfG,
Diese Vorgehen hatte ich ähnlich angewendet - mal sehen.
Vielleicht gibt es ja auch die Möglichkeit ein kleines Skript zu schreiben, das mir die tex-Dateien nach /label durchsucht und diese alphabetisch geordnet in einem txt-Dokument ausgibt...
Diese Vorgehen hatte ich ähnlich angewendet - mal sehen.
Vielleicht gibt es ja auch die Möglichkeit ein kleines Skript zu schreiben, das mir die tex-Dateien nach /label durchsucht und diese alphabetisch geordnet in einem txt-Dokument ausgibt...
Ah ja -- ein erster Ansatz wäre vllt
for I in `grep -h "label{" *.tex`; do echo "$I"; done | grep "label{" | sort -d > foo.txt
;)
MfG,
d.h. im nächsten Schritt vllt
for I in `cat foo.txt`; do J=${I##*label{} && J=${J%%\}*}; echo $J; done | sort -d > bar.txt
da guggst Du dann nach doppelten Einträgen, z.B. "blubb" ist doppelt (oder mehr):
grep -n blubb *.tex | grep label
sollte dann die entsprechenden Zeilen der .tex-Datei incl. Zeilennummer widergeben, wo dieses label definiert ist.;)
MfG,
Olla...
Das ist jetzt ein wenig schnell.
Ich habe mit Skripten noch nichts zu tun gehabt. Kannst du mir bitte ein paar Worte dazu sagen? Vor Allem was es bedeutet und wie es implementieren muss.
Olla...
Das ist jetzt ein wenig schnell.
Ich habe mit Skripten noch nichts zu tun gehabt. Kannst du mir bitte ein paar Worte dazu sagen? Vor Allem was es bedeutet und wie es implementieren muss.
was soll ich sagen? Das war noch gar kein Skript ;-)
Das verdient den Namen schon eher:
#!/bin/bash
# (c) 2006-12-18-rais
TMPUNSRT=foo.txt
TMPPRESORT=bar.txt
TMPSORTED=$TMPUNSRT #kein Grund, mehr Dateien zu basteln als notwendig;-)
test -r $TMPUNSRT && rm $TMPUNSRT #Liste löschen, falls vorhanden...
test -r $TMPPRESORT && rm $TMPPRESORT #Liste löschen, falls vorhanden...
#da $TMPUNSRT und $TMPSORTED eigentlich dieselbe Datei sind, braucht $TMPSORTED nicht gelöscht zu werden...
for I in `grep -h "label{" *.tex`; do #das macht zweierlei:
#der grep gibt hier zeilenweise alle in den *.tex-Dateien vorkommenden "label{" wider, während die for I - Schleife diese Zeile auch noch wortweise einliest (könnte ja mehr als nur das \label{bla} in einer Zeile stehen...
X=`echo "$I" | grep label` #hiermit (und der Folgezeile) werden alle Zeilen rausgefischt, die gar kein label deklarieren...
test ! -z "$X" && echo "$I" >> $TMPUNSRT #alle Einträge, die label enthalten, landen hingegen in $TMPUNSRT
done #Ok, das läßt sich vermutlich noch vereinfachen, aber sooo oft wird dieses Skript wohl gar nicht benötigt... und sooo viel länger braucht es bei den heutigen Rechnern wohl auch nicht;-)
for I in `cat $TMPUNSRT`; do #die bisher unsortierte Liste wortweise einlesen
J=${I##*label\{} && J=${J%%\}*} # hier geschieht wieder zweierlei: erst wird alles vor der Marke (inklusive des Kommandos "label" und der öffnenden geschweiften Klammer abgekniffen und an String $J übergeben. Anschließend wird alles nach der ersten schließenden geschweiften Klammer abgekniffen und an $J übergeben -- hier (in $J) sollte nun nur noch die Bezeichnung der Marke drinstehen...
echo $J >> $TMPPRESORT #...und die wird in die (immer noch nicht sortierte Liste) eingetragen
done #huch -- schon wieder fertig;-)
cat $TMPPRESORT | sort -d > $TMPSORTED #was einmal unsortiert war, wird nun als sortierte Liste in $TMPSORTED erzeugt
#der nun folgenden Teil soll Dir das Nachschauen in Datei sowieso nach doppelten Einträgen Abnehmen:
S=diese-Marke-hast-Du-bestimmt-nicht-deklariert #zum Vergleich...
SKIP=$S #falls eine Marke 3- oder mehrmals deklariert sein sollte...
for I in `cat $TMPSORTED`; do #die sortierte Liste wieder einlesen...
if [ "$S" = "$I" ]; then #wenn Eintrag in Liste doppelt...
if [ "$I" != "$SKIP" ]; then #wenn nicht drei- oder mehrfach, dann
echo "Guggst Du hier:" #genau;-)
grep -n $I *.tex #das gibt Dir die Treffer für einen Eintrag aus, der mehrmals gefunden wurde
echo " " #zus. Abstand, falls es zu viele Einträge werden
SKIP=$I #damit dieses "Guggst Du hier" nicht mehrmals für ein Label ausgegeben wird...
fi
fi
S=$I #für den nächsten Schleifenaufruf: dat stand vorher drin
done #Oh, schon wieder fertig;-)
obwohl, eigentlich wär' das wohl schon eher was fürs Nachbarboard: Skriptsprachen...
MfG,
Besten Dank Rainer...
Das werde ich am Wochenende gleich mal testen und mich dann wieder melden...
Beste Grüße
trinix
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.