csv -> Tabelle

Tabellen und Grafiken erstellen und anordnen


Lumbago
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mo 5. Dez 2016, 20:14

csv -> Tabelle

Beitrag von Lumbago »

Hallo,

ich würde gern Daten aus einer csv-Datei einlesen und eine Tabelle damit erstellen. Derzeit mache ich das mit \csvautotabular. Die Daten sind zwei Spalten und ich würde gern nach 50 Zeilen auf der selben Seite daneben die Tabelle fortführen, so dass ich ca. 50 Zeilen habe, aber 200 Wertepaare darstellen kann.

Ich hoffe man versteht was ich vorhabe und vielleicht hat jemand einen Tipp.

Vielen Dank.

Gast

Beitrag von Gast »

LaTeX hat eine Anweisung \twocolumn, um auf zweispaltigen Satz umzuschalten, und eine Anweisung \onecolumn, um wieder einspaltig weiter zu machen. Zusammen mit einer longtable für die Tabelle könnte das dein Problem eventuell lösen.

Hilft dir nicht? Dann befolge die wichtigen Hinweise und mach ein Minimalbeispiel. Bisher wissen wir nämlich nicht einmal, welches Paket bei dir \csvautotabular bereit stellt. Wir können nur vermuten, dass du csvsimple verwendest.

Lumbago
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mo 5. Dez 2016, 20:14

Beitrag von Lumbago »

\NeedsTeXFormat{LaTeX2e}[1995/06/01] 
\documentclass[a4paper,oneside,12pt,titlepage]{scrartcl}

%\usepackage{selinput}
\usepackage{csvsimple}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage[amssymb]{SIunits} 
\renewcommand{\familydefault}{\sfdefault} 
\usepackage{graphicx} 
\usepackage{subfigure}                         
\usepackage{float}
\usepackage[section]{placeins}
\usepackage{textcomp}
\renewcommand{\topfraction}{0.85}
\renewcommand{\textfraction}{0.1}
\renewcommand{\floatpagefraction}{0.75}
\usepackage{cite}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}

\usepackage{fancyhdr}

usepackage{setspace}

\begin{document}

\csvautotabular{i_u_tex.csv}

\end{document}
Beispiel der csv daten:
input,	output
-0.8,	-8.88 	
-0.75,	-8.33
-0.7,	-7.77
-0.65,	-7.22
-0.6,	-6.67
-0.55,	-6.11
-0.5,	-5.56
-0.45,	-5.01
Ziel wäre es nun zum Beispiel, nur 2 Zeilen in 4 Spalten stehen zu haben, wobei in jeder spalte das Wertepaar stehen soll.

Gast

Beitrag von Gast »

Grml! Wieder der Code nicht als solcher markiert, obwohl dick und fett über dem Eingabefeld steht, wie das geht! Und warum hältst du dich nicht an den Link, den man dir extra gibt! Dein Beispiel ist alles andere als minimal. Unter dem Link ist angegeben, wie jeder Laie ein Beispiel minimieren kann!

Mit Wiederholung des Tabellenkopfes kann man die Tabelle beispielsweise so splitten:
% Im Minimalbeispiel die Datei mit den Daten direkt aus dem Dokument bereit stellen.
\begin{filecontents*}{i_u_tex.csv}
input, output
-0.8, -8.88
-0.75, -8.33
-0.7, -7.77
-0.65, -7.22
-0.6, -6.67
-0.55, -6.11
-0.5, -5.56
-0.45, -5.01
\end{filecontents*}
\documentclass[a4paper,oneside,12pt,titlepage]{scrartcl}

