Tabelle aus externer Datei einbinden

Tabellen und Grafiken erstellen und anordnen


Sauerteigbrot

Tabelle aus externer Datei einbinden

Beitrag von Sauerteigbrot »

Guten Morgen

Ich weiss nicht ganz wie ich das Problem hier minimal darstellen kann, da es darum geht verschiedene Dateien zusammen zu führen.

Es sieht aber ungefähr so aus:

	
	
\documentclass[a4paper,11pt]{report}
\usepackage{float} 
	
\begin{document} 	
	\begin{table}[H]
		\centering	
		\begin{tabular}{|p{4.1cm}|p{10.2cm}|} 			
\hline
\textbf{Brot} & \textbf{Rezept }   \\ \hline	

Zopf & Margerine, Hefe, Wasser, Salz \\ \hline
Weggli & Wie Zopf aber mehr Margerine und längere aufgehzeit \\ \hline 

		\end{tabular}
		\caption{Brot Rezepte }
		\label{Tab_Brot_Rezepte_I}
	\end{table}

\end{document}	
	

So baue ich meine Tabellen auf.

Jetzt möchte ich aber das der Text in der Tabelle in einer separaten Datei ist. Der Grund ist das ich die selbe Tabelle z.B. auch für Präsentationen brauche. Ich möchte solche Tabellen nicht mit copy-paste zwischen den verschiedenen Dokumenten wechseln. Grund ist das ich oft im Worf-Flow kleine Änderungen mache und diese dann gerne gleich überall geändert habe ohne daran denken zu müssen, das ich es dann wieder mit copy-paste überall einfüge. Je nach Format des PDFs kann es zudem auch mal sein, dass ich eine Tabelle etwas anders darstellen möchte. Für mich hat sich die manuelle Angabe der Breite bewährt, da ich so mehr Kontrolle habe.

Also war mein Ansatz wie folgt:

Neues File mit:

	
\textbf{Brot} & \textbf{Rezept }   \\ \hline	

Zopf & Margerine, Hefe, Wasser, Salz \\ \hline
Weggli & Wie Zopf aber mehr Margerine und längere aufgehzeit \\ \hline 

Dann

	
\begin{table}[H]
		\centering	
		\begin{tabular}{|p{4.1cm}|p{10.2cm}|} 			
\hline

\input{Neues_File}


		\end{tabular}
		\caption{Brot Rezepte }
		\label{Tab_Brot_Rezepte_I}
	\end{table}

Jetzt nimmt es mir auch die Tabelle rein. Jedoch ist die Darstellung nicht korrekt. Es hat unten noch überflüssige Linien.

Mit googeln komme ich nicht wirklich weiter. Es scheint das auch andere ähnliche Probleme haben gerade dann wenn der Inhalt einer Tabelle automatisch generiert wird. Die Lösungen sind aber dann 10y alt. Andere Verweisen, dass sie mit dem \input Ansatz seit einem Udpate 2020 Probleme haben. Aber deren Ansätze klappen bei mir nicht ganz.

Habt ihr eine Idee woran es liegen könnte? \input sollte ja einfach den Inhalt der Datei einbinden auf die gleiche Art als wäre sie direkt hingeschrieben. Darum verstehe ich das Problem nicht wirklich das sich ergibt.

Ich hoffe ihr habt alle Informationen um das Problem nach vollziehen zu können.

Lg Sauerteigbrot


Grummelgast

Re: Tabelle aus externer Datei einbinden

Beitrag von Grummelgast »

Das Problem hat mit dem ltfilehook-Mechanismus in neueren LaTeX-Kerneln zu tun. Das führt dazu, dass quasi am Ende von \input bereits die nächste Tabellenzeile begonnen wird. Es gibt dafür einen einfachen Hack, bei dem das interne \@input an Stelle von \input verwendet wird:

% Zuerst eine externe Datei so erzeugen, dass das für ein vollständiges Minimalbeispiel
% auch im Online-Compiler funktioniert:
\begin{filecontents}{test-tabelle.tex}
\textbf{Brot} & \textbf{Rezept }   \\ \hline	
Zopf & Margarine, Hefe, Wasser, Salz \\ \hline
Weggli & Wie Zopf aber mehr Margarine und längere aufgeheizt \\ \hline
\end{filecontents}

\documentclass[ngerman]{article}

\usepackage{babel}

\begin{document}
	
\begin{table}
  \centering	
  \begin{tabular}{|p{4.1cm}|p{10.2cm}|} 			
    \hline
    \csname @input\endcsname{test-tabelle.tex}%
  \end{tabular}
  \caption{Brot Rezepte }
  \label{Tab_Brot_Rezepte_I}
\end{table}
\end{document}

Empfehlen würde ich aber, einfach die gesamte Tabelle auszulagern:

% Kommentar siehe oben
\begin{filecontents}{test-tabelle2.tex}
  \begin{tabular}{|p{4.1cm}|p{10.2cm}|} 			
    \hline
    \textbf{Brot} & \textbf{Rezept }   \\ \hline	
    Zopf & Margarine, Hefe, Wasser, Salz \\ \hline
    Weggli & Wie Zopf aber mehr Margarine und längere aufgeheizt \\ \hline
  \end{tabular}
\end{filecontents}

\documentclass[ngerman]{article}

\usepackage{babel}

\begin{document}
	
\begin{table}
  \centering	
  \input{test-tabelle2.tex}%
  \caption{Brot Rezepte }
  \label{Tab_Brot_Rezepte_I}
