
В моем предыдущем вопросе было несколько обходных путей, которые решили мою непосредственную проблему. Однако у меня есть ощущение, что эти два пакета не очень хорошо работают вместе. Добавление еще одного столбца и наличие нескольких строк в разных наборах строк делает обходные пути неработоспособными.
Вот код:
\documentclass{article}
\usepackage{longtable}
\usepackage {multirow}
\usepackage{lipsum}
\begin{document}
\begin{center}
\begin{longtable}{p{.15\textwidth} p{.15\textwidth} p{0.32\textwidth} p{0.32\textwidth}}
\hline
1 & 1.1 & \multirow{2}{.32\textwidth} {\lipsum[1] } & some text \\ \cline{4-4}
& 1.2 & & \multirow{2}{.32\textwidth}{\lipsum[2]} \\ \cline{2-3}
& 1.3 & some other text & \\ \hline
2 & 2.1 & some more text & \lipsum[3] \\ \hline
\end{longtable}
\end{center}
\end{document}
И результат явно нехороший. Любая помощь в поиске универсального решения этой проблемы будет очень признательна.
решение1
Ответ на ваш предыдущий (почти такой же) вопрос решает вашу проблему. Если нет, то ваш вопрос не ясен.
Принятие @sveinung'sотвечать:
\documentclass{article}
\usepackage{makecell, longtable}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{lipsum}
\begin{document}
\begin{longtable}{|p{\dimexpr0.07\textwidth-2\tabcolsep-1.25\arrayrulewidth}
|p{\dimexpr0.07\textwidth-2\tabcolsep-1.25\arrayrulewidth}
|p{\dimexpr0.43\textwidth-2\tabcolsep-1.25\arrayrulewidth}
|p{\dimexpr0.43\textwidth-2\tabcolsep-1.25\arrayrulewidth}
|}
\hline
1 & 1.1 & \lipsum[1] & some text \\ \cline{2-4}
& 1.2 & & \lipsum[2] \\ \cline{2-4}
& 1.3 & some other text & \\
\hline
2 & 2.1 & some more text & \lipsum[3] \\
\hline
\end{longtable}
\end{document}
Примечание: \multirow[<number of rows>{...}{cell's contents}
не определяет свою высоту с числом строк (которые она содержит). Она охватывает заданное число строк в соседнем столбце. Если их высота меньше высоты ячейки multirow
, то ее содержимое выльется на соседние ячейки, как вы наблюдаете в своем вопросе.
Пожалуйста, прочтите документацию пакета, как рекомендует @ebcontrol в своем комментарии.
Редактировать:Ширина столбца теперь исправлена, и ширина равна longtable
точно \textwidth
.
решение2
Примечание.Я обновил код для примера 2
Я использую более короткие фиктивные тексты, чтобы примеры были более читабельными. Посмотрите на два прилагаемых примера и скажите нам (мне), как они отличаются от того, чего вы пытаетесь достичь. В частности, пример 2 требует ручной работы:
Пример 1
\documentclass{article}
\usepackage{longtable, booktabs, array}
\usepackage{lipsum}
\newcolumntype{O}{p{\dimexpr(0.15\linewidth-1.5\tabcolsep)}}
\newcolumntype{Q}{p{\dimexpr(0.35\linewidth-1.5\tabcolsep)}}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\newcommand{\mytexti}{This is a dummy text, however I have an issue using multirow and longtable. The content in the multirow cell is very large, and it goes well beyond the limit of the "non-multirowed" rows. LaTeX ignores that and starts the following row just behind those rows, therefore overwriting the content.}
\newcommand{\mytextii}{This is a shorter dummy text, LaTeX ignores me!}
\begin{document}
\begin{longtable}{@{}OOQQ@{}}
\toprule\addlinespace[1ex]
1 & 1.1 & \mytexti & some text \\ \cmidrule{4-4}
& 1.2 & & \mytextii \\ \cmidrule{3-3}
& 1.3 & some other text & \\ \bottomrule \addlinespace[1ex]
2 & 2.1 & some more text & \mytexti \\ \bottomrule
\end{longtable}
\end{document}
Пример 2
\documentclass{article}
\usepackage{longtable, booktabs, array, multirow, bigstrut}
\usepackage{lipsum}
\newcolumntype{O}{p{\dimexpr(0.15\linewidth-1.5\tabcolsep)}}
\newcolumntype{Q}{p{\dimexpr(0.35\linewidth-1.5\tabcolsep)}}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\newcommand{\mytexti}{This is a dummy text, however I have an issue using multirow and longtable. The content in the multirow cell is very large, and it goes well beyond the limit of the "non-multirowed" rows. LaTeX ignores that and starts the following row just behind those rows, therefore overwriting the content.}
\newcommand{\mytextii}{This is a shorter dummy text, LaTeX ignores me!}
\begin{document}
\begin{longtable}{@{}OOQQ@{}}
\toprule\addlinespace[1ex]
1 & & \mytexti & some text\strut \hrule \\
& \multirow[t]{-14}{=}{1.1\\ 1.2} & some other text & \multirow[t]{-12.9}{=}{\mytextii} \\ \cmidrule{3-3}
& 1.3 & some other text & \\
\bottomrule \addlinespace[1ex]
2 & 2.1 & some more text & \mytexti \\ \bottomrule
\end{longtable}
\end{document}