我想创建下表但我不知道该怎么做。
我还希望“长行文本真的很长”的行能够换行,占用 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}
\hline
1pt
该
\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}