带有居中标题的文本宽度长表

带有居中标题的文本宽度长表

我正在尝试创建一个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。ltxtableXlongtablefilecontentslongtable\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}

相关内容