Csvsimple \csvautotabular y \csvautobooktabular con contenido de columnas centradas

Csvsimple \csvautotabular y \csvautobooktabular con contenido de columnas centradas

Estoy usandocsvsimplepara hacer mesas, ycsvautotabularycsvautobooktabularestán funcionando muy bien. Sin embargo, me gustaría el contenido decada columnaestar centrado en lugar de alineado a la izquierda.

Una respuesta usandocsvautotabulary/ocsvautobooktabularSe preferiría simplemente agregar una opción, si es posible.

Intenté esto, pero devuelve un error.

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

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

Aquí está unMWE:

\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}

Y la salida MWE.

ingrese la descripción de la imagen aquí

Quiero obtener dicho resultado, pero con el contenido de cada columna centrado.


Nota

csvautotabularMe dio problemas al intentar mostrar caracteres especiales, pero se puede solucionar usando la opción "respetar a todos".

p.ej

\csvautotabular[respect all]{table.csv}

O con el comando personalizado de @egreg.

\csvautotabularcenter[respect all]{table.csv}

Respuesta1

Por lo que puedo ver, no existe ninguna disposición para cambiar la alineación de las columnas \csvautotabular; puedes generar un comando diferente imitando lo que csvsimplehace el comando estándar:

\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}

ingrese la descripción de la imagen aquí

Una versión con \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}

ingrese la descripción de la imagen aquí

Respuesta2

encontréel manualcasi incomprensible en su mayor parte. Pero menciona varias veces que normalmente no lo usarías \csvautotabularni \csvautobooktabularen la práctica.

Sugieren usar \csvreader. A continuación se muestra un caso de uso mínimo de \csvreader, que puede ser preferible para otras personas (como lo fue para mí).

\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}

Mesa con varias alineaciones.

Pros vs solución de egreg:

  • Más control sobre la alineación de encabezados y columnas de tablas
  • Menos código general para una sola tabla

Contras vs solución de egreg:

  • Más código general si lo vas a utilizar para muchas tablas

información relacionada