\end{table}
\end{document}

Eine weitere Verbesserung könnte darin bestehen, die Tabelle als CSV-Datei anzulegen und dann beispielsweise mit datatool zu lesen.

BTW: AFAIK heißt es auch in der Schweiz Margarine.

BTW2: Nächstes Mal probierst du dich bitte direkt an einem vollständigen Minimalbeispiel. Ich musste nicht nur erst Code zusammenbasteln, sondern auch noch frei Schnauze ergänzen. Es gibt daher keine Garantie, dass das bei dir nach Einbau in dein Dokument auch so funktioniert. Der unveränderte Code meiner Beispiele sollte bei dir allerdings genauso funktionieren.

BTW3: Sämtliche Links sind mit Bedacht und voller Absicht gesetzt.


Grummelgast

Re: Tabelle aus externer Datei einbinden

Beitrag von Grummelgast »

BTW4: Vertikale Linien und überhaupt der exzessive Gebraucht von Linien in Tabellen ist eine typografische und eine ästhetische Katastrophe. → booktabs-de


Sauerteigbrot

Re: Tabelle aus externer Datei einbinden

Beitrag von Sauerteigbrot »

Wuste nicht das dies geht, also online über mehrere Dateien hinweg was zusammen zu basteln. Jetzt verstanden wie du es gemacht hast. Merci.

Die ganze Tabelle habe ich im Moment nicht ausgelagert, weil ich eben Zeilenbreite etc. je nach Dokument manuell kontrollieren wollte. Ergibt aber evtl. nicht mega Sinn. Muss darüber nochmals nachdenken.

\csname @input\endcsname{Tabelle.tex}

Funktioniert und löst das Problem. Merci. Hier kann also zu.

Kann sein wegen der Margarine aber als Person mit Rechtschreibschwäche habe ich so etwas nicht sehr auf dem Schirm sondern ein Lektorat vor Abgaben.

Merci für das Dokument zu den hochwertigen Tabellen. Das lese ich mir sehr gerne nochmals durch. Habe jetzt jahrelang bei LaTex "gebastelt" und mir jetzt im Rahmen der Dissertation angefangen mir sehr bewusst die Zeit zu hin und wieder zu nehmen auch zu "verstehen" was ich eigentlich tue. Tabellen sind dann wohl mein nächstes Thema :) Sind aber für mein Projekt nicht mega wichtig darum sind evtl. CVS Dateien ein wenig ein Overkill aber google das sich mal.


Grummelgast

Re: Tabelle aus externer Datei einbinden

Beitrag von Grummelgast »

Nicht googeln! Google liefert bei LaTeX immer wieder (u. a. total veralteten) Mist. Schau dir lieber die Paketdoku an, die über den gegebenen Link ebenfalls erreichbar ist. Du kannst aber auch die Doku der bei dir installierten Paketversion verwenden. Und wenn du im Internet suchst, dann gezielt auf einigen wenigen LaTeX-Seiten wie hier. Aber auch dann immer auf das Datum der Beiträge achten! Trotzdem verschwendet man mit Suchen oft extrem viel Zeit, die man mit Lesen der Anleitung sinnvoller verbringen kann.

Änderungen an Spaltenbreiten externer Tabellen sind auch kein Problem, wenn man sich dafür ein paar Längen (oder Makros) definiert. Wobei man ggf. mit CSV-Dateien eventuell sogar mehr Flexibilität bekommt, weil man dort nicht nur die Spaltenbreiten (und ggf. vertikalen Linien), sondern auch ob die horizontalen Linien gesetzt werden sollen oder vielleicht doch lieber nur ein vertikaler Abstand, beim Einlesen der CSV-Datei bestimmt und nicht bereits im Datensatz.

Aber auch andere Tabellenpakete können für die Trennung von Form und Inhalt der Tabelle nützlich sein. Es gibt da eine ganze Menge.


Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: Tabelle aus externer Datei einbinden

Beitrag von u_fischer »

Grummelgast hat geschrieben:
Mi 17. Nov 2021, 09:46

Das Problem hat mit dem ltfilehook-Mechanismus in neueren LaTeX-Kerneln zu tun.

Nicht nur. Auch ohne die neuen Hooks war \input nicht expandierbar und funktionierte daher nur halb in Tabellen und erzeugte öfter unerwünschte leere Zeilen. Und es gab auch vorher diverse Pakete, wie filehook, die Hooks einfügten.

Es gibt einen offenen Issue zu einem expandierbaren Input: https://github.com/latex3/latex2e/issues/514.


Sauerteigbrot

Re: Tabelle aus externer Datei einbinden

Beitrag von Sauerteigbrot »

Ja das mache ich inzwischen. Direkt in die Dokumentationen gehen.

Das meinte ich ich mit "verstehe" statt "basteln" ;)

"Änderungen an Spaltenbreiten externer Tabellen sind auch kein Problem, wenn man sich dafür ein paar Längen (oder Makros) definiert. Wobei man ggf. mit CSV-Dateien eventuell sogar mehr Flexibilität bekommt, weil man dort nicht nur die Spaltenbreiten (und ggf. vertikalen Linien), sondern auch ob die horizontalen Linien gesetzt werden sollen oder vielleicht doch lieber nur ein vertikaler Abstand, beim Einlesen der CSV-Datei bestimmt und nicht bereits im Datensatz."

Das ist definitiv interessant.


Antworten