LaTeX's Datatool-Paket zusammen mit siunitx

LaTeX's Datatool-Paket zusammen mit siunitx

Ich möchte das Paket verwenden, datatoolum CSV-Dateien zu lesen und sie in LaTeX-Tabellen zu zerlegen. Außerdem möchte ich es verwenden, siunitxum 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: Bildbeschreibung hier eingeben

Diese Lösung weist zwei Probleme auf:

  1. aufgrund der farbigen Überschrift ist die letzte Überschriftenzelle nicht vollständig (das q fehlt)
  2. 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 qwird dadurch verursacht, dass es & \tabularnewlineam 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}

verwandte Informationen