tabularx 表格跨越两页并换行

tabularx 表格跨越两页并换行

我有一个简单使用的示例,tabularx如下所示。

\documentclass{article}
\usepackage{tabularx,lipsum}

    \begin{document}
    \lipsum[1-2]
    \begin{tabularx}{\linewidth}{lX}
      2001 & \lipsum[1]\\
      2003 &  \lipsum[2]\\
        2003 &  \lipsum[3]\\
      2004 &  \lipsum[4]\\
    \end{tabularx}
    \end{document}

但是,我希望表格能够跨越两页,同时还能换行。我查看了longtablelongtabu包中的一些示例,但无法解决这个问题。有没有一种简单的方法可以使用 tabularx 使表格流动。提前致谢!

答案1

在长表中,人们通常在每个表部分的顶部添加列标题以及重复标题和有关表延续的广告信息。这使每个包都支持长表,但是使用tabularray包添加它非常简单(并且使用简短的代码):

\documentclass{article}
\usepackage{microtype}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\usepackage{lipsum}

\begin{document}
\lipsum[1-2]
\begin{longtblr}[
caption = {My long table},
  label = {tab:longtblr?}
                ]{colspec = {lX[j]},
                  rowhead = {1},
                  row{1}  = {font=\bfseries, c}
                  }
    \toprule
 Year & Description \\
    \midrule
 2001 &  \lipsum[1] \\
 2003 &  \lipsum[2] \\
 2003 &  \lipsum[3] \\
 2004 &  \lipsum[4] \\
    \bottomrule
\end{longtblr}
\lipsum[1]
\end{document}

在此处输入图片描述

附录 使用“长表”时,您应该知道长表只能在页面之间拆分,只能在行之间拆分。这可能会导致表格下方的部分为空白(如 MWE 上方所示)。

就您而言,当您的表格更多地保留在列表中而不是表格中时,最好使用@Fran(+1)提供的解决方案或简单使用enumitem包:

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\begin{document}
\lipsum[1-2]
    \begin{itemize}[labelindent=0em,leftmargin=!]
\item[2001] \lipsum[1]
\item[2002] \lipsum[2]
\item[2003] \lipsum[3]
\item[2004] \lipsum[4]
    \end{itemize}
\lipsum[1-2]
\end{document}

在这种情况下,您的文档看起来会更美观:

在此处输入图片描述

答案2

你错过了更有价值的第二条评论。考虑检查\usepackage[showframe]{geometry}测试下的解决方案以了解问题。xltabular在这种情况下,该包不是好的解决方案,因为大而牢不可破的表格单元格通常会在页面底部产生可怕的间隙。

对于此内容,您可以使用更好的desclist、eqlist 或 enumitem列表,或者没有任何列表包,一个简单的宏就足够了:

\documentclass{article}
\usepackage{parskip,lipsum}
\newcommand\xyz[1]{\par\hangindent5em\makebox[5em][l]{#1}\ignorespaces}
\begin{document}
\lipsum[1-2]
\xyz{2001} \lipsum[1] 
\xyz{2002} \lipsum[2] 
\xyz{2003} \lipsum[3] 
\xyz{2004} \lipsum[4] 
\lipsum[1-2]
\end{document}

答案3

根据@DavidCarlisle给出的提示,只需替换为,即可很好地解决这个问题tabularxxltabular整个语法无需任何更改即可通过。我喜欢这个解决方案,因为它简单明了,真希望我早点知道xltabular

\documentclass{article}
\usepackage{xltabular,lipsum}

\begin{document}
\lipsum[1-2]
\begin{xltabular}{\linewidth}{lX}
  2001 & \lipsum[1]\\
  2003 &  \lipsum[2]\\
    2003 &  \lipsum[3]\\
  2004 &  \lipsum[4]\\
\end{xltabular}
\lipsum[1-2]

\end{document}

相关内容