Zweimal derselbe Input -> Warnung

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Zweimal derselbe Input -> Warnung

Beitrag von ko3rn3r »

Hallo,
ich habe folgendes Problem: ich habe mehrere unabhängige Dokumente, die ich der besseren Übersicht halber alle zusammen in einem weiteren Dokument zusammenfassen möchte. Da jetzt einige der Dokumente mehrere gleiche Absätze enthalten, habe ich mit "\input{...}" die doppelten Passagen eingebracht. Der Code ist damit nicht doppelt und Änderungen muss ich nicht zweimal machen. So weit so gut. In der Übersichtsdatei habe ich jedoch das Problem, dass hier mehrmals der "\input{...}"-Befehl aufgerufen wird und Bildreferenzen mehrfach vorhanden sind. Dadurch kommt es zum Fehler: "Label `key' multiply defined."

Um das Ganze etwas verständlicher zu machen hier ein Beispiel:

Ich habe die Dokumente "Apfel", "Birne", "Kirsche" und "Banane".
"Apfel" und "Birne" enthalten an einer Stelle den gleichen Code, weshalb dieser jeweils mit "\input{...}" von außerhalb geladen wird.
Zur besseren Übersicht habe ich ein Masterfile, das wie folgt aufgebaut ist.

Code: Alles auswählen

...
\begin{document}

\input{Apfel}
\input{Birne}
\input{Kirsche}
\input{Banane}

\end{document}
Da in dem Code von "Apfel" und "Birne" ein Bild geladen wird, taucht dies natürlich auch zweimal in der Übersichtsdatei auf und es kommt zu "Label `key' multiply defined.".

Der Code von "Apfel" bzw. "Birne" hat folgende Gestalt:

Code: Alles auswählen

...
\begin{document}
Apfelkuchen ist lecker!
\input{Kuchen}
\end{document}

Code: Alles auswählen

...
\begin{document}
Birnenkuchen ist auch lecker!
\input{Kuchen}
\end{document}
Und in "Kuchen" wiederum ist ein Bild:

Code: Alles auswählen

...
\begin{document}
...
\begin{figure}[H]
\includegraphics[width=0.6\linewidth]{Kuchen.png}
\centering
\caption{Kuchen aus dem Ofen}
\label{kuchen}
\end{figure}
...
bla bla \ref{kuchen}
\end{document}
Hat jemand eine gewitzte Idee, wie ich die Warnung beheben kann? Ich könnte dies zwar einfach ignorieren, aber das finde ich nicht schön.

Mit freundlichen Grüßen

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5080
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Re: Zweimal derselbe Input -> Warnung

Beitrag von Johannes_B »

Ich verstehe ehrlich gesagt das Problem noch gar nicht.
Was gibt die Fehlermeldung aus? Wird diese von LaTeX selbst oder dem Editor angezeigt?


Warum nimmst du eine Gleitumgebung, wenn diese nicht gleiten darf? Dann darfst du die auch gleich weg lassen.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

markusv
Forum-Meister
Forum-Meister
Beiträge: 872
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Re: Zweimal derselbe Input -> Warnung

Beitrag von markusv »

Johannes_B hat geschrieben:
Mi 29. Apr 2020, 05:26
Ich verstehe ehrlich gesagt das Problem noch gar nicht.
Was gibt die Fehlermeldung aus? Wird diese von LaTeX selbst oder dem Editor angezeigt?
Das Bild wird mehrmals mit dem gleichen Codeschnipsel über \input{} ins Dokument geladen, jeweils mit dem Label kuchen. Dadurch kommt es zur Warnung, dass mehrere Objekte das gleiche Label besitzen.

Ich würde zur Lösung in die gleiche Kerbe schlagen: wenn das Bild sowieso nicht gleiten soll, nimmst du überhaupt Bezug auf das Bild per \ref{kuchen} etc.? Wenn nicht, kannst du die \label{}-Anweisung auch einfach weglassen.
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5080
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Re: Zweimal derselbe Input -> Warnung

Beitrag von Johannes_B »

Aber OP schreibt von unabhängigen Dokumenten und Apfel und Birne haben jeweils ein eigenes \begin{document}
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

MoeWe
Forum-Guru
Forum-Guru
Beiträge: 299
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Zweimal derselbe Input -> Warnung

Beitrag von MoeWe »

