longtable 不必要地扩展到第二页

longtable 不必要地扩展到第二页

下面的代码显示了一个我认为很小但很烦人的错误。显示的长表延伸到第二页,但第二页上没有列,因此没有必要将长表延伸到第二页。

\documentclass[12pt,letterpaper]{article}
\usepackage{longtable}
\usepackage[verbose]{datatool}
\usepackage{array}
\usepackage{filecontents}
\usepackage[T1]{fontenc}
\usepackage{fouriernc}

\newcommand{\PrintTable}[2]{%
 % #1 = database
 % #2 =caption
  \begin{longtable}{c}
    \caption{#2}\\
    Col\\\hline\endhead
    \DTLforeach
    {#1}{%
      \Col=Col%
    }{%
      \Col \\
    }%
  \end{longtable}
}%

\begin{filecontents*}{foo.csv}
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
  foo,
\end{filecontents*}

\begin{document}
\IfFileExists{./foo.csv}{
\DTLloaddb[noheader,keys={Col,}]{DB}{foo.csv}
\PrintTable{DB}{Foo}
}{}

\end{document}

在此处输入图片描述 在此处输入图片描述

答案1

\\您将在 内以 结束每一行\DTLforeach。这意味着您将在最后一个之后执行代码\\,这样的代码很容易导致表格末尾出现空行。您可以使用 之类的序言来直观地展示问题{>{blub}c}。我建议将 移到开头,并使用来\\隐藏第一个:\\\DTLiffirstrow

\newcommand{\PrintTable}[2]{%
 % #1 = database
 % #2 =caption
  \begin{longtable}{>{blub}c}
    \caption{#2}\\
    Col\\\hline\endhead
    \DTLforeach
    {#1}{%
      \Col=Col%
    }{%
     \DTLiffirstrow{}{\\}%
     \Col
    }%
  \end{longtable}
}%

相关内容