Csvsimple \csvautotabular e \csvautobooktabular com conteúdo de colunas centralizadas

Csvsimple \csvautotabular e \csvautobooktabular com conteúdo de colunas centralizadas

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.

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

Responder2

eu encontreio manualquase incompreensível na maior parte. Mas menciona várias vezes que você normalmente não usaria \csvautotabularou \csvautobooktabularna 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}

Mesa com vários alinhamentos

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

informação relacionada