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的过程中产生的,欢迎大家继续关注这个项目~