Irgendwas ist hier in der Tat etwas unklar.

So wie ich die Frage verstanden habe, werden die gezeigten Dateien jeweils mit einem einfachen \input in die Hauptdatei eingefügt. Wenn die Dateien aber wirklich die gezeigte Struktur haben, dann sollte das zu bösen Fehlern führen, denn man kann document-Umgebungen nicht verschachteln.

Code: Alles auswählen

\documentclass{article}


\begin{document}
\begin{document}
Lorem
\end{document}
\end{document}
Der bis jetzt gezeigte Code würde aber dazu führen, dass genau das passiert. Hier als kompaktes Beispiel

Code: Alles auswählen

\documentclass{article}

\begin{filecontents*}{\jobname-a.tex}
\begin{document}
Apfel

\input{\jobname-k}
\end{document}
\end{filecontents*}

\begin{filecontents*}{\jobname-b.tex}
\begin{document}
Birne

\input{\jobname-k}
\end{document}
\end{filecontents*}

\begin{filecontents*}{\jobname-k.tex}
\begin{document}
\begin{figure}
Kuchen
\caption{Kuchen}\label{kuchen}
\end{figure}
\end{document}
\end{filecontents*}


\begin{document}
\input{\jobname-a}

\input{\jobname-b}
\end{document}
Wenn man sämtliche Fehler ignoriert, kompiliert zumindest bei mir die Datei trotzdem, aber man sollte sich auf keinen Fall auf irgendetwas in der Ausgabe verlassen. Fehlermeldungen sollte man niemals ignorieren. Wenn Dein Editor Dir bei diesem Code keine Fehler anzeigt, dann solltest Du über einen Editor-Wechsel nachdenken.

Also weg mit den geschachtelten document-Umgebungen. Es gibt durchaus Möglichkeiten, mit der Umgebung auch in eingebundenen Dateien umzugehen, dafür bräuchte man dann aber spezielle Pakete wie docmute oder subfiles. Nach meiner Erfahrung machen die die meisten Dinge nur komplizerter.

Code: Alles auswählen

\documentclass{article}

\begin{filecontents*}{\jobname-a.tex}
Apfel

\input{\jobname-k}
\end{filecontents*}

\begin{filecontents*}{\jobname-b.tex}
Birne

\input{\jobname-k}
\end{filecontents*}

\begin{filecontents*}{\jobname-k.tex}
\begin{figure}
Kuchen
\caption{Kuchen}\label{kuchen}
\end{figure}
\end{filecontents*}


\begin{document}
\input{\jobname-a}

\input{\jobname-b}
\end{document}
Hier können wir das Problem gut nachvollziehen. Wenn Du wirklich mehrere Male dieselbe Datei einbinden möchtest und sie \label benutzt, dann musst Du einen Trick finden, das \label dennoch eindeutig zu machen. Dabei musst Du aber gleichzeitig aufpassen, dass Dir die \refs nicht zerschossen werden. Es wäre ja sinnvoll, dass die \refs zum Kuchen-Bild in der Apfel-Datei zum Apfel-Kuchen-Bild gehen und in der Birnen-Datei zum Birnen-Kuchen-Bild gehen. Zwei Methoden dazu findest Du in https://tex.stackexchange.com/q/517729/35864. Im Grunde ist die Idee immer, dass Du auf irgendeine Weise zusätzlichen Text in das Label anfügst, sodass es eindeutig wird. Siehe auch die Kommentare unter https://tex.stackexchange.com/q/533559/35864.

verstehichnich

Re: Zweimal derselbe Input -> Warnung

Beitrag von verstehichnich »

Ähm, das Problem tauchst doch nur auf, wenn dieselbe Gleitumgebung zweimal in dasselbe Dokument eingebunden wird. Was soll denn der Sinn davon sein? Wäre es nicht sinnvoller, das Bild nur einmal im Dokument zu haben und dann ggf. zweimal auf dasselbe Bild zu verweisen. Das Bild nur einmal zu laden ist ja so schwer nicht. Dazu muss man sich ja nur einen Schalter definieren, der beim ersten Mal gesetzt wird, um dann das die Gleitumgebung beim zweiten Mal zu übergehen. Siehe dazu beispielsweise etoolbox.

