Csvsimple \csvautotabular и \csvautobooktabular с центрированным содержимым столбцов

Csvsimple \csvautotabular и \csvautobooktabular с центрированным содержимым столбцов

я используюcsvsimpleдля изготовления столов иcsvautotabularиcsvautobooktabularотлично работают. Однако, я хотел бы, чтобы содержаниекаждый столбецбыть выровнен по центру, а не по левому краю.

Ответ с использованиемcsvautotabularи/илиcsvautobooktabularБыло бы предпочтительнее просто добавить опцию, если это возможно.

Я попробовал это сделать, но возникла ошибка.

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

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

ВотМВЭ:

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

И выход MWE.

введите описание изображения здесь

Я хочу получить указанный вывод, но с содержимым каждого столбца, отцентрированным.


Примечание

csvautotabularУ меня возникли проблемы с отображением специальных символов, но их можно решить с помощью опции «уважать все».

например

\csvautotabular[respect all]{table.csv}

Или с помощью специальной команды @egreg.

\csvautotabularcenter[respect all]{table.csv}

решение1

Насколько я могу судить, в . не предусмотрено изменение выравнивания столбцов \csvautotabular; вы можете сгенерировать другую команду, повторив то, что csvsimpleделает команда 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}

введите описание изображения здесь

Версия с \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}

введите описание изображения здесь

решение2

я нашелруководствопочти непонятно по большей части. Но упоминается несколько раз, что вы обычно не используете \csvautotabularили \csvautobooktabularна практике.

Они предлагают использовать \csvreader. Вот минимальный вариант использования \csvreader, который может быть предпочтительнее для других людей (как это было для меня).

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

Таблица с различными выравниваниями

Плюсы против решения egreg:

  • Больше контроля над выравниванием заголовков и столбцов таблиц
  • Меньше общего кода для одной таблицы

Минусы против решения egreg:

  • Более общий код, если вы собираетесь использовать его для многих таблиц

Связанный контент