bảng có nhiều cột

Oct 13 2020

Tôi đang đấu tranh để có được phân phối cho bảng có nhiều cột trên mỗi hàng đúng. Mã LaTeX của tôi là:

\documentclass{book}
\begin{document}

\begin{table}[]
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline
\multicolumn{7}{|c|}{0} & \multicolumn{7}{c|}{1}\\ \hline
\multicolumn{7}{|c|}{Negative} & \multicolumn{7}{c|}{Positive}\\ \hline
\multicolumn{4}{|c|}{-1} & \multicolumn{6}{c|}{0} & \multicolumn{4}{c|}{1} \\ \hline
\multicolumn{4}{|c|}{Negative} & \multicolumn{6}{c|}{Neutral} & \multicolumn{4}{c|}{Positive} \\ \hline
\multicolumn{2}{|c|}{1} & \multicolumn{3}{c|}{2} & \multicolumn{4}{c|}{3} & \multicolumn{3}{c|}{4} & \multicolumn{2}{c|}{5} \\ \hline
\multicolumn{2}{|c|}{\begin{tabular}[c]{@{}c@{}}Strongly\\ Negative\end{tabular}} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Weakly\\ Negative\end{tabular}} & \multicolumn{4}{c|}{Neutral} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Weakly\\ Positive\end{tabular}} & \multicolumn{2}{c|}{\begin{tabular}[c]{@{}c@{}}Strongly\\ Positive\end{tabular}} \\ \hline
\begin{tabular}[c]{@{}c@{}}Very\\ Negative\end{tabular} & \multicolumn{2}{c|}{Negative} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Mostly\\ Negative\end{tabular}} & \multicolumn{2}{c|}{Neutral} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Mostly \\ Positive\end{tabular}} & \multicolumn{2}{c|}{Positive} & \begin{tabular}[c]{@{}c@{}}Strongly \\ Positive\end{tabular} \\ \hline

\end{tabular}
\end{table}

\end{document}

Việc mã hóa này dẫn đến kết quả:

Nhưng tôi thực sự muốn điều này:

Trả lời

2 Mico Oct 13 2020 at 12:59

Đây là giải pháp sử dụng tabularxmôi trường để (a) đảm bảo rằng bảng vừa với chiều rộng của khối văn bản, (b) đảm bảo rằng 7 ô ở hàng dưới cùng có chiều rộng bằng nhau và (c) cho phép tự động gói dòng trong tế bào.

Như trong câu trả lời của David Carlisle , tabularxenv. được thiết lập để không có 7 mà có 14 cột bên dưới. Mỗi ô hiển thị ở hàng dưới cùng thực sự kéo dài 2 cột bên dưới. Nội dung của các ô hiển thị phải được nhập trong \mc(hoặc \md) trình bao bọc, để cho biết chúng sẽ kéo dài bao nhiêu cột bên dưới.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcommand\newhsize[1]{\hsize= \dimexpr #1\hsize
                    +#1\tabcolsep+#1\tabcolsep-2\tabcolsep
                    +#1\arrayrulewidth-\arrayrulewidth  \relax}
\newcommand{\mc}[2]{\multicolumn{#1}{ >{\newhsize{#1}}C|}{#2}}
\newcommand{\md}[2]{\multicolumn{#1}{|>{\newhsize{#1}}C|}{#2}} % for first col. in row

\begin{document}   
\setlength\tabcolsep{3pt}      % default: 6pt
\setlength\extrarowheight{2pt} % for a more open "look"

\noindent
\begin{tabularx}{\textwidth}{|*{14}{C|}}
\hline
\md{7}{0} & \mc{7}{1} \\ \hline

\md{7}{Negative} & \mc{7}{Positive}\\ \hline

\md{5}{$-1$} & \mc{4}{0} & \mc{5}{1}\\ \hline

\md{5}{Negative} & \mc{4}{Neutral} & \mc{5}{Positive} \\ \hline

\md{3}{1} & \mc{2}{2} & \mc{4}{3} & \mc{2}{4} & \mc{3}{5}\\ \hline

\md{3}{Strongly Negative} & \mc{2}{Weakly Negative} & \mc{4}{Neutral} & 
\mc{2}{Weakly Positive} & \mc{3}{Strongly Positive}\\ \hline

\md{2}{Very Positive} & \mc{2}{Positive} & \mc{2}{Mostly Positive} & \mc{2}{Neutral} & 
\mc{2}{Mostly Negative} &  \mc{2}{Negative} & \mc{2}{Strongly Negative} \\ \hline
\end{tabularx}
\end{document}
1 DavidCarlisle Oct 13 2020 at 06:24

Ở cấp thấp nhất, \halignviệc gán cột trong bảng Tex thực hiện một "đơn giản hóa" rằng nếu có một ranh giới ô được kéo dài trên mỗi hàng thì về cơ bản nó sẽ bị loại bỏ khỏi cấu trúc bên trong.

Vì vậy, ở đây bạn muốn đảm bảo rằng bạn thực sự có 14 cột hiệu quả để bạn có thể có hàng cuối cùng với mọi ô hiện diện và không có khoảng cách, điều này thường sẽ buộc thêm không gian dọc có thể nhìn thấy và các quy tắc dọc, vì vậy tôi đã sử dụng \omitnguyên thủy để ngăn việc bổ sung quy tắc và \strutlatex đó thường thêm vào một hàng.

\documentclass{article}

\addtolength\textwidth{2pt}
\begin{document}

\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline
\multicolumn{7}{|c|}{0} & \multicolumn{7}{c|}{1} \\ \hline
\multicolumn{7}{|c|}{Negative} & \multicolumn{7}{c|}{Positive}\\ \hline
\multicolumn{4}{|c|}{-1} & \multicolumn{6}{c|}{0} & \multicolumn{4}{c|}{1}  \\\hline
\multicolumn{4}{|c|}{Negative}& \multicolumn{6}{c|}{Neutral}& \multicolumn{4}{c|}{Positive}\\ \hline
\multicolumn{2}{|c|}{1}& \multicolumn{3}{c|}{2}& \multicolumn{4}{c|}{3} & \multicolumn{3}{c|}{4} & \multicolumn{2}{c|}{5}\\ \hline
\multicolumn{2}{|c|}{\begin{tabular}[c]{@{}c@{}}Strongly\\ Negative\end{tabular}} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Weakly\\ Negative\end{tabular}}& \multicolumn{4}{c|}{Neutral}& \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Weakly\\ Positive\end{tabular}}& \multicolumn{2}{c|}{\begin{tabular}[c]{@{}c@{}}Strongly\\ positive\end{tabular}} \\ \hline
\begin{tabular}[c]{@{}c@{}}Very\\ Positive\end{tabular}& \multicolumn{2}{c|}{Positiv}& \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Mostly\\ Positive\end{tabular}} & \multicolumn{2}{c|}{Neutral} & \multicolumn{3}{c|}{\begin{tabular}[c]{@{}c@{}}Mostly \\ Negative\end{tabular}} & \multicolumn{2}{c|}{Negative}& \begin{tabular}[c]{@{}c@{}}Strongly \\ Negative\end{tabular}\\ \hline
\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit&\omit
\end{tabular}


\end{document}

Tôi để nội dung bảng như không liên quan đến câu hỏi nhưng các số nên ở chế độ toán học, $-1$không phải vậy -1, tôi cũng sẽ sử dụng \setlength\extrarowheight{2pt}để tránh \hlinexa nội dung ô.