Csvsimple \csvautotabular 和 \csvautobooktabular 具有居中列的内容

Csvsimple \csvautotabular 和 \csvautobooktabular 具有居中列的内容

我在用着csvsimple用于制作表格,以及csv自动制表csvautobooktabular效果很好。不过,我希望每列居中而不是左对齐。

使用答案csv自动制表和/或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 输出。

在此处输入图片描述

我想要获得所述输出,但每列的内容居中。


笔记

csv自动制表尝试显示特殊字符时给我带来了麻烦,但可以使用“尊重全部”选项解决。

例如

\csvautotabular[respect all]{table.csv}

或者使用@egreg 的自定义命令。

\csvautotabularcenter[respect all]{table.csv}

答案1

据我所知,没有规定改变列对齐方式;您可以通过模仿股票命令的\csvautotabular操作来生成不同的命令:csvsimple

\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 解决方案相比的缺点:

  • 如果要将其用于多个表,则需要更多整体代码

相关内容