estou a usarcsvsimplespara fazer mesas ecsvautotabularecsvautobooktabularestão funcionando muito bem. No entanto, gostaria que o conteúdo decada colunaser centralizado em vez de alinhado à esquerda.
Uma resposta usandocsvautotabulare/oucsvautobooktabularsimplesmente adicionar uma opção seria preferível, se for possível.
Eu tentei isso, mas ele retorna um erro.
\csvautotabular[tabular=c]{grade.csv}
\csvautobooktabular[tabular=c]{grade.csv}
Aqui está umMWE:
\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}
E a saída MWE.
Quero obter essa saída, mas com o conteúdo de cada coluna centralizado.
Observação
csvautotabularme deu problemas ao tentar exibir caracteres especiais, mas pode ser resolvido usando a opção 'respeitar todos'.
por exemplo
\csvautotabular[respect all]{table.csv}
Ou com o comando personalizado do @egreg.
\csvautotabularcenter[respect all]{table.csv}
Responder1
Pelo que posso ver, não há previsão para alterar o alinhamento das colunas \csvautotabular
; você pode gerar um comando diferente imitando o csvsimple
que faz o comando stock:
\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}
Uma versão com \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}
Responder2
eu encontreio manualquase incompreensível na maior parte. Mas menciona várias vezes que você normalmente não usaria \csvautotabular
ou \csvautobooktabular
na prática.
Eles sugerem usar \csvreader
. Aqui está um caso de uso mínimo de \csvreader
, que pode ser preferível para outras pessoas (como foi para mim).
\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}
Solução Prós vs egreg:
- Mais controle sobre o cabeçalho da tabela e alinhamentos de colunas
- Menos código geral para uma única tabela
Solução contras vs egreg:
- Código mais geral se você for usá-lo para muitas tabelas