Ширина нескольких столбцов в длинной таблице

Ширина нескольких столбцов в длинной таблице

Как мне задать ширину нескольких столбцов в ячейках longtable? Если вы запустите мой MWE, вы увидите, что первая строка моей longtable превышает ограничения страницы.

\documentclass[11pt,a4paper,oneside]{report}
\usepackage{setspace}
\usepackage{array}
\usepackage{covington}
\usepackage[danish,english]{babel}
\usepackage{longtable}
\usepackage{caption}
\usepackage{multirow}

\begin{document}


\begin{longtable}{Rp{9cm}}
\caption{Example}\\
\endfirsthead
\caption[]{(continued)}\\
\endhead
\endlastfoot
\multicolumn{2}{l}{Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.}\\
\\
\textsc{Lorem}&"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."\\
{\dag} \textsc{Ipsum}&"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."\\
\end{longtable}

\end{document}

решение1

Вам повезло, потому что package longtableзаписывает ширину столбцов в .auxфайле. Это можно использовать для расчета ширины первых двух столбцов.

Макрос \GetLongtableWidthsизвлекает ширину следующего longtable. Он вызывается непосредственно перед \begin{longtable}. Внутри pспецификации \wdcalиспользуется . Первый аргумент — это минимальная ширина, которая используется, если ширины еще нет в файле .aux. Эта ширина должна быть меньше или не более чем равна конечной ширине. Второй аргумент \wdcalпринимает выражение. \wdcol<colnum>заменяется шириной столбца <colnum>. Поскольку спецификация столбца p{...}не \multicolumn подавляет \tabcolsep(слева и справа от столбца), \tabcolsepнеобходимо вычесть два.

\documentclass[11pt,a4paper,oneside]{report}
\usepackage{setspace}
\usepackage{array}
\usepackage{covington}
\usepackage[danish,english]{babel}
\usepackage{longtable}
\usepackage{caption}
\usepackage{multirow}

\makeatletter
\newcommand*{\GetLongtableWidths}{%
  \begingroup
    \count@=\value{LT@tables}%
    \advance\count@\@ne
    \edef\tmp{LT@\romannumeral\count@}%
    \@ifundefined{\tmp}{%
    }{%
      \count@=\z@
      \def\LT@entry##1##2{%
        \advance\count@\@ne
        \expandafter
        \gdef\csname @wdcol\the\count@\endcsname{##2}%
      }%
      \csname\tmp\endcsname
    }%
  \endgroup
}
\newcommand*{\wdcol}[1]{%
  \@ifundefined{@wdcol\number#1}%
  {0pt}%
  {\csname @wdcol\number#1\endcsname}%
}
\newcommand*{\wdcal}[2]{%
  \ifdim\dimexpr(#2)\relax<0pt %
    \dimexpr(#1)\relax
  \else
    \dimexpr(#2)\relax
  \fi
}
\makeatother

\begin{document}

\GetLongtableWidths
\begin{longtable}{rp{9cm}}
\caption{Example}\\
\endfirsthead
\caption[]{(continued)}\\
\endhead
\endlastfoot
\multicolumn{2}{p{\wdcal{9cm}{\wdcol{1}+\wdcol{2}-2\tabcolsep}}}{Lorem ipsum dolor s
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat  
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id   
est laborum.}\\
\\
\textsc{Lorem}&"Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat  
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id   
est laborum."\\
{\dag} \textsc{Ipsum}&"Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit 
anim id est laborum."\\
\end{longtable}

\end{document}

Результат

Связанный контент