![如何在表格中使用带有垂直文本的行标题?](https://linux22.com/image/410701/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%A1%A8%E6%A0%BC%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%E5%9E%82%E7%9B%B4%E6%96%87%E6%9C%AC%E7%9A%84%E8%A1%8C%E6%A0%87%E9%A2%98%EF%BC%9F.png)
我正在尝试为表格的某些行插入标题。不幸的是,结果看起来很奇怪,并且文本与表格的其余部分对齐不佳。具体来说,我的问题如下:
- 如何正确插入带有垂直文本的行标题?
- 如果文本太长,如何防止文本超出单元格?
这是我当前的代码:
\documentclass[journal]{IEEEtran}
\usepackage{array, caption, floatrow, tabularx, makecell, booktabs}
\usepackage{multirow} % span text across multiple rows
\usepackage{rotating} % to write text vertically in a cell
\begin{document}
\begin{table*}[t]
\centering
\begin{tabular}{c cl c|c|c|c|c}
& & & \multicolumn{5}{c}{Dataset} \\ \cmidrule(lr){4-8}
& & \multicolumn{1}{|l}{Results} & D1 & D2 & D3 & D4 & D5 \\
\cmidrule(lr){2-8}
\multirow{7}{*}{\multicolumn{1}{c|}{
\begin{turn}{90}\makecell{Test Type}\end{turn}}}
& \multirow{4}{*}{
\begin{turn}{90}\makecell{Type 1}\end{turn}}
& \multicolumn{1}{|l}{test 1} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 2} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 3} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 4} & -- & -- & -- & -- & -- \\
\cmidrule(lr){2-8}
& \multirow{2}{*}{
\begin{turn}{90}\makecell{Type 2}\end{turn}}
& \multicolumn{1}{|l}{test ver 1} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test ver 2} & -- & -- & -- & -- & -- \\
\cmidrule(lr){2-8}
\end{tabular}
\caption{Some caption.}
\end{table*}
\end{document}
...错误:
放错位置\省略。
\多跨度->\省略
@multispan l.18 ...{turn}{90}\makecell{测试类型}\end{turn}}}
我希望只在制表符或对齐的 \cr 之后看到 \omit。继续,我将忽略这种情况
...结果如下:
如您所见,存在两个问题:
- 文本“测试类型”下的行(最左侧列)应跨行,类似于“数据集”下的行(右上)。这意味着它应该涵盖标题“类型 1”和“类型 2”。
- 文本“类型 2”太长并且超出了单元格。
感谢您的帮助!
G。
答案1
以下内容可能更接近您想要实现的目标:
\documentclass[journal]{IEEEtran}
\usepackage{multirow}
\usepackage{makecell}
\usepackage{booktabs}
\usepackage{rotating}
\setcellgapes{\tabcolsep}
\begin{document}
\begin{table*}[t]
\centering
\makegapedcells
\caption{Some caption.}
\begin{tabular}{c| cl c|c|c|c|c}
\multicolumn{1}{l}{}& & & \multicolumn{5}{c}{Dataset} \\ \cline{4-8}
\multicolumn{1}{l}{}& & \multicolumn{1}{|l}{Results} & D1 & D2 & D3 & D4 & D5 \\
\cline{2-8}
\multirow{9}{*}{\rotatebox[origin=c]{90}{Test Type}}
& \multirow{6}{*}{\rotatebox[origin=c]{90}{Type 1}}
& \multicolumn{1}{|l}{test 1} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 2} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 3} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test 4} & -- & -- & -- & -- & -- \\
\cline{2-8}
& \multirow{2}{*}{
\begin{turn}{90}\makecell{Type 2}\end{turn}}
& \multicolumn{1}{|l}{test ver 1} & -- & -- & -- & -- & -- \\
&& \multicolumn{1}{|l}{test ver 2} & -- & -- & -- & -- & -- \\
\cline{2-8}
\end{tabular}
\end{table*}
\end{document}
我个人更喜欢不同的布局:
\documentclass[journal]{IEEEtran}
\usepackage{multirow}
\usepackage{booktabs}
\begin{document}
\begin{table*}[t]
\centering
\caption{Some caption.}
\begin{tabular}{cl ccccc}
& & \multicolumn{5}{c}{Dataset} \\ \cmidrule{3-7}
Test Type & Results & D1 & D2 & D3 & D4 & D5 \\
\midrule
\multirow{4}{*}{Type 1}
& test 1 & -- & -- & -- & -- & -- \\
& test 2 & -- & -- & -- & -- & -- \\
& test 3 & -- & -- & -- & -- & -- \\
& test 4 & -- & -- & -- & -- & -- \\
\midrule
\multirow{2}{*}{Type 2}& test ver 1 & -- & -- & -- & -- & -- \\
& test ver 2 & -- & -- & -- & -- & -- \\
\bottomrule
\end{tabular}
\end{table*}
\end{document}
答案2
我会这样做。在我看来,你把事情搞得太复杂了。正如评论中提到的,现在没有人再使用垂直线了
\documentclass[journal]{IEEEtran}
\usepackage{array, caption, floatrow, tabularx, makecell, booktabs}
\usepackage{multirow} % span text across multiple rows
\usepackage{rotating} % to write text vertically in a cell
\begin{document}
\begin{table*}[t]
\centering
\begin{tabular}{cl ccccc}
\toprule
& & \multicolumn{5}{c}{Dataset} \\
\cmidrule{3-7}
& Results & D1 & D2 & D3 & D4 & D5 \\
\midrule
Type 1 & test 1 & -- & -- & -- & -- & -- \\
& test 2 & -- & -- & -- & -- & -- \\
& test 3 & -- & -- & -- & -- & -- \\
& test 4 & -- & -- & -- & -- & -- \\
\midrule
Type 2 & test ver 1 & -- & -- & -- & -- & -- \\
& test ver 2 & -- & -- & -- & -- & -- \\
\bottomrule
\end{tabular}
\caption{Some caption.}
\end{table*}
\end{document}
答案3
与。{NiceTabular}
nicematrix
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
\renewcommand{\arraystretch}{1.4}
\begin{NiceTabular}{@{}cc|lc|c|c|c|c}
\Block{1-3}{}
& & & \Block[borders=bottom]{1-*}{Dataset} \\
& & Results & D1 & D2 & D3 & D4 & D5 \\
\Block{*-1}{\rotate Test Type}
& \Block{4-1}{\rotate Type 1} & test 1 & - & - & - & - & - \\
& & test 2 & - & - & - & - & - \\
& & test 3 & - & - & - & - & - \\
& & test 4 & - & - & - & - & - \\
\Hline
& \Block{2-1}{\rotate Type 2} & test ver 1 & - & - & - & - & - \\
& & test ver 2 & - & - & - & - & - \\
\CodeAfter \tikz \draw (3-|last) -| (last-|2) -- (last-|last) ;
\end{NiceTabular}
\end{document}