帶有居中列內容的 Csvsimple \csvautotabular 和 \csvautobooktabular

帶有居中列內容的 Csvsimple \csvautotabular 和 \csvautobooktabular

我在用著簡單的csv用於製作桌子,以及csv自動表格csv自動書籍表格工作得很好。不過,我想要的內容是每列居中而不是左對齊。

答案使用csv自動表格和/或csv自動書籍表格如果可能的話,最好簡單地添加一個選項。

我嘗試了這個,但它返回一個錯誤。

\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;中的列對齊方式。您可以透過模仿csvsimplestock 指令的操作來產生不同的指令:

\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的解決方案:

  • 如果您要將其用於許多表,則需要更全面的程式碼

相關內容