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