LaTeX中换行换页的表格

LaTeX中,表格一般用tabular。如果要表格内容自动换行,则需要使用tabularx宏包。在使用时,指定表格宽度和可能换行的列,例如:

\usepackage{tabularx}

\begin{tablularx}{\textwidth}{lX}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

其中,由X指定的第二列就会根据表格中单元格的宽度自动换行了。

由于表格只是一个box,只能出现在同一页内。要使得表格能够换页,需要使用longtable宏包。例如:

\usepackage{longtable}

\begin{longtable}{ll}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

如果希望两者兼得,该怎么办?有一个叫做ltxtable的宏包就综合了上述两个,能实现既有单元格换行,又有表格换页。比较麻烦的是,ltxtable要求表格内容单独保存为文件,为此再引入filecontents宏包,使表格内容和正文能在同一个文件之中。例如:

\usepackage{ltxtable, filecontents}

\begin{filecontents}{mytable1.tex}
  \begin{longtable}{lX}
    aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
  \end{longtable}
\end{filecontents}

\LTXtable{\textwidth}{mytable1}

其中,filecontents宏包会将其中的内容单独保存为mytable1.tex文件。在这个文件中,longtable可以使用tabularx中的X符号指定要换行的单元格了。此后,调用ltxtable的LTXtable命令,指定表格宽度为\textwidth,并指定引用文件mytable1。这样就可以编译得到单元格内换行、整个表格可换页的表格了。

这里还有两个问题:

1、标题、标签怎么办?这个我还没有查到,尝试放在filecontents中会出错,在ltxtable的文档里也没有。如果有大牛看到这里知道该怎么办,请指教~

2、多出来的tex文件在版本管理里不好办,我的方法是,在filecontents里指定文件为mytable1.tmp而不是.tex后缀名;在LTXtable命令里使用文件全写mytable1.tmp而不是缩写;在.gitignore里忽略以.tmp结尾的临时文件;在Makefile的clean目标里删除.tmp结尾的文件即可。

除了使用ltxtable,还有两个宏包可以解决问题:ltablex和tabu。在stackoverflow上对此有过讨论。据说ltablex和caption会有冲突,但这两个我都没有用过。

最后,所有尝试都是在写amatutor的过程中产生的,欢迎大家继续关注这个项目~

One thought on “LaTeX中换行换页的表格

  1. 王青水

    \usepackage{ltxtable, filecontents}
    \begin{filecontents}{mytable1.tex}
    \begin{longtable}{lX}
    aa & bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb \\
    \end{longtable}
    \end{filecontents}
    \LTXtable{\textwidth}{mytable1}
    怎样做到自动换行?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *