带有 longtable 的数据工具

带有 longtable 的数据工具

longtable我有一个包含多行的 CSV 文件。我想使用和包将这些行排版到表格中datatool

  1. 然而就在“最后一脚”之前(它说总结) 我得到了一个不需要的空行。如何删除该多余的行?
  2. 日期下方的列间距不均匀。有人能帮我把它们间距弄均匀吗?

我给出了示例代码。我的 CSV 文件的名称是namelist.csv,它看起来像这样。

    number,degree,Name
    1,Dr,Abdul Ali
    2,Mrs,Francesca Joestar
    3,Mr,Chan Ker Mei
    4,Dr,Hikaru Yagami
    5,Dr,Harish Kumar

我的 LaTeX 代码如下。

\documentclass[12pt]{article}
\usepackage{setspace}
\usepackage{bookman}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage[a4paper,left=1in,right=0.8in,top=0.5in,bottom=0.5in]{geometry}
\usepackage{tgschola}
\usepackage{microtype}
\usepackage{datatool}
\DTLloaddb{names}{namelist.csv}
%==================================================================
\begin{document}
%
\begin{landscape}
%
\doublespacing
%
\begin{longtable}{|l|l|c|c|r|r|r|c|c|c|c|c|c|c|c|c|c|c|}\hline
%
No.&\multicolumn{1}{c|}{Name}& \multicolumn{2}{c|}{13.12.2010}&  
\multicolumn{2}{c|}{14.12.2010}&\multicolumn{2}{c|}{15.12.2010}&
\multicolumn{2}{c|}{16.12.2010}
&\multicolumn{2}{c|}{17.12.2010}&\multicolumn{2}{c|}{18.12.2010}
&\multicolumn{2}{c|}{19.12.2010} &\multicolumn{2}{c|}{20.12.2010}\\ \hline\hline
\endfirsthead
%
\multicolumn{18}{c}%
{{\bfseries  Continued from previous page}} \\
\hline
%
No.&\multicolumn{1}{c|}{Name}& \multicolumn{2}{c|}{13.12.2010}&
\multicolumn{2}{c|}{14.12.2010}&\multicolumn{2}{c|}{15.12.2010}& 
\multicolumn{2}{c|}{16.12.2010}
&\multicolumn{2}{c|}{17.12.2010}&\multicolumn{2}{c|}{18.12.2010}
&\multicolumn{2}{c|}{19.12.2010} &\multicolumn{2}{c|}{20.12.2010}\\ \hline\hline
\endhead
%
\hline \multicolumn{18}{|r|}{{Continued on next page}} \\ \hline
\endfoot
%
\hline
\multicolumn{18}{|r|}{{Concluded}} \\ \hline
\endlastfoot
%
\DTLforeach{names}{
\no=number, \dg=degree, \name=Name}{
\no& \dg. \name &  & &  & &  & &  &
&  &  &  &  &  &  &  & \\ \hline
}
\end{longtable}%
%
\end{landscape}
%
\end{document}

代码输出

答案1

\DTLforeach使用时,\hline通常最好使用以下示意图结构,将\\和放在\hline每个非初始行的开头而不是每行的结尾。

\DTLforeach{<database>}{<assignments>}{%
\DTLiffirstrow{}{\\\hline}

 rest of table with no final \\
}

对于第二个问题,可能有不同的解决方案,但最简单的方法可能是使用固定列宽。如果单元格始终为空白,则只需一p{2em}列即可;如果您随后要在单元格中插入居中文本,则需要一个稍微复杂一些的版本,这就是我在示例中使用的版本。

使用该array包,我定义了一个C列:

\newcolumntype{C}{>{\centering\arraybackslash}p{2em}}

并以此作为主要柱子的基础c

因此对于您的代码具体来说:

\documentclass[12pt]{article}
\usepackage{setspace}
\usepackage{longtable,array}
\usepackage{pdflscape}
\usepackage[a4paper,left=1in,right=0.8in,top=0.5in,bottom=0.5in]{geometry}
\usepackage{datatool}
\DTLloaddb{names}{namelist.csv}
%==================================================================
\begin{document}
%
\begin{landscape}
%
\doublespacing
%
\newcolumntype{C}{>{\centering\arraybackslash}p{2em}} % THIS COMMAND ADDED
\begin{longtable}{|r|l|C|C|C|C|C|C|C|C|C|C|C|C|C|C|C|C|} % THIS COMMAND CHANGED
\hline
%
No.&\multicolumn{1}{c|}{Name}& \multicolumn{2}{c|}{13.12.2010}&  
\multicolumn{2}{c|}{14.12.2010}&\multicolumn{2}{c|}{15.12.2010}&
\multicolumn{2}{c|}{16.12.2010}
&\multicolumn{2}{c|}{17.12.2010}&\multicolumn{2}{c|}{18.12.2010}
&\multicolumn{2}{c|}{19.12.2010} &\multicolumn{2}{c|}{20.12.2010}\\ \hline\hline
\endfirsthead
%
\multicolumn{18}{c}%
{{\bfseries  Continued from previous page}} \\
\hline
%
No.&\multicolumn{1}{c|}{Name}& \multicolumn{2}{c|}{13.12.2010}&
\multicolumn{2}{c|}{14.12.2010}&\multicolumn{2}{c|}{15.12.2010}& 
\multicolumn{2}{c|}{16.12.2010}
&\multicolumn{2}{c|}{17.12.2010}&\multicolumn{2}{c|}{18.12.2010}
&\multicolumn{2}{c|}{19.12.2010} &\multicolumn{2}{c|}{20.12.2010}\\ \hline\hline
\endhead
%
\hline \multicolumn{18}{|r|}{{Continued on next page}} \\ \hline
\endfoot
%
\hline
\multicolumn{18}{|r|}{{Concluded}} \\ \hline
\endlastfoot
%
\DTLforeach{names}{%
\no=number, \dg=degree, \name=Name}{%
\DTLiffirstrow{}{\\\hline}  % THIS LINE HAS BEEN ADDED
\no& \dg. \name & & &  & &  & &  &
&  &  &  &  &  &  &  & % THIS LINE HAS BEEN CHANGED
}
\end{longtable}%
%
\end{landscape}
%
\end{document} 

代码输出

答案2

LT 中的空白行很可能是\\某个地方的伪造行。从您的描述来看,不清楚它是在表格底部作为空白的第一行,还是在表格主体中作为空白的最后一行,这些在输出中可能看起来相同,但在源代码中当然是完全分开的。

答案3

不要忘记在这行中添加 %。这与下面这一行有所不同

\DTLiffirstrow{}{\\\hline}  

\DTLiffirstrow{}{\\\hline}  % THIS LINE HAS BEEN ADDED

如果您将第一行添加到表格中,有时会发生意外行为。数据库的第一个条目将在第 1 列、第 1 行添加一个空格。

如果您添加第二行(特别是您至少应该添加%符号),那么这种行为将被阻止。

这只是我因为这个案例而发现的附加信息。我记住了这个条目以防这个命令,并想将此信息提交给社区。

相关内容