Seite 1 von 1

Zweimal derselbe Input -> Warnung

Verfasst: Di 28. Apr 2020, 18:43
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.
...
\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:
...
\begin{document}
Apfelkuchen ist lecker!
\input{Kuchen}
\end{document}
...
\begin{document}
Birnenkuchen ist auch lecker!
\input{Kuchen}
\end{document}
Und in "Kuchen" wiederum ist ein Bild:
...
\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

Re: Zweimal derselbe Input -> Warnung

Verfasst: Mi 29. Apr 2020, 05:26
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.

Re: Zweimal derselbe Input -> Warnung

Verfasst: Mi 29. Apr 2020, 06:40
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.

Re: Zweimal derselbe Input -> Warnung

Verfasst: Mi 29. Apr 2020, 07:27
von Johannes_B
Aber OP schreibt von unabhängigen Dokumenten und Apfel und Birne haben jeweils ein eigenes \begin{document}

Re: Zweimal derselbe Input -> Warnung

Verfasst: Mi 29. Apr 2020, 08:02
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.
\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
\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.
\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.

Re: Zweimal derselbe Input -> Warnung

Verfasst: Mi 29. Apr 2020, 11:41
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.

Re: Zweimal derselbe Input -> Warnung

Verfasst: Do 30. Apr 2020, 18:16
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.
\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
\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.
\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