目录
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:
1 Latex跨页表格
转载于 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}
2 LaTeX使用笔记:长表格longtable(附实例)
转载于 http://sparkandshine.net/latex-use-notes-longtable-with-examples/
2.1. 一个简单实例
最简单的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。
2.2. 重复表头、表尾
长表格有时会跨越很多页,为了便于阅读,在每一页重复表头或者表尾,这涉及到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}
2.3. 适应页面宽度
上面的方法解决了表格纵向显示问题。对于横向,如果一行有太多数据,默认情况下表格会截断超出的部分。解决方法无非是改变字体大小,缩小列间的间距,调整表格边缘,多行显示,纵向显示。
2.3.1 改变字体大小
在表格开始前声明字体大小,比如\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}
2.3.2 缩小列间的间距
默认情况下,表格单元左侧和右侧会有填充(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}
2.3.3 调整表格边缘
减少表格的边缘(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}
2.3.4 多行显示
使用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}
2.3.5 纵向显示
使用\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}
3 How to solve longtable is not in 1-column mode error?
转载于 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}
3.2 As suggested by egreg, 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}
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.
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.
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
\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.