我有一张有很多列的表格,所以我要将其设置为横向。第一列是标题,所以我想在每一页上重复它。有办法吗?
答案1
我会试着找出问题所在。您有一个包含大量列但可能只有少量行的表,例如这个:
您尝试过旋转它,但它仍然无法放在一页中。因此,您想将表格拆分到几页中,并在每页中重复第一列,所有这些都是自动完成的。
不幸的是,没有包允许您重复第一列作为一种“标题”。longtable
包是最接近的,但它只允许第一个排用作标题(合理的选择)。
因此,第一个问题是,您能否转置表格,将文件转换为行,反之亦然?新的大表将如下所示(数字不同,因为我是随机生成的,但这并不重要):
首先,请注意,这样表格会更紧凑,因此更有可能将其放入单个页面中。但即使表格太大,您也可以让longtable
包负责拆分表格并重复标题,使用其他解决方案中提供的代码。这将给出:
但是,如果由于某种原因,您仍然需要标题是一列而不是一行(我无法想象为什么),那么您可以使用以下肮脏的技巧。使用longtable
与上一个示例相同的方法,但是每个单元格旋转 90 度这样表格看起来就像是“横向表格”,第一行看起来就像第一列。代码如下:
\documentclass{article}
\usepackage{longtable}
\usepackage{graphicx}
\usepackage{array}
\usepackage{fancybox}
\usepackage[a4paper, margin=3cm]{geometry}
\def\beginrotate{\begin{Sbox}}
\def\endrotate{\end{Sbox}\rotatebox{-90}{\TheSbox~~}}
\begin{document}\footnotesize
\newcolumntype{R}{>{\beginrotate}c<{\endrotate}}
\begin{longtable}{|R|R|R|R|R|R|R|}
\hline
\textbf{Foo} & \textbf{Bar} & \textbf{Foobar} & \textbf{Barfoo} &
\textbf{FooFoo} & \textbf{Barbar} & \textbf{Foobaz} \endhead\hline
\input{bigtable}
\\\hline
\end{longtable}
\end{document}
其中bigtable
有一个文件,其中包含一个有 30 行和 7 列的表的数据。其内容如下(为了完成 MWE):
0.6758 & 0.7150 & 0.6982 & 0.3166 & 0.9916 & 0.4469 & 0.6663\\\hline
0.5192 & 0.3351 & 0.1848 & 0.2907 & 0.9938 & 0.9485 & 0.8826\\\hline
0.8872 & 0.9911 & 0.5904 & 0.5111 & 0.8150 & 0.9460 & 0.6106\\\hline
0.6567 & 0.0251 & 0.0072 & 0.2924 & 0.0119 & 0.5548 & 0.8066\\\hline
0.8708 & 0.5457 & 0.6155 & 0.8238 & 0.5979 & 0.5184 & 0.9628\\\hline
0.1505 & 0.3449 & 0.8085 & 0.9886 & 0.5966 & 0.0804 & 0.4170\\\hline
0.6807 & 0.4711 & 0.6918 & 0.4803 & 0.7829 & 0.9600 & 0.1042\\\hline
0.8812 & 0.6242 & 0.7196 & 0.6065 & 0.3812 & 0.0360 & 0.0062\\\hline
0.2533 & 0.4434 & 0.5977 & 0.0679 & 0.7181 & 0.3089 & 0.9971\\\hline
0.3002 & 0.8496 & 0.0992 & 0.5157 & 0.3220 & 0.5868 & 0.9570\\\hline
0.1678 & 0.5196 & 0.6335 & 0.5228 & 0.2306 & 0.8910 & 0.4287\\\hline
0.6802 & 0.5555 & 0.3534 & 0.5206 & 0.1367 & 0.9867 & 0.8026\\\hline
0.7301 & 0.8947 & 0.5710 & 0.0133 & 0.4933 & 0.9754 & 0.1996\\\hline
0.8284 & 0.7035 & 0.3541 & 0.5774 & 0.4192 & 0.4091 & 0.5287\\\hline
0.9641 & 0.2976 & 0.2910 & 0.7979 & 0.5771 & 0.6541 & 0.8497\\\hline
0.2666 & 0.6168 & 0.4662 & 0.2921 & 0.4760 & 0.3647 & 0.8961\\\hline
0.4583 & 0.9469 & 0.4631 & 0.3696 & 0.5438 & 0.9070 & 0.4259\\\hline
0.4572 & 0.6667 & 0.5216 & 0.4976 & 0.2914 & 0.7089 & 0.0738\\\hline
0.6888 & 0.5940 & 0.8692 & 0.0071 & 0.5753 & 0.3133 & 0.4880\\\hline
0.6797 & 0.4619 & 0.3415 & 0.8531 & 0.6565 & 0.4343 & 0.3206\\\hline
0.2041 & 0.6366 & 0.5736 & 0.5109 & 0.6069 & 0.3847 & 0.0896\\\hline
0.8915 & 0.4274 & 0.3350 & 0.4032 & 0.4010 & 0.9764 & 0.7961\\\hline
0.0209 & 0.7044 & 0.5719 & 0.9619 & 0.5674 & 0.2458 & 0.5487\\\hline
0.7091 & 0.8960 & 0.1819 & 0.4002 & 0.4607 & 0.3069 & 0.5067\\\hline
0.1857 & 0.8420 & 0.7223 & 0.7178 & 0.6437 & 0.7449 & 0.6483\\\hline
0.4034 & 0.9813 & 0.0288 & 0.6326 & 0.7765 & 0.6866 & 0.5010\\\hline
0.3131 & 0.3296 & 0.6957 & 0.9979 & 0.3438 & 0.6381 & 0.6289\\\hline
0.7243 & 0.0523 & 0.7895 & 0.7588 & 0.3630 & 0.3918 & 0.9185\\\hline
0.7184 & 0.6831 & 0.5795 & 0.8660 & 0.2125 & 0.3705 & 0.5142\\\hline
0.9295 & 0.6789 & 0.8640 & 0.6584 & 0.1385 & 0.8579 & 0.1618
结果如下:
更新
另一个疯狂的想法。你可以将我最后提出的解决方案封闭到一个landscape
环境中,这样表格就会再次逆时针旋转 90 度,看起来是纵向的,第一列的效果在每一页中重复:
\documentclass{article}
\usepackage{longtable,lscape}
\usepackage{graphicx}
\usepackage{array}
\usepackage{fancybox}
\usepackage[a4paper, margin=3cm]{geometry}
\def\beginrotate{\begin{Sbox}}
\def\endrotate{\end{Sbox}\rotatebox{-90}{\TheSbox~~}}
\begin{document}\footnotesize
\newcolumntype{R}{>{\beginrotate}c<{\endrotate}}
\begin{landscape}
\begin{longtable}{|R|R|R|R|R|R|R|}
\hline
\textbf{Foo} & \textbf{Bar} & \textbf{Foobar} & \textbf{Barfoo} &
\textbf{FooFoo} & \textbf{Barbar} & \textbf{Foobaz} \endhead\hline
\input{bigtable}
\\\hline
\end{longtable}
\end{landscape}
\end{document}
结果是三页。结果就像是把这个答案顶部的表格切成三块,并且在每个块上重复第一列。
答案2
假设您确实想重复第一行:
\usepackage{lscape,longtable}
.....
\begin{landscape}
\begin{longtable}{cccc}
head1&head2&head3&head4&head5
\endhead
....
\end{longtable}
\end{landscape}
答案3
不幸的是,您的问题中没有太多信息。举个例子会很有用。无论如何,我的方法如下。让我们知道为什么它不起作用。
\documentclass{amsart}
\usepackage{etoolbox}
\newcounter{hcCounter}[page]
\newcommand{\hcStart}{\stepcounter{hcCounter}\ifnumequal{\value{hcCounter}}{1}{Uno}{\ifnumequal{\value{hcCounter}}{2}{Dos}{\arabic{hcCounter}}}&}
\begin{document}
\begin{tabular}{ l c r }
\hcStart 2 & 3 \\
\hcStart 5 & 6 \\
\hcStart 8 & 9 \\
\hcStart 11 & 12 \\
\end{tabular}
\newpage
\begin{tabular}{ l c r }
\hcStart a & b \\
\hcStart c & d \\
\hcStart e & f \\
\end{tabular}