Csvsimple \csvautotabular und \csvautobooktabular mit zentriertem Spalteninhalt

Csvsimple \csvautotabular und \csvautobooktabular mit zentriertem Spalteninhalt

Ich benutzecsvsimplefür die Herstellung von Tischen undcsvautotabularUndcsvautobooktabularfunktionieren super. Allerdings hätte ich gerne den Inhalt vonjede Spaltezentriert statt linksbündig auszurichten.

Eine Antwort mitcsvautotabularund/odercsvautobooktabularWenn möglich, wäre es besser, einfach eine Option hinzuzufügen.

Ich habe dies versucht, aber es gibt einen Fehler zurück.

\csvautotabular[tabular=c]{grade.csv}

\csvautobooktabular[tabular=c]{grade.csv}

Hier ist einMWE:

\documentclass[11pt,a4paper,oldfontcommands]{memoir}

\usepackage{csvsimple} % For csv importing.

% csv file from another question
\begin{filecontents*}{grade.csv}
name,givenname,matriculation,gender,grade
Maier,Hans,12345,m,1.0
Huber,Anna,23456,f,2.3
Weisbaeck,Werner,34567,m,5.0
\end{filecontents*}

\begin{document}
\csvautotabular{grade.csv}
\end{document}

Und die MWE-Ausgabe.

Bildbeschreibung hier eingeben

Ich möchte die besagte Ausgabe erhalten, aber mit dem Inhalt jeder Spalte zentriert.


Notiz

csvautotabularbereitete mir Probleme beim Anzeigen von Sonderzeichen, kann aber mit der Option „Alle respektieren“ gelöst werden.

z.B

\csvautotabular[respect all]{table.csv}

Oder mit dem benutzerdefinierten Befehl von @egreg.

\csvautotabularcenter[respect all]{table.csv}

Antwort1

Soweit ich das sehe, gibt es keine Möglichkeit, die Spaltenausrichtung in zu ändern \csvautotabular. Sie können einen anderen Befehl generieren, indem Sie csvsimpleden Standardbefehl nachahmen:

\documentclass[11pt,a4paper]{memoir}

\usepackage{csvsimple} % For csv importing.

\makeatletter
\csvset{
  autotabularcenter/.style={
    file=#1,
    after head=\csv@pretable\begin{tabular}{|*{\csv@columncount}{c|}}\csv@tablehead,
    table head=\hline\csvlinetotablerow\\\hline,
    late after line=\\,
    table foot=\\\hline,
    late after last line=\csv@tablefoot\end{tabular}\csv@posttable,
    command=\csvlinetotablerow},
}
\makeatother
\newcommand{\csvautotabularcenter}[2][]{\csvloop{autotabularcenter={#2},#1}}

% csv file from another question
\begin{filecontents*}{\jobname.csv}
name,givenname,matriculation,gender,grade
Maier,Hans,12345,m,1.0
Huber,Anna,23456,f,2.3
Weisbaeck,Werner,34567,m,5.0
\end{filecontents*}

\begin{document}
\csvautotabularcenter{\jobname.csv}
\end{document}

Bildbeschreibung hier eingeben

Eine Version mit \csvautobooktabularcenter:

\documentclass[11pt,a4paper,oldfontcommands]{memoir}

\usepackage{csvsimple} % For csv importing.

\makeatletter
\csvset{
  autotabularcenter/.style={
    file=#1,
    after head=\csv@pretable\begin{tabular}{|*{\csv@columncount}{c|}}\csv@tablehead,
    table head=\hline\csvlinetotablerow\\\hline,
    late after line=\\,
    table foot=\\\hline,
    late after last line=\csv@tablefoot\end{tabular}\csv@posttable,
    command=\csvlinetotablerow},
  autobooktabularcenter/.style={
    file=#1,
    after head=\csv@pretable\begin{tabular}{*{\csv@columncount}{c}}\csv@tablehead,
    table head=\toprule\csvlinetotablerow\\\midrule,
    late after line=\\,
    table foot=\\\bottomrule,
    late after last line=\csv@tablefoot\end{tabular}\csv@posttable,
    command=\csvlinetotablerow},
}
\makeatother
\newcommand{\csvautotabularcenter}[2][]{\csvloop{autotabularcenter={#2},#1}}
\newcommand{\csvautobooktabularcenter}[2][]{\csvloop{autobooktabularcenter={#2},#1}}

% csv file from another question
\begin{filecontents*}{\jobname.csv}
name,givenname,matriculation,gender,grade
Maier,Hans,12345,m,1.0
Huber,Anna,23456,f,2.3
Weisbaeck,Werner,34567,m,5.0
\end{filecontents*}

\begin{document}

\csvautotabularcenter{\jobname.csv}

\bigskip

\csvautobooktabularcenter{\jobname.csv}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

ich fanddas Handbuchgrößtenteils fast unverständlich. Aber es wird mehrmals erwähnt, dass man es normalerweise nicht verwenden würde \csvautotabularoder \csvautobooktabularin der Praxis.

Sie empfehlen die Verwendung von \csvreader. Hier ist ein minimaler Anwendungsfall von \csvreader, der für andere Personen (wie auch für mich) vorzuziehen sein kann.

\csvreader[
  tabular=|c|c|r|c|r|,
  table head=\hline \bfseries{Name} & \bfseries{Given Name} & \bfseries{Matriculation} & \bfseries{Gender} & \bfseries{Grade} \\\hline,
  late after last line=\\\hline % horizontal line at the end of the table
]{
  grade.csv
}{}{\csvlinetotablerow}

Tabelle mit verschiedenen Ausrichtungen

Vorteile gegenüber der Lösung von egreg:

  • Mehr Kontrolle über Tabellenüberschriften und Spaltenausrichtungen
  • Weniger Gesamtcode für eine einzelne Tabelle

Nachteile gegenüber der Lösung von egreg:

  • Mehr Gesamtcode, wenn Sie ihn für viele Tabellen verwenden möchten

verwandte Informationen