latex longtable and supertabular 跨页表格

目录

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


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.

 

你可能感兴趣的:(学术之乐,工欲善其事必先利其器)