我正在尝试创建一个longtable
横跨整个的\textwidth
。此外,尽管表格的内容使用不同的对齐方式,但所有标题单元格都应居中。基于例如这个问题,我得到了以下代码:
\documentclass[letterpaper,12pt]{report}
\usepackage[margin=1in]{geometry}
\usepackage{longtable}
\setlength\LTleft{0pt}
\setlength\LTright{0pt}
\begin{document}
\noindent
\begin{longtable}{@{\extracolsep{\fill}} | l | c | c | r | r | }
\hline
\multicolumn{1}{|c|}{\textbf{Header 1}} &
\multicolumn{1}{c|}{\textbf{Header 2}} &
\multicolumn{1}{c|}{\textbf{Header 3}} &
\multicolumn{1}{c|}{\textbf{Header 4}} &
\multicolumn{1}{c|}{\textbf{Header 5}} \\
\hline
\endhead
\end{longtable}
\end{document}
但是,使用 进行渲染时pdflatex
,第一列正确居中,但其余列似乎右对齐。我认为问题在于我误解了定义@{\extracolsep{\fill}}
中的工作原理longtable
。
我究竟做错了什么?
答案1
我认为你有两个主要选择,它们都有各自的美学优点:
继续使用当前
longtable
设置,但不要使用垂直条在视觉上分隔列。试一试:我相信您不会错过这些垂直规则。也加载
tabularx
和包,并使用列类型作为环境的标题。这种方法的唯一缺点(但幸运的是相当小)是您需要将整个 longtable 材料放在单独的文件中。可以使用包将的内容包含在文档的序言中来缓解此缺点。然后使用宏加载外部 longtable。ltxtable
X
longtable
filecontents
longtable
\LTXtable{\textwidth}{<filename>}
\RequirePackage{filecontents}
\documentclass[letterpaper,12pt]{report}
\usepackage[margin=1in]{geometry}
\usepackage{longtable,tabularx,ltxtable}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\setlength\LTleft{0pt}
\setlength\LTright{0pt}
% same as posted by OP
\begin{filecontents*}{mytable0.tex}
\begin{longtable}{@{\extracolsep{\fill}} | l | c | c | r | r | }
\caption{Longtable with extra ``fill'' and vertical rules}\\
\hline
\multicolumn{1}{|c|}{\textbf{Header 1}} &
\multicolumn{1}{c|}{\textbf{Header 2}} &
\multicolumn{1}{c|}{\textbf{Header 3}} &
\multicolumn{1}{c|}{\textbf{Header 4}} &
\multicolumn{1}{c|}{\textbf{Header 5}} \\
\hline
\endhead
\end{longtable}
\end{filecontents*}
\begin{filecontents*}{mytable1.tex}
\begin{longtable}{@{\extracolsep{\fill}} l c c r r }
\caption{Longtable with extra ``fill'' and no vertical rules}\\
\hline
\multicolumn{1}{c}{\textbf{Header 1}} &
\multicolumn{1}{c}{\textbf{Header 2}} &
\multicolumn{1}{c}{\textbf{Header 3}} &
\multicolumn{1}{c}{\textbf{Header 4}} &
\multicolumn{1}{c}{\textbf{Header 5}} \\
\hline
\endhead
\end{longtable}
\end{filecontents*}
\begin{filecontents*}{mytable2.tex}
\begin{longtable}{ | l | c | c | r | r | }
\caption{Longtable, ``centered X'' column types}\\
\hline
\multicolumn{1}{|Y|}{\textbf{Header 1}} &
\multicolumn{1}{ Y|}{\textbf{Header 2}} &
\multicolumn{1}{ Y|}{\textbf{Header 3}} &
\multicolumn{1}{ Y|}{\textbf{Header 4}} &
\multicolumn{1}{ Y|}{\textbf{Header 5}} \\
\hline
\endhead
\end{longtable}
\end{filecontents*}
\begin{document}
\LTXtable{\textwidth}{mytable0.tex} % initial look
\LTXtable{\textwidth}{mytable1.tex}
\LTXtable{\textwidth}{mytable2.tex}
\end{document}