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.
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 csvsimple
hace 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}
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}
Respuesta2
encontréel manualcasi incomprensible en su mayor parte. Pero menciona varias veces que normalmente no lo usarías \csvautotabular
ni \csvautobooktabular
en 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}
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