如何为多行旋转文本和粗垂直线创建此表?

如何为多行旋转文本和粗垂直线创建此表?

我想创建下表但我不知道该怎么做。

我还希望“长行文本真的很长”的行能够换行,占用 2 个行而不是 1 个行,这样表格就不会太长。我希望这个表格能够适合 2 列纸的一列。

我在图片中加了一个箭头,因为我想让第一条垂直线也变粗,但我不知道该怎么做。

我还希望第 2-9 列下方的水平线为粗体。

谢谢你!

在此处输入图片描述

答案1

一种可能性是:

\documentclass[twocolumn]{article}
\usepackage{tabularx}
\usepackage{array}
\usepackage{rotating}
\usepackage{lipsum}

\renewcommand\tabularxcolumn[1]{>{\small}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcommand\RotText[1]{\rotatebox{90}{\parbox{2cm}{\centering#1}}}

\newlength{\arrayrulewidthOriginal}
\newcommand{\Cline}[2]{%
  \noalign{\global\setlength{\arrayrulewidthOriginal}{\arrayrulewidth}}%
  \noalign{\global\setlength{\arrayrulewidth}{#1}}\cline{#2}%
  \noalign{\global\setlength{\arrayrulewidth}{\arrayrulewidthOriginal}}}

\begin{document}

{
\setlength\tabcolsep{1pt}
\noindent\begin{tabularx}{\columnwidth}{|Y!{\vrule width 1pt}Y|Y|Y|Y|Y!{\vrule width 1pt}Y|Y|Y|Y|}
\cline{2-10}
\multicolumn{1}{c!{\vrule width 1pt}}{} & \multicolumn{5}{c!{\vrule width 1pt}}{Some text}  & \multicolumn{4}{c|}{Some text} \\
\cline{2-10}
\multicolumn{1}{c!{\vrule width 1pt}}{} & \RotText{Some really long text} & \RotText{Some really long text}
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} \\
\noalign{\hrule height 1pt}
some text & 11 & 44 & 11 & 54 & 34 & 54 & 23 & 11 & 12 \\
\hline
\end{tabularx}
}

\lipsum[1-10]

\end{document}

在此处输入图片描述

桌子特写:

在此处输入图片描述

一些解释性评论:

  • !{\vrule width 1pt}您可以使用而不是|(更改1pt为所需值)来生成所需厚度的垂直规则。

  • 您可以使用而不是(更改为所需值)来生成\hline所需厚度的水平线(类似于)。\noalign{\hrule height 1pt}\hline1pt

  • \Cline命令类似于\cline,但有一个强制参数,允许指定规则厚度:\Cline{<length>}{<column1>-<column2>};例如绘制一条跨越 2 至 4 列的\Cline{2pt}{2-4}水平规则厚度。2pt

  • tabularx包用于保证表格宽度等于\columnwidth。定义了一种新的列类型,内容居中;\tabularxcolumn还重新定义了m{...}列类型。

  • 旋转的文本是使用\parbox内部生成的\rotatebox

但请注意,您的表格违反了一些排版规则:垂直规则可以避免,旋转文本不是一种好的做法(读者思考)。也许您可以尝试重新制定布局?

这里有一个可能性,没有垂直规则,但有booktabs

\documentclass[twocolumn]{article}
\usepackage{tabularx}
\usepackage{array}
\usepackage{booktabs}
\usepackage{rotating}
\usepackage{lipsum}

\renewcommand\tabularxcolumn[1]{>{\small}m{#1}}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcommand\RotText[1]{\rotatebox{90}{\parbox{2cm}{\raggedright#1}}}
\begin{document}

{
\setlength\tabcolsep{1pt}
\noindent\begin{tabularx}{\columnwidth}{YYYYYYYYYY}
\cmidrule[1pt]{2-10}
\multicolumn{1}{c}{} & \multicolumn{5}{c}{Some text}  & \multicolumn{4}{c}{Some text} \\
\cmidrule(r){2-2}\cmidrule(r){3-3}\cmidrule(r){4-4}\cmidrule(r){5-5}
\cmidrule(r){6-6}\cmidrule(r){7-7}\cmidrule(r){8-8}\cmidrule(r){9-9}\cmidrule{10-10}
\multicolumn{1}{c}{} & \RotText{Some really long text} & \RotText{Some really long text}
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} & \RotText{Some really long text} 
  & \RotText{Some really long text} \\
\cmidrule[1pt](r){1-1}\cmidrule[1pt](r){2-6}\cmidrule[1pt]{7-10}
some text & 11 & 44 & 11 & 54 & 34 & 54 & 23 & 11 & 12 \\
some text & 11 & 44 & 11 & 54 & 34 & 54 & 23 & 11 & 12 \\
\bottomrule[1pt]
\end{tabularx}
}

\lipsum[1-10]
\end{document}

在此处输入图片描述

答案2

这是一个{NiceTabular}使用 的解决方案nicematrix

\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{nicematrix,tikz}

\begin{document}

\noindent
{\small
\setlength{\tabcolsep}{0pt}
\begin{NiceTabular}
 [hvlines,corners=NW,cell-space-limits=1pt]
 {c|[tikz=very thick]*{5}{X[c]}|[tikz=very thick]*{5}{X[c]}}
  & \Block{1-5}{Some text} &&&&& \Block{1-4}{Some text} \\
  \RowStyle{\rotate[c]}
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} 
  & \Block{}{Some really\\ long text} \\
  \Hline[tikz=very thick]
  \Block{}{\,some\\ text} & 11 & 14 & 11 & 54 & 34 & 54 & 23 & 11 & 12 \\
\end{NiceTabular}}

\lipsum[1-10]

\end{document}

上述代码的输出

相关内容