
Ich möchte das Paket verwenden, datatool
um CSV-Dateien zu lesen und sie in LaTeX-Tabellen zu zerlegen. Außerdem möchte ich es verwenden, siunitx
um die Zahlen aus der CSV-Datei zu formatieren. Sehen Sie sich das folgende Beispiel an:
\documentclass{article}
\usepackage{datatool}
\usepackage{siunitx}
\usepackage[table]{xcolor}
\usepackage{colortbl}
%% table data
\begin{filecontents*}{scientists.csv}
name,surname,age,IQ
Albert,Einstein,133,210.12
Marie,Curie,145,220.12
\end{filecontents*}
%%% table design
\colorlet{tableheadcolor}{black!60}
\newcommand\tableheadfont{
\sffamily\bfseries
\slshape
\color{white}
}
\begin{document}
\DTLloaddb{table}{scientists.csv}
\sisetup{round-mode=places,
table-number-alignment = center-decimal-marker
}
\rowcolors{1}{gray!15}{white!100}
\begin{table}
\begin{tabular}{l
l
S[table-format = 3.0 ,round-precision=0]
S[table-format = 3.2 ,round-precision=2]
@{}l}
\rowcolor{tableheadcolor}
\tableheadfont name & \tableheadfont surname & \tableheadfont age & \tableheadfont iq & \tabularnewline
\hline
\DTLforeach*{table}%
{\name=name, \surname=surname, \age=age, \iq=IQ}%
{\DTLiffirstrow{}{\tabularnewline}%
\name & \surname & \age & \iq &
}
\end{tabular}
\end{table}
\end{document}
Die letzte Spalte enthält einen numerischen Wert, der mit (S-Spalte) formatiert werden soll siunitx
. Deshalb musste ich eine leere Zeile anhängen (siehetabellarisch, siunitx und Eingabe – „Zusätzliches } oder vergessenes $.“für Details).
hier ist das Ergebnis:
Diese Lösung weist zwei Probleme auf:
- aufgrund der farbigen Überschrift ist die letzte Überschriftenzelle nicht vollständig (das q fehlt)
- der „Albert“ in der ersten Datenzelle wird nach rechts verschoben.
Weiß jemand, wie ich diese Probleme lösen kann?
Antwort1
Beides einfache Probleme. Die falsche Platzierung von „Albert“ ist wie in einem Kommentar erwähnt auf ein fehlendes zurückzuführen %
:
\DTLiffirstrow{}{\tabularnewline}%
Das seltsame Verhalten mit dem q
wird dadurch verursacht, dass es & \tabularnewline
am Ende der Kopfzeile steht, wodurch Dinge falsch platziert werden. Versuchen Sie es stattdessen einfach mit \\
:
\documentclass{article}
\usepackage{datatool}
\usepackage{siunitx}
\usepackage{xcolor}
\usepackage{colortbl}
%% table data
\begin{filecontents*}{scientists.csv}
name,surname,age,IQ
Albert,Einstein,133,210.12
Marie,Curie,145,220.12
\end{filecontents*}
%% table design
\colorlet{tableheadcolor}{black!60}
\newcommand\tableheadfont{%
\sffamily\bfseries
\slshape
\color{white}
}
\begin{document}
\DTLloaddb{table}{scientists.csv}
\sisetup{round-mode=places,
table-number-alignment = center-decimal-marker
}
\begin{tabular}{l
l
S[table-format = 3.0 ,round-precision=0]
S[table-format = 3.2 ,round-precision=2]
@{}l}
\rowcolor{tableheadcolor}
\tableheadfont name & \tableheadfont surname & \tableheadfont age & \tableheadfont the long iq \\
\hline
\DTLforeach*{table}%
{\name=name, \surname=surname, \age=age, \iq=IQ}%
{\DTLiffirstrow{}{\tabularnewline}%
\name & \surname & \age & \iq &
}
\end{tabular}
\end{document}