Also entweder hat der OP das Problem nicht verständlich genug dokumentiert oder es liegt ein grundsätzlicher Denkfehler vor.

ko3rn3r
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Mi 23. Jan 2019, 13:46

Re: Zweimal derselbe Input -> Warnung

Beitrag von ko3rn3r »

MoeWe hat geschrieben:
Mi 29. Apr 2020, 08:02
Irgendwas ist hier in der Tat etwas unklar.

So wie ich die Frage verstanden habe, werden die gezeigten Dateien jeweils mit einem einfachen \input in die Hauptdatei eingefügt. Wenn die Dateien aber wirklich die gezeigte Struktur haben, dann sollte das zu bösen Fehlern führen, denn man kann document-Umgebungen nicht verschachteln.

Code: Alles auswählen

\documentclass{article}


\begin{document}
\begin{document}
Lorem
\end{document}
\end{document}
Der bis jetzt gezeigte Code würde aber dazu führen, dass genau das passiert. Hier als kompaktes Beispiel

Code: Alles auswählen

\documentclass{article}

\begin{filecontents*}{\jobname-a.tex}
\begin{document}
Apfel

\input{\jobname-k}
\end{document}
\end{filecontents*}

\begin{filecontents*}{\jobname-b.tex}
\begin{document}
Birne

\input{\jobname-k}
\end{document}
\end{filecontents*}

\begin{filecontents*}{\jobname-k.tex}
\begin{document}
\begin{figure}
Kuchen
\caption{Kuchen}\label{kuchen}
\end{figure}
\end{document}
\end{filecontents*}


\begin{document}
\input{\jobname-a}

\input{\jobname-b}
\end{document}
Wenn man sämtliche Fehler ignoriert, kompiliert zumindest bei mir die Datei trotzdem, aber man sollte sich auf keinen Fall auf irgendetwas in der Ausgabe verlassen. Fehlermeldungen sollte man niemals ignorieren. Wenn Dein Editor Dir bei diesem Code keine Fehler anzeigt, dann solltest Du über einen Editor-Wechsel nachdenken.

Also weg mit den geschachtelten document-Umgebungen. Es gibt durchaus Möglichkeiten, mit der Umgebung auch in eingebundenen Dateien umzugehen, dafür bräuchte man dann aber spezielle Pakete wie docmute oder subfiles. Nach meiner Erfahrung machen die die meisten Dinge nur komplizerter.

Code: Alles auswählen

\documentclass{article}

\begin{filecontents*}{\jobname-a.tex}
Apfel

\input{\jobname-k}
\end{filecontents*}

\begin{filecontents*}{\jobname-b.tex}
Birne

\input{\jobname-k}
\end{filecontents*}

\begin{filecontents*}{\jobname-k.tex}
\begin{figure}
Kuchen
\caption{Kuchen}\label{kuchen}
\end{figure}
\end{filecontents*}


\begin{document}
\input{\jobname-a}

\input{\jobname-b}
\end{document}
Hier können wir das Problem gut nachvollziehen. Wenn Du wirklich mehrere Male dieselbe Datei einbinden möchtest und sie \label benutzt, dann musst Du einen Trick finden, das \label dennoch eindeutig zu machen. Dabei musst Du aber gleichzeitig aufpassen, dass Dir die \refs nicht zerschossen werden. Es wäre ja sinnvoll, dass die \refs zum Kuchen-Bild in der Apfel-Datei zum Apfel-Kuchen-Bild gehen und in der Birnen-Datei zum Birnen-Kuchen-Bild gehen. Zwei Methoden dazu findest Du in https://tex.stackexchange.com/q/517729/35864. Im Grunde ist die Idee immer, dass Du auf irgendeine Weise zusätzlichen Text in das Label anfügst, sodass es eindeutig wird. Siehe auch die Kommentare unter https://tex.stackexchange.com/q/533559/35864.

Hallo, danke für deine Antwort!
In meinem Beispiel habe ich leider ein Fehler gemacht: "\begin{document}" und "\end{document}" stehen natürlich nicht im Dokument "Apfel" bzw. "Birne". Es gibt nur die eine Warnung, dass ein Label mehrfach vorkommt. Aber das hast du ja in deinem schönen Beispiel so implementiert.

Der erste Link hat mir sehr geholfen, das war genau das Problem!
Vielen vielen Dank!

Liebe Grüße

Antworten