Longtable - 需要单元格的宽度,但多列会重置 \hspace 和 \linewidth。我该怎么办?

Longtable - 需要单元格的宽度,但多列会重置 \hspace 和 \linewidth。我该怎么办?

经过几个小时的调查,我可以将我遇到的问题范围缩小到表格\multicolumn以及它对和的\hspace作用\linewidth

正如下面的 MWE 中所示,在普通单元格中,和都\hspace给出\linewidth了单元格的宽度(如果需要\tabcolsep,我可以处理arrayrulesep)。我会使用这个宽度在单元格中放置一个小页面或类似的东西。

问题是将这\multicolumn两个尺寸重置为整个文本宽度。

无论如何,有没有办法检索正确的值?

注意 1:arraybooktabs包对于这个问题没有任何帮助。

[编辑] 在我看来这似乎是一个错误,但正如@david-carisle在评论中指出的那样,多列是一l列,然后是\mbox,而不是\parbox,所以没有本地\linewidth

整个用例涉及通过 Pandoc 生成的文档和自定义 Lua 过滤器,因此我将坚持使用longtable环境。我知道我可以在过滤器中做一些计算,但实际用例比这个 MWE 复杂得多。这会使 lua 过滤器非常复杂。

我还编辑了 MWE,因此表格不会太宽。 [/编辑]

\documentclass[]{article}

\usepackage{longtable}
%\usepackage{array}
%\usepackage{booktabs}
\usepackage{calc}


\begin{document}

\setlength\LTleft{0pt}
\setlength\LTright\fill
linewidth=\the\linewidth
\footnotesize
\begin{longtable}[]{
  p{\columnwidth) / 4}
  p{\columnwidth) / 4}
  p{\columnwidth) / 9}
  p{\columnwidth) / 4}}
\hline
A & B & C & D \\
\hline
linewidth=\the\linewidth & \multicolumn{2}{l}{linewidth=\the\linewidth}& linewidth=\the\linewidth \\
hsize=\the\hsize & \multicolumn{2}{l}{hsize=\the\hsize}& hsize=\the\hsize \\
textwidth=\the\textwidth & \multicolumn{2}{l}{textwidth=\the\textwidth}& textwidth=\the\textwidth \\
columnwidth=\the\columnwidth & \multicolumn{2}{l}{columnwidth=\the\columnwidth}& columnwidth=\the\columnwidth \\
\hline
\end{longtable}
\end{document}

在此处输入图片描述

答案1

我认为您的目标是将longtable环境的整体宽度设置为\textwidth。(补充:由于您正在创建单列文档,\textwidth=\columnwidth。)如果是这种情况,则设置 会立即出错可用的四列中每列的宽度为。\textwidth/4这导致 longtable 的整体宽度超出;如果(文档类的默认值),超出部分等于。\textwidth8\tabcolsep\tabcolsep=6ptarticle8\tabcolsep=48pt\approx 0.664in=16.9mm

正如 @DavidCarlisle 在评论中指出的那样,您可以通过将可用列宽设置为 来修复计算,从而\textwidth/4-2\tabcolsep写入\begin{longtable}{ *{4}{p{\dimexpr\textwidth/4-2\tabcolsep\relax}}}。或者,您可以从 切换longtable板状的框架并书写\begin{xltabular}{\textwidth}{ XXXX }

在此处输入图片描述

\documentclass{article}

\usepackage{xltabular,ragged2e,booktabs}
\newcolumntype{L}{>{\RaggedRight}X} % suspend full justfication
\usepackage{lipsum} % filler text

\begin{document}

\begin{xltabular}{\textwidth}{ LLLL }
\toprule
\lipsum[1][1-3] & \lipsum[2][1-3] & \lipsum[3][1-4] & \lipsum[4][1-4] \\ 
\bottomrule
\end{xltabular}
\end{document}

答案2

看来(如果我正确理解了你的问题的话),这longtable不是你想要得到的正确工具。相反,它尝试使用longtblrtabularray并使用X列类型:

\documentclass{article}

\usepackage{tabularray}
\usepackage{calc}
\usepackage{lipsum}


\begin{document}

\footnotesize
\begin{longtblr}{colspec = {X[l] X[l] X[0.444, l] X[l]},
                 cell{2-Z}{2} = {c=2}{},
                 hspan=minimal}
    \hline
A & B & C & D \\
    \hline
linewidth=\the\linewidth 
    & linewidth=\the\linewidth
        &   & linewidth=\the\linewidth      \\
hsize=\the\hsize 
    & hsize=\the\hsize
        &   & hsize=\the\hsize              \\
textwidth=\the\textwidth 
    & textwidth=\the\textwidth
        &   & textwidth=\the\textwidth      \\
columnwidth=\the\columnwidth 
    & columnwidth=\the\columnwidth 
        &   & columnwidth=\the\columnwidth  \\
    \hline
\lipsum[2][1-2]
    & \lipsum[2][1-2]
        &   & \lipsum[2][1-2]                 \\
    \hline
\end{longtblr}

\end{document}

在此处输入图片描述

答案3

似乎没有自动魔术解决方案来保持\linewidth\hsize等于多列单元格中的可用宽度。因此答案是使用“p 列”并自行进行计算。

巧合的是,Pandoc 在 LaTeX 表中生成多单元格时刚刚切换到 p 列。

我的 MWE 是:

\documentclass[]{article}

\usepackage{longtable}
%\usepackage{array}
%\usepackage{booktabs}
\usepackage{calc}


\begin{document}

\setlength\LTleft{0pt}
\setlength\LTright\fill
linewidth=\the\linewidth
\footnotesize
\begin{longtable}[]{
  p{\columnwidth / 4}
  p{\columnwidth / 4}
  p{\columnwidth / 9}
  p{\columnwidth / 4}}
\hline
A & B & C & D \\
\hline
linewidth=\the\linewidth & \multicolumn{2}{p{13\columnwidth / 36 +2\tabcolsep}}{linewidth=\the\linewidth}& linewidth=\the\linewidth \\
hsize=\the\hsize & \multicolumn{2}{p{13\columnwidth / 36 +2\tabcolsep}}{hsize=\the\hsize}& hsize=\the\hsize \\
textwidth=\the\textwidth & \multicolumn{2}{p{13\columnwidth / 36 +2\tabcolsep}}{textwidth=\the\textwidth}& textwidth=\the\textwidth \\
columnwidth=\the\columnwidth & \multicolumn{2}{p{13\columnwidth / 36 +2\tabcolsep }}{columnwidth=\the\columnwidth}& columnwidth=\the\columnwidth \\
\hline
\end{longtable}

\end{document}

在此处输入图片描述

相关内容