tabel dengan banyak multikolom

Oct 13 2020

Saya berjuang untuk mendapatkan distribusi tabel dengan beberapa kolom per baris dengan benar. Kode LaTeX saya adalah:

\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}

Hasil pengkodean ini adalah:

Tapi saya sebenarnya menginginkan ini:

Jawaban

2 Mico Oct 13 2020 at 12:59

Berikut adalah solusi yang menggunakan tabularxlingkungan untuk (a) memastikan bahwa tabel pas dengan lebar blok teks, (b) memastikan bahwa 7 sel di baris bawah memiliki lebar yang sama, dan (c) memungkinkan pembungkusan baris otomatis di dalam sel.

Seperti dalam jawaban David Carlisle , tabularxenv. diatur agar tidak memiliki 7 tetapi 14 kolom yang mendasari. Setiap sel yang terlihat di baris bawah sebenarnya mencakup 2 kolom yang mendasari. Konten sel yang terlihat harus dimasukkan ke dalam \mc(atau \md) pembungkus, untuk menunjukkan berapa banyak kolom yang mendasari sel tersebut harus direntangkan.

\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

Dalam \haligntugas kolom tabel level terendahnya, Tex melakukan "penyederhanaan" bahwa jika ada batas sel yang direntangkan pada setiap baris, pada dasarnya itu dihapus dari struktur internal.

Jadi di sini Anda ingin memastikan bahwa Anda benar-benar memiliki 14 kolom efektif sehingga Anda dapat memiliki baris terakhir terakhir dengan setiap sel yang ada dan tidak ada bentang, ini biasanya akan memaksa ruang vertikal dan aturan vertikal ekstra yang terlihat jadi saya menggunakan \omitprimitif untuk mencegah penambahan aturan dan \strutlateks biasanya menambah baris.

\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}

Saya meninggalkan konten tabel sebagai tidak terkait dengan pertanyaan tetapi angka harus dalam mode matematika, $-1$bukan -1, saya juga akan menggunakan \setlength\extrarowheight{2pt}untuk menjauhkan \hlinedari konten sel.