使用 \csvautobooklongtable 导入的表格的分隔线(水平和垂直)

使用 \csvautobooklongtable 导入的表格的分隔线(水平和垂直)

我一直在尝试修复表格的列宽,以便文本自动扭曲到下一行,而不会超出页面。经过几天的搜索,作为 Latex 的新手,我找到了这个问题的第一个答案: csvautobooklongtable 中的自动换行符 虽然它确实解决了问题,但我无法让分隔线出现在表格中。我尝试使用late after line=\\\hline例如,但它不起作用。我有点疯了。这是我当前的代码:

\usepackage{array,booktabs,longtable,csvsimple,tabularx}
\makeatletter
\csvset{
  my column width/.style={after head=\csv@pretable\begin{longtable}{*{\csv@columncount}{p{#1}}}\csv@tablehead},
}
\makeatother
\begin{document}
\csvautobooklongtable[separator=comma, respect all,
  my column width=3cm, ]{NewTextDocument.csv}
\end{document}

如果有其他替代方法,\csvreader我也会接受。为了清楚起见,我也尝试了以下代码:

\csvreader[longtable=|c|c|c|l|,my column width=2cm,
  no head, column count=4,
  table head=\hline,
  late after line=\\\hline,
   late after last line=\\\hline]
  {NewTextDocument.csv}{}
{\csvlinetotablerow}

但是我的最后一列有很多文本,并且超出了页面范围,而不是将行扩展到另一行。如果我在同一代码中使用tabular而不是,也会发生同样的情况longtable。PS:我试图避免类似的事情,因为tabularx当我尝试使用此代码时它根本没有编译:

\begin{tabularx}{\linewidth}{llXX}\toprule
\csvreader[no head,late after line=\\\midrule,late after last line=\\\bottomrule]
  {NewTextDocument.csv}

  {\csvcoli & \csvcolii & \csvcoliii & \csvcoliv}
\end{tabularx}

答案1

有两种可能性,以下代码均提供了这两种可能性:

\documentclass{article}
\usepackage{array,booktabs,longtable,csvsimple}

\usepackage{filecontents}

\begin{filecontents*}{NewTextDocument.csv}
name,job,age,profile
John,student,21,John has always been a very diligent student his marks always being among the best
Frederik,student,18,Frederik has not been a very diligent student
Johnson,professor,49,Johnson is just a professor ...
\end{filecontents*}

\makeatletter
\csvset{
 my first column width/.style={after head=\csv@pretable\begin{longtable}{*{\csv@columncount}{p{#1}}}\csv@tablehead},
 my second column width/.style={after head=\csv@pretable\begin{longtable}{|*{\csv@columncount}{p{#1}|}}\csv@tablehead},
}
\makeatother

\begin{document}

\csvautobooklongtable[
 separator=comma, 
 my first column width=3cm, 
 late after line={\\\midrule},
 late after last line={\end{longtable}}
]{NewTextDocument.csv}

\csvautobooklongtable[
 separator=comma, 
 my second column width=3cm, 
 table head={\hline\csvlinetotablerow\\\hline},
 late after line={\\\hline},
 late after last line={\\\hline\end{longtable}}
]{NewTextDocument.csv}

\end{document}

如果您使用booktabs包,请考虑使用\midrule而不是\hline。通常不鼓励在表格中使用垂直线。但毕竟,这是您的决定。

使用上述代码,表格将如下所示:

在此处输入图片描述

不过,我不确定你说的“文字超出页面范围”是什么意思。也许你的文字比我的例子长得多……但如果不了解这一点,就很难想出其他解决方案。


编辑

要排版粗体和居中的列标题,请使用以下条目\csvautobooklongtable(这仅适用于四列):

table head={\hline\multicolumn{1}{c}{\bfseries\csvcoli} & \multicolumn{1}{c}{\bfseries\csvcolii} & \multicolumn{1}{c}{\bfseries\csvcoliii} & \multicolumn{1}{c}{\bfseries\csvcoliv}\\\hline},

相关内容