我一直在尝试修复表格的列宽,以便文本自动扭曲到下一行,而不会超出页面。经过几天的搜索,作为 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},