如何获取 longtable 的宽度?

如何获取 longtable 的宽度?

我需要创建多个宽度相同的表格,其中一个表格需要是长表格,因为它跨越多个页面。我可以将所有表格的宽度设置为预定义值。但是,我更愿意从其中一个表格的自然宽度中获取它。我该怎么做?

答案1

在包内部,threeparttablex我使用这个结构来检测表本身的宽度

\noalign{\begingroup
\setlength\TPTL@width{0pt}
\renewcommand\LT@entry[2]{\global\advance\TPTL@width by ##2}
\@nameuse{LT@\roman{LT@tables}}
\endgroup}  

然后将宽度存储在\TPTL@width全局中。需要进行几次编译才能稳定。

答案2

将 longtable 写入外部文件并使用以下命令读取\LTXtable

\documentclass{article}
\usepackage{filecontents}
\usepackage{ltxtable}
\newsavebox\TBox
\begin{document}

\savebox\TBox{%
\begin{tabular}{@{} ccc @{}}\hline
One & Two & Three\\\hline
\end{tabular}}

\begin{center}
\usebox\TBox
\end{center}

\begin{filecontents*}{myLongtab.tex}
\begin{longtable}{@{} ccX @{}}\hline
1 & 2 & 3\\\hline
\end{longtable}
\end{filecontents*}

\LTXtable{\wd\TBox}{myLongtab}

\end{document}

在此处输入图片描述

答案3

这是一个无需获取表格宽度的解决方案,但您可以将其与 daleif 的答案结合起来。

\documentclass{article}
\usepackage{tabu,longtable}
\newlength{\mytablen}
\setlength{\mytablen}{5cm}
\begin{document}
Short Table:

\begin{tabu} to \mytablen {|XX|}
1 & 2\\
3 & 4\\
\end{tabu}

\bigskip
Long Table:

\begin{longtabu} to \mytablen {|XX|}
1 & 2\\
3 & 4\\
\end{longtabu}
\end{document}

请注意,{longtabu}默认情况下,是居中的,longtable需要手动加载

答案4

此版本使用存储在辅助文件中的值。它的优点是可以在 longtable 之前工作(尽管是在第二遍)。

\documentclass{article}

\usepackage{longtable}

\newlength{\LTwidth}

\makeatletter
\newcommand{\getLTwidth}[1][\empty]% #1 = longtable index (optional)
{\bgroup% for \count1 and \LT@entry
  \ifx\empty#1\relax
    \count1=\value{LT@tables}% default
    \advance\count1 by 1
  \else
    \count1=#1\relax
  \fi
  \@ifundefined{LT@\@roman\count1}{\LTwidth=\textwidth}{%
    \LTwidth=0pt%
    \def\LT@entry##1##2{\advance\LTwidth by ##2}%
    \csname LT@\@roman\count1\endcsname
  }%
  \global\LTwidth=\LTwidth
\egroup}
\makeatother

\begin{document}

\getLTwidth% before
\noindent\rule{\LTwidth}{1pt}

\begin{longtable}[l]{|c|c|}
foo & bar \\
1 & 1234567 \\
\end{longtable}

\getLTwidth[\arabic{LT@tables}]% after
\noindent\rule{\LTwidth}{1pt}

\end{document}

相关内容