我在用着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 解决方案相比的缺点:
- 如果要将其用于多个表,则需要更多整体代码