\usepackage{csvsimple}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{amsfonts}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{amsmath}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{amssymb}% Für das Beispiel überflüssig → Weglassen!
%\usepackage[amssymb]{SIunits}% Für das Beispiel überflüssig → Weglassen!
%\renewcommand{\familydefault}{\sfdefault}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{graphicx}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{subfigure}% Total veraltet → Ersetzen (siehe Text)!
%\usepackage{float}% Für das Beispiel überflüssig → Weglassen (siehe Text)!
%\usepackage[section]{placeins}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{textcomp}% Für das Beispiel überflüssig → Weglassen!
%\renewcommand{\topfraction}{0.85}% Für das Beispiel überflüssig → Weglassen!
%\renewcommand{\textfraction}{0.1}% Für das Beispiel überflüssig → Weglassen!
%\renewcommand{\floatpagefraction}{0.75}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{cite}% Für das Beispiel überflüssig → Weglassen!
%\usepackage[usenames,dvipsnames]{xcolor}% Für das Beispiel überflüssig → Weglassen!
%\usepackage{listings}% Für das Beispiel überflüssig → Weglassen!

%\usepackage{fancyhdr}% Für das Beispiel überflüssig → Weglassen (siehe Text!)!

%usepackage{setspace}% Zeile Fehlerhaft → Beispiel nicht lauffähig!

\newcounter{csvmaxrow}
\setcounter{csvmaxrow}{\maxdimen}
\makeatletter
\csvset{%
  autosplittabular/.style={
    file=#1,
    after head=\csv@pretable\begin{tabular}[t]{|*{\csv@columncount}{l|}}\csv@tablehead,
    table head=\hline\csvlinetotablerow
               \xdef\csv@repeathead{\noexpand\stepcounter{csvrow}\csvlinetotablerow\noexpand\\\noexpand\hline}% siehe Text!
               \\\hline,
    late after line={\ifcase \XmodY{\value{csvrow}}{\value{csvmaxrow}}\relax
                       \typeout{Split after row \thecsvrow}%
                       \expandafter\csv@restarttable
                     \else
                       \expandafter\\
                     \fi},
    table foot=\\\hline,
    late after last line=\csv@tablefoot\end{tabular}\csv@posttable,
    command=\csvlinetotablerow},
}
\newcommand*{\csv@restarttable}{%
  \\\hline
  \end{tabular}\hskip\columnsep
  \begin{tabular}[t]{|*{\csv@columncount}{l|}}\hline
  \csv@repeathead% siehe Text!
}
\makeatother

\begin{document}

\setcounter{csvmaxrow}{5}% siehe Text
\noindent\csvloop{autosplittabular={i_u_tex.csv}}

\end{document}
Der Zähler csvmaxrow gibt dabei an, nach wievielen Zeilen (der Tabellenkopf zählt mit) die Tabelle aufgeteilt werden soll. Er sollte also min. auf 2 gesetzt werden (an der markierten Stelle). Die Einzeltabellen werden oben ausgerichtet (Option t bei \begin{tabular}) mit einem Abstand von \columnsep nebeneinander gepackt. Sind es zu viele, erfolgt so automatisch ein Umbruch. Soll der Tabellenkopf nicht wiederholt werden, ist mindestens die Zeile
  \csv@repeathead% siehe Text!
auszukommentieren. Besser ist, wenn man dann auch noch
               \xdef\csv@repeathead{\noexpand\stepcounter{csvrow}\csvlinetotablerow\noexpand\\\noexpand\hline}% siehe Text!
weglässt.

Das ganze ist so natürlich noch nicht optimal. So wäre es beispielsweise besser, für das Setzen des Zählers und für die Befehle beim Neustart der Tabelle Optionen zu definieren, die dann auch leicht geändert werden könnten. Aber das war mir zu aufwändig und für Anfänger ohne Studium der entsprechenden Doku zu schwer zu verstehen. Also habe ich darauf verzichtet.

Die ganzen in der Dokumentpräambel auskommentierten Zeilen haben in einem echten Minimalbeispiel (dieses Mal den Link sorgfältig beachten!) nichts zu suchen, da sie für das Beispiel unerheblich sind oder sogar Fehler verursachen.

Zu \renewcommand{\familydefault}{\sfdefault} sei erwähnt, dass damit eine serifenlose Schrift als Grundschrift eingestellt wird. Das sollte man nur für sehr, sehr kurze Texte machen und nur für Leute, die nicht bereits den ganzen Tag mit schlecht lesbaren Texten geschlagen sind. Serifenschriften sind auf Dauer angenehmer zu lesen.

