LaTeX使用筆記:長表格longtable(附實例)


轉載於此:http://sparkandshine.net/latex-use-notes-longtable-with-examples/#1

本文記錄我在插入長表格遇到的一些問題及解決方法,包括重復表頭、表尾(縱向顯示),調整表格適應頁面寬度(橫向顯示)。

 

1. 一個簡單實例

最簡單的longtable使用跟table一樣,下面給出一個簡單的實例。

  1. \documentclass[twoside,12pt]{article}
  2. \usepackage{longtable}
  3.  
  4. \begin{document}
  5.  
  6. % An illustration of longtable
  7. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  8. \caption{caption}
  9. \label{table:label} \\ % add \\ command to tell LaTeX to start a new line
  10. \hline
  11. line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
  12. \hline
  13. % data begins here
  14. 10 & 2 & 0:22:00 & 9:46:00 & 2:00:00 & 80.49 & 159.18 & 302.25 & 89.88 & Cours Dillon \\
  15. 204 & 205 & 2:01:00 & 2:57:00 & 1:11:00 & 47.97 & 95.21 & 138.43 & 45.38 & Ayguevives Collège \\
  16. % more data here
  17. \hline
  18. \end{longtable}
  19.  
  20. \end{document}

這里提醒一點,如果把表標題\caption{}或者標簽\label{}放在前面,要在其后添加換行\\,否則會報“! Misplaced \noalign.”錯誤。

如果是表頭單元的寬度與其他行不一致,多編譯幾次就行了,這是因為longtable為了節省內存和避免溢出采取分塊處理表格帶來的副作用,詳情見TeX – LaTeX Stack Exchange: Bad width of head of longtable

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)。

  1. \documentclass[twoside,12pt]{article}
  2. \usepackage{longtable}
  3.  
  4. \begin{document}
  5.  
  6. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  7. \caption{caption}
  8. \label{table:label} \\ % add \\ command to tell LaTeX to start a new line
  9.  
  10. % Appear table header at the first page as well
  11. \hline
  12. line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
  13. \hline
  14. \endfirsthead
  15.  
  16. % Appear the table header at the top of every page
  17. \hline
  18. line1 & line2 & $t_1$ & $t_{12}$ & $t_2$ & $r$(\%)& $D$(GB)& $D_{nc}(GB)$&$G_t$(\%)&Station\\
  19. \hline
  20. \endhead
  21.  
  22. % Appear \hline at the bottom of every page
  23. \hline
  24. \endfoot
  25.  
  26. % data begins here
  27. 10 & 2 & 0:22:00 & 9:46:00 & 2:00:00 & 80.49 & 159.18 & 302.25 & 89.88 & Cours Dillon \\
  28. 204 & 205 & 2:01:00 & 2:57:00 & 1:11:00 & 47.97 & 95.21 & 138.43 & 45.38 & Ayguevives Collège \\
  29. % more data here
  30. \hline
  31. \end{longtable}
  32.  
  33. \end{document}

3. 適應頁面寬度

上面的方法解決了表格縱向顯示問題。對於橫向,如果一行有太多數據,默認情況下表格會截斷超出的部分。解決方法無非是改變字體大小,縮小列間的間距,調整表格邊緣,多行顯示,縱向顯示。

3.1 改變字體大小

在表格開始前聲明字體大小,比如\small或者\tiny,為了不影響表格后面的字體大小,用{}括起來,如下:

  1. \begin{document}
  2.  
  3. % Temporarily change the font size
  4. {
  5. \small
  6. \tiny
  7.  
  8. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  9. ...
  10. \end{longtable}
  11.  
  12. } % End of changing the font size
  13.  
  14. \end{document}

或者用\begin{footnotesize}...\end{footnotesize}括起來,

  1. \begin{document}
  2.  
  3. \begin{footnotesize}
  4. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  5. ...
  6. \end{longtable}
  7. \end{footnotesize}
  8.  
  9. \end{document}

3.2 縮小列間的間距

默認情況下,表格單元左側和右側會有填充(padding),被定義為\tabcolsep,默認值為6pt。使用命令\setlength{\tabcolsep}{6pt}調整列間的間距。

  1. \begin{document}
  2.  
  3. % Change the intercolumn space
  4. \setlength{\tabcolsep}{2pt}
  5.  
  6. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  7. ...
  8. \end{longtable}
  9.  
  10. \end{document}

3.3 調整表格邊緣

減少表格的邊緣(margins),這樣就可以放入更多的內容。

  1. \begin{document}
  2.  
  3. % Adjust margins
  4. \setlength\LTleft{-1in}
  5. \setlength\LTright{-1in plus 1 fill}
  6.  
  7. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  8. ...
  9. \end{longtable}
  10.  
  11. \end{document}

3.4 多行顯示

使用longtabu(tabularx + longtable)將長文本在單元格多行顯示。

  1. \documentclass[twoside,12pt]{article}
  2. \usepackage{longtable}
  3. \usepackage{tabu}
  4.  
  5. \begin{document}
  6.  
  7. % Use longtabu
  8. \begin{longtabu} to \textwidth {|X|X|X|X|X|X|X|X|X|X|}
  9. ...
  10. \end{longtabu}
  11.  
  12. \end{document}

3.5 縱向顯示

使用\begin{landscape}...\end{landscape}將表格縱向顯示。

  1. \documentclass[twoside,12pt]{article}
  2. \usepackage{longtable}
  3. \usepackage{lscape} % for landscape
  4.  
  5. \begin{document}
  6.  
  7. \begin{landscape}
  8. \begin{longtable}{|c|c|r|r|r|r|r|r|r|l|}
  9. ...
  10. \end{longtable}
  11. \end{landscape}
  12.  
  13. \end{document}

以上這些方法,有時候需要組合使用。

有了這些,應該能調成自己滿意的格式:-) 完整的例子,我已分享到我的GitHub,在這里longtable.tex

References:
[1] The longtable package – CTeX.pdf
[2] TeX – LaTeX Stack Exchange: longtable: hline doesn’t display on the first page
[3] TeX – LaTeX Stack Exchange: How to set width of longtable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM