我正在尝试为我大学的数学论文编写一个 latex 模板,并且我已经将大部分格式内置到相应的类文件中。但是,我不确定如何解决的一个问题是他们对表格的要求。它们需要是全文本宽度(我使用 tabularx 环境可以很好地实现),有专用的标题(这很容易),并且有标题/标签(同样,不是太难)。我遇到麻烦的部分是:如果表格延伸到当前页面之外,则应该将其拆分并在下一页继续,并引用表格的标题并附加“继续”,需要重新陈述标题,然后继续表格。到目前为止,以下是我构建宏的一般想法:
\documentclass{article}
\usepackage{tabularx}
\newcommand{\dissertationTable}[5]{
\begin{table}
\centering
\caption{#4}
\begin{tabularx}{\textwidth}{#1}
#2\\ \hline% This is the header line
#3\\ \hline% This is the body of the table,
% which should include all the relevant line breaks etc.
\end{tabularx}
\label{#5}
\end{table}
}
\begin{document}
\dissertationTable{lXX}{These & Are & Headings}{These are & some rows& to see\\ how it & works & and to\\ demonstrate & how to & enter info.}{Some Table}{tableref}
\end{document}
上面的代码可以很好地制作表格,#2
如果我可以检测到分页符,我可以重复使用参数来重新打印标题,并使用参数中的标签#5
来引用名称(或者直接使用#4标题)并附加“继续”。但我不确定如何自动检测分页符。我在尝试将整个标题设为粗体文本而不将任何内容设为粗体文本时也遇到了问题;对齐标签似乎破坏了命令的范围\bfseries
。
我对此进行了更全面的研究,并看到了longtable
包和/或tabu
包,但我似乎无法正确理解语法以获得我想要的东西。我很确定该tabu
包能够完成我想要的大部分/所有事情,我可能只是笨手笨脚,但我无法让它编译出一个基本表而不出错,所以我做了一件蠢事。
不管是使用 tabu 还是某些巧妙的宏,我的目标都是生成某种命令或环境,尽可能隐藏所需的格式(大多数使用此模板的学生对 TeX 的了解非常有限,因此他们需要了解的越少越好)。理想情况下,我会使用某种东西来检测对齐字符的数量,并允许我在命令本身内设置左/右对齐字符,而不是要求学生这样做(例如,上面 MWE{lXX}
中的第一个参数 ; )。
因此,如果有人能帮我解释 longtable/tabu 的语法,或者解释如何检测分页符以便我自己执行这样的命令,我将不胜感激。如果有一种很好的方法可以预先格式化表格以对齐每列,而无需知道有多少列,那就太好了。
谢谢!
答案1
longtabu
使用具有重复页眉和页脚的表格的示例:
\documentclass[11pt]{book}
\usepackage[a4paper,showframe]{geometry}
\usepackage{longtable, tabu}
\tabulinesep = ^2mm_2mm
\usepackage[skip=1ex]{caption}
\usepackage{lipsum}
\begin{document}
\begin{longtabu} to \linewidth { l X[1,l] X[1,l]}
\caption{Some table}
\label{tablere} \\
\tabucline [1pt] -
These & Are & Headings \\
\tabucline -
\endfirsthead
%---------------------------------------------------------------%
\caption{Some table \hfill(continued)} \\
\tabucline [1pt]-
These & Are & Headings \\
\tabucline -
\endhead
%---------------------------------------------------------------%
\multicolumn{3}{r}{\footnotesize\textit{continued on the next page}}
\endfoot
\tabucline [1pt]-
\endlastfoot
%---------------------------------------------------------------%
% table body
\everyrow{\tabucline - }
first row & \lipsum*[2] & \lipsum*[2] \\
% \midrule
second row & \lipsum*[13] & \lipsum*[13] \\
% \midrule
third row & \lipsum*[23] & \lipsum*[23] \\
% \midrule
forth row & \lipsum*[32] & \lipsum*[32] \\
% \midrule
fifth row & \lipsum*[42] & \lipsum*[43] \\
\end{longtabu}
\end{document}
笔记:
- 对于表格的最终形式,该文件必须至少编译两次
- 使用的表格
longtable
和longtabu
(以及其他表格)只能在行之间而不是行内进行分页。因此,在较长的单元格内容下,表格的某些部分下方可能会出现空白 - (编辑)对于使用
longtabe
来自包,tabu
您应该知道,这个包仍然损坏。请参阅@Ulrike Fischer 在答案下方的评论。 tabularx
适用于(短)表格(通常包含在table
浮动环境中),可以放在一页上tabularx
可以使用以下包扩展为长表ltablex
:\documentclass[11pt]{book} \usepackage[a4paper,showframe]{geometry} \usepackage{booktabs,ltablex} % <--- \keepXColumns \usepackage[skip=1ex]{caption} \usepackage{lipsum} \begin{document} \begin{tabularx}{\linewidth}{ l X X} \caption{Some table} \label{tablere} \\ \toprule These & Are & Headings \\ \midrule \endfirsthead %---------------------------------------------------------------% \caption{Some table \hfill(continued)} \\ \toprule These & Are & Headings \\ \midrule \endhead %---------------------------------------------------------------% \multicolumn{3}{r}{\footnotesize\textit{continued on the next page}} \endfoot \bottomrule \endlastfoot %---------------------------------------------------------------% % table body first row & \lipsum*[2] & \lipsum*[2] \\ \midrule second row & \lipsum*[13] & \lipsum*[13] \\ \midrule third row & \lipsum*[23] & \lipsum*[23] \\ \midrule forth row & \lipsum*[32] & \lipsum*[32] \\ \midrule fifth row & \lipsum*[42] & \lipsum*[43] \\ \end{tabularx} \end{document}
结果与以前类似。有关设置长表的更多详细信息,请阅读您使用的包的文档。