Das Paket subfigure ist überholt. Der Autor hat schon vor Jahren subfig als Nachfolger herausgebracht. subfigure existiert nur noch aus Gründen der Kompatibilität für alte Dokumente. In neuen bitte nicht mehr verwenden! Eine (nicht nur) in meinen Augen sehr empfehlenswerte Alternative zum Nachfolger subfig ist subcaption vom Autor des bekannten caption.

Das Paket float ist bei Verwendung einer KOMA-Script-Klasse wie in deinem Beispiel eigentlich überflüssig. Man kann für nicht gleitende Abbildungen und Tabellen dann einfach \captionof verwenden und neue Umgebungen mit \DeclareNewTOC definieren. Beide Anweisungen sind in der KOMA-Script-Anleitung und im KOMA-Script-Buch dokumentiert.

Das Paket fancyhdr wird mit KOMA-Script-Klassen ausdrücklich nicht empfohlen. Die Klassen erzeugen sogar entsprechende Warnungen. Stattdessen nimmt man besser scrlayer-scrpage, das ebenfalls in der KOMA-Script-Anleitung und im KOMA-Script-Buch dokumentiert ist. Dort sind auch einige Gründe erwähnt.

Bei der Zeile usepackage{setspace} fehlt min. das \ vor usepackage. Das sollte bei einem getesteten Minimalbeispiel eigentlich nicht passieren.

Denk immer daran: Je sorgfältiger du deine Frage stellst, desto eher motivierst du Helfer ihre Freizeit dafür zu investieren.

Lumbago
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mo 5. Dez 2016, 20:14

Beitrag von Lumbago »

Hi,

vielen Dank für Deine Hilfe, ich werde in Zukunft versuchen das Beispiel besser zu machen. Vielen Dank auch noch mal für die Packetinfos. Da ich recht neu im Umgang mit Latex bin, habe ich erst mal das genommen, was in alten Dokumenten verwendet wurde.

Beste Grüße.

Gast

Beitrag von Gast »

Du solltest besser nur das nehmen, was du wirklich brauchst. Siehe auch: »Minimale Vorlage vs. maximale Probleme«

Gerade wenn man sich über sehr alte Dokumente (oder irgendwelche Vorlagen aus dem Netz) Infos besorgt, sollte man außerdem immer überprüfen, ob das so noch aktuell ist. Für Anfänger ist das zugegeben nicht immer so einfach, dass ein Blick in [d]l2tabu[/d] genügt. Gerade deshalb ist das Vorgehen der Verwendung alter Dokumente und Vorlagen insgesamt eher problematisch.

Wobei subfigure schon sehr lange veraltet ist und fancyhdr für KOMA-Script-Klassen noch nie wirklich empfohlen war. AFAIK wurde von KOMA-Script überhaupt nur ein eigenes Paket für Seitenstile angeboten, weil fancyhdr oder dessen Vorgänger fancyheadings nicht optimal mit KOMA-Script-Klassen zusammengearbeitet hat.

Lumbago
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Mo 5. Dez 2016, 20:14

Beitrag von Lumbago »

Hi,

eigentlich dachte ich heute Morgen, das Problem wäre gelöst. Ich bekomme bei kompilieren (mit Kile) folgende Fehlermeldung, wenn ich deinen Code einfach nur rauskopiere. Was läuft da falsch? Ich meine online macht er das was er soll, nur bei mir auf dem Rechner nicht. =(

Missing \endcsname inserted \csvloop{autosplittabular={i_u_tex.csv}}
! Incomplete \iffalse; all text was ignored after line 81.

Ich habe die Vermutung das es an autosplittabular liegt, aber ohne diese Option, "zerhackt" er die Tabelle nicht.

Vielen Dank noch mal für Deine Zeit.

Gast

Beitrag von Gast »

Wenn das unveränderte Beispiel bei dir nicht funktioniert, es aber im Online-Editor und bei mir mit aktuellen TeX-Live (gestern aktualisiert) funktioniert, würde ich mal darauf tippen, dass es bei dir an einer veralteten TeX-Distribution liegt.

Dass ohne autosplittabular nicht aufgeteilt wird, ist hingegen vollkommen klar. Schließlich habe ich das extra dafür definiert.

Antworten