目录
1 Latex跨页表格
2 LaTeX使用笔记:长表格longtable(附实例)
2.1. 一个简单实例
2.2. 重复表头、表尾
2.3. 适应页面宽度
2.3.1 改变字体大小
2.3.2 缩小列间的间距
2.3.3 调整表格边缘
2.3.4 多行显示
2.3.5 纵向显示
3 How to solve longtable is not in 1-column mode error?
3.1 longtable doesn't work well with twocolumn. But you can use supertabular. Here is an example:
3.2 As suggested by egreg, xtab is another choice. xtab is built on supertabular while avoiding its weaknesses.
3.3 If you still want to stick to longtable (e.g. because you are generating LaTeX through pandoc) you could redefine the \longtable command.
3.4 Another option, not covered in the previous answers, is to force single column mode along with a \clearpage before your longtable and then reset it to two column mode after. This would look like
转载于 https://blog.csdn.net/lishoubox/article/details/7268858
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{CJK}
\usepackage{longtable}
\begin{document}
\begin{CJK*}{GBK}{song}
\setlength{\LTleft}{0pt} \setlength{\LTright}{0pt} %表格与页面左右边缘之间的矩离均为0
\begin{longtable}{|l@{\extracolsep{\fill}}lrr|}% @{\extracolsep{\fill}} 设置使得后面所有列间距可以伸展到预定义的表格宽度。
\caption{\label{tab:test}我的跨页表格}\\
\hline
\multicolumn{4}{|c|}{\bf 国际电话通达国家、代码及资费标准} \\ \hline
国家 & 中文国名 & 代码 & 资费/分钟 \\ \hline \hline \endfirsthead %1第一页表头
\multicolumn{4}{r}{续表 ~??????} \\ \hline
国家 & 中文国名 & 代码 & 资费/分钟 \\ \hline \hline \endhead %2续页表头
\hline
\multicolumn{2}{|c|}{前两列为字符串} & \multicolumn{2}{|c|}{后两列为数字} \\ \hline \endfoot %3除最后一页表尾
\multicolumn{2}{|c|}{最后一页字符串} & \multicolumn{2}{|c|}{最后一页数字} \\ \hline \endlastfoot % 4最后一页表尾
Afghanistan &阿富汗& 93 & 23.00\\\hline
Albania &阿尔巴尼亚& 356 & 20.70\\\hline
Algeria &阿尔及利亚& 213 & 27.60\\\hline
Andorra &安道尔& 376 & 20.70\\\hline
Angola &安哥拉& 244 & 27.60\\\hline
Argentina &阿根廷&“& 27.60\\\hline
Armenia &亚美尼亚& 374 & 18.90\\\hline
Ascension &阿森松(英)&247 & 27.60\\\hline
Australia &澳大利亚& 61 & 18.40\\\hline
Austria &奥地利& 43 & 20.70\\\hline
Azerbaijan &阿塞拜-M & 994 & 18.90\\\hline
Bahrain &巴林& 973 & 27.60\\\hline
Bangladesh &加拉国& 880 & 17.20、\\\hline
Belarus &白俄罗斯& 375 & 18.90\\\hline
Afghanistan &阿富汗& 93 & 23.00\\\hline
Albania &阿尔巴尼亚& 356 & 20.70\\\hline
Algeria &阿尔及利亚& 213 & 27.60\\\hline
Andorra &安道尔& 376 & 20.70\\\hline
Angola &安哥拉& 244 & 27.60\\\hline
Argentina &阿根廷&“& 27.60\\\hline
Armenia &亚美尼亚& 374 & 18.90\\\hline
Ascension &阿森松(英)&247 & 27.60\\\hline
Australia &澳大利亚& 61 & 18.40\\\hline
Austria &奥地利& 43 & 20.70\\\hline
Azerbaijan &阿塞拜-M & 994 & 18.90\\\hline
Bahrain &巴林& 973 & 27.60\\\hline
Bangladesh &加拉国& 880 & 17.20、\\\hline
Belarus &白俄罗斯& 375 & 18.90\\\hline
Afghanistan &阿富汗& 93 & 23.00\\\hline
Albania &阿尔巴尼亚& 356 & 20.70\\\hline
Algeria &阿尔及利亚& 213 & 27.60\\\hline
Andorra &安道尔& 376 & 20.70\\\hline
Angola &安哥拉& 244 & 27.60\\\hline
Argentina &阿根廷&“& 27.60\\\hline
Armenia &亚美尼亚& 374 & 18.90\\\hline
Ascension &阿森松(英)&247 & 27.60\\\hline
Australia &澳大利亚& 61 & 18.40\\\hline
Austria &奥地利& 43 & 20.70\\\hline
Azerbaijan &阿塞拜-M & 994 & 18.90\\\hline
Bahrain &巴林& 973 & 27.60\\\hline
Bangladesh &加拉国& 880 & 17.20、\\\hline
Belarus &白俄罗斯& 375 & 18.90\\\hline
Afghanistan &阿富汗& 93 & 23.00\\\hline
Albania &阿尔巴尼亚& 356 & 20.70\\\hline
Algeria &阿尔及利亚& 213 & 27.60\\\hline
Andorra &安道尔& 376 & 20.70\\\hline
Angola &安哥拉& 244 & 27.60\\\hline
Argentina &阿根廷&“& 27.60\\\hline
Armenia &亚美尼亚& 374 & 18.90\\\hline
Ascension &阿森松(英)&247 & 27.60\\\hline
Australia &澳大利亚& 61 & 18.40\\\hline
Austria &奥地利& 43 & 20.70\\\hline
Azerbaijan &阿塞拜-M & 994 & 18.90\\\hline
Bahrain &巴林& 973 & 27.60\\\hline
Bangladesh &加拉国& 880 & 17.20、\\\hline
Belarus &白俄罗斯& 375 & 18.90\\\hline
\end{longtable}
\end{CJK*}
\end{document}
转载于 http://sparkandshine.net/latex-use-notes-longtable-with-examples/
最简单的longtable使用跟table一样,下面给出一个简单的实例。
\documentclass[twoside,12pt]{article}
\usepackage{longtable}
\begin{document}
% An illustration of longtable
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
\caption{caption}
\label{table:label} \\ % add \\ command to tell LaTeX to start a new line
\hline
line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
\hline
% data begins here
10 & 2 & 0:22:00 & 9:46:00 & 2:00:00 & 80.49 & 159.18 & 302.25 & 89.88 & Cours Dillon \\
204 & 205 & 2:01:00 & 2:57:00 & 1:11:00 & 47.97 & 95.21 & 138.43 & 45.38 & Ayguevives Collège \\
% more data here
\hline
\end{longtable}
\end{document}
这里提醒一点,如果把表标题\caption{}
或者标签\label{}
放在前面,要在其后添加换行\\
,否则会报“! Misplaced \noalign.
”错误。
如果是表头单元的宽度与其他行不一致,多编译几次就行了,这是因为longtable为了节省内存和避免溢出采取分块处理表格带来的副作用,详情见TeX – LaTeX Stack Exchange: Bad width of head of longtable。
长表格有时会跨越很多页,为了便于阅读,在每一页重复表头或者表尾,这涉及到4个命令,如下:
\endhead
, specify rows (比如表头) to appear at the top of every page (under the headline, but before the other lines of the table)\endfoot
, specify rows (比如水平线\hline
) to appear at the bottom of each page.\endfirsthead
,只作用于表格的第一页。\endlastfoot
,只作用于表格的第一页。值得注意的是,这些命令需要放在表格开始处(at the start of the table)。以下是一个实例,每一页头部重复表头,每一页尾部重复水平线(\hline
)。
\documentclass[twoside,12pt]{article}
\usepackage{longtable}
\begin{document}
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
\caption{caption}
\label{table:label} \\ % add \\ command to tell LaTeX to start a new line
% Appear table header at the first page as well
\hline
line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
\hline
\endfirsthead
% Appear the table header at the top of every page
\hline
line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
\hline
\endhead
% Appear \hline at the bottom of every page
\hline
\endfoot
% data begins here
10 & 2 & 0:22:00 & 9:46:00 & 2:00:00 & 80.49 & 159.18 & 302.25 & 89.88 & Cours Dillon \\
204 & 205 & 2:01:00 & 2:57:00 & 1:11:00 & 47.97 & 95.21 & 138.43 & 45.38 & Ayguevives Collège \\
% more data here
\hline
\end{longtable}
\end{document}
上面的方法解决了表格纵向显示问题。对于横向,如果一行有太多数据,默认情况下表格会截断超出的部分。解决方法无非是改变字体大小,缩小列间的间距,调整表格边缘,多行显示,纵向显示。
在表格开始前声明字体大小,比如\small
或者\tiny
,为了不影响表格后面的字体大小,用{}
括起来,如下:
\begin{document}
% Temporarily change the font size
{
\small
\tiny
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
...
\end{longtable}
} % End of changing the font size
\end{document}
或者用\begin{footnotesize}...\end{footnotesize}
括起来,
\begin{document}
\begin{footnotesize}
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
...
\end{longtable}
\end{footnotesize}
\end{document}
默认情况下,表格单元左侧和右侧会有填充(padding),被定义为\tabcolsep
,默认值为6pt。使用命令\setlength{\tabcolsep}{6pt}
调整列间的间距。
\begin{document}
% Change the intercolumn space
\setlength{\tabcolsep}{2pt}
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
...
\end{longtable}
\end{document}
减少表格的边缘(margins),这样就可以放入更多的内容。
\begin{document}
% Adjust margins
\setlength\LTleft{-1in}
\setlength\LTright{-1in plus 1 fill}
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
...
\end{longtable}
\end{document}
使用longtabu(tabularx + longtable)将长文本在单元格多行显示。
\documentclass[twoside,12pt]{article}
\usepackage{longtable}
\usepackage{tabu}
\begin{document}
% Use longtabu
\begin{longtabu} to \textwidth {|X|X|X|X|X|X|X|X|X|X|}
...
\end{longtabu}
\end{document}
使用\begin{landscape}...\end{landscape}
将表格纵向显示。
\documentclass[twoside,12pt]{article}
\usepackage{longtable}
\usepackage{lscape} % for landscape
\begin{document}
\begin{landscape}
\begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
...
\end{longtable}
\end{landscape}
\end{document}
转载于 https://tex.stackexchange.com/questions/161431/how-to-solve-longtable-is-not-in-1-column-mode-error
3.1 longtable
doesn't work well with twocolumn
. But you can use supertabular
. Here is an example:\documentclass[twocolumn]{article}
\usepackage{supertabular,booktabs}
\usepackage[textheight=10cm]{geometry} %% just for this example.
\begin{document}
\tablefirsthead{\toprule First&\multicolumn{1}{c}{Name} \\ \midrule}
%
\tablehead{%
\multicolumn{2}{c}%
{{\bfseries Continued from previous column}} \\
\toprule
First&\multicolumn{1}{c}{Name}\\ \midrule}
%
\tabletail{%
\midrule \multicolumn{2}{r}{{Continued on next column}} \\ \midrule}
\tablelasttail{%
\\\midrule
\multicolumn{2}{r}{{Concluded}} \\ \bottomrule}
\begin{supertabular}{ll}
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text comes\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text comes here too \\
content & some text\\
content & some text\\
content & some text\\
content & some text
\end{supertabular}%
\end{document}
xtab
is another choice. xtab
is built on supertabular
while avoiding its weaknesses.
\documentclass[twocolumn]{article}
\usepackage{xtab,booktabs}
\usepackage[textheight=10cm]{geometry} %% just for this example.
\begin{document}
\topcaption{This is top caption}
\bottomcaption{This is bottom caption}
\tablecaption{this is table caption}
\tablefirsthead{\toprule First&\multicolumn{1}{c}{Name} \\ \midrule}
%
\tablehead{%
\multicolumn{2}{c}%
{{\bfseries Continued from previous column}} \\
\toprule
First&\multicolumn{1}{c}{Name}\\ \midrule}
%
\tabletail{%
\midrule \multicolumn{2}{r}{{Continued on next column}} \\ \midrule}
\tablelasttail{%
\\\midrule
\multicolumn{2}{r}{{Concluded}} \\ \bottomrule}
\begin{xtabular}{ll}
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text comes\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text\\
content & some text comes here too \\
content & some text\\
content & some text\\
content & some text\\
content & some text
\end{xtabular}%
\end{document}
\longtable
command.A possible solution is this one:
\makeatletter
\let\oldlt\longtable
\let\endoldlt\endlongtable
\def\longtable{\@ifnextchar[\longtable@i \longtable@ii}
\def\longtable@i[#1]{\begin{figure}[t]
\onecolumn
\begin{minipage}{0.5\textwidth}
\oldlt[#1]
}
\def\longtable@ii{\begin{figure}[t]
\onecolumn
\begin{minipage}{0.5\textwidth}
\oldlt
}
\def\endlongtable{\endoldlt
\end{minipage}
\twocolumn
\end{figure}}
\makeatother
NB: it works with two columns, which is what you'll find very often in journal article document classes.
To use this fragment with pandoc, you can e.g. use the -H switch which lets you include some additional code before your actual content. Just create a file called preamble.tex
and insert the code above. You can then run pandoc -H preamble.tex
and the code will automatically be included.
\clearpage
before your longtable and then reset it to two column mode after. This would look like\clearpage
\onecolumn
\begin{longtable}
...
\end{longtable}
\clearpage
\twocolumn
This is potentially more useful than the previous examples as it doesn't require rebuilding much, and has the added bonus of working in platforms like arXiv.