在所有单元格中生成带有旋转文本的列

在所有单元格中生成带有旋转文本的列

我想将显示tabularx表格的第一列和第二列设置为自动旋转一行中的单个单元格或由单元格连接的单元格组成的单个单元格内的任何文本,\multirow并将其垂直和水平居中,同时允许通过或其他方法调整列的高度,\\[height]并对内容进行顶部垂直对齐。

只是为了通过第一列解释规则,我也需要\noalign{\hrule height 1pt}表现得像\cline{2-4},因此不会影响第一列,但我想这是另一个问题。

最小工作示例:

\documentclass[11pt, a4paper]{article}
\usepackage{lmodern}
\usepackage{array}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{tabularx}
\begin{document}

\scriptsize
\setlength{\extrarowheight}{0.2em}
\noindent\begin{tabularx}{\textwidth}{!{\vrule width 1pt} p{0.3cm} !{\vrule width 1pt} p{0.5cm} | p{4cm} | X !{\vrule width 1pt}}
\noalign{\hrule height 1pt}
\multirow{4}{*}{\rotatebox{90}{Ten}}&\multirow{2}{*}{\rotatebox{90}{Eight}} & One & Two\\[0.5cm] \cline{3-4}
& & Three & Four\\[1cm] \noalign{\hrule height 1pt}
&\multirow{2}{*}{\rotatebox{90}{Nine}} & Five & Six\\[0.5cm] \cline{3-4}
& & \multicolumn{2}{ l !{\vrule width 1pt}}{Seven}\\[1cm]
\noalign{\hrule height 1pt}
\end{tabularx}

\end{document}

当前状态。

图。1:当前状态。

目的。

图 2:近似目标(在图形编辑程序中进行数字化操作)。

答案1

  • 您可以使用选项自定义旋转的原点,例如\rotatebox[origin=c]{90}{...}

  • 在行尾手动添加的垂直空间会破坏对齐。看看没有它是什么样子:

    \documentclass[11pt, a4paper]{article}
    \usepackage{lmodern}
    \usepackage{array}
    \usepackage{graphicx}
    \usepackage{multirow}
    \usepackage{tabularx}
    \begin{document}
    
    \scriptsize
    \setlength{\extrarowheight}{0.2em}
    \noindent\begin{tabularx}{\textwidth}{!{\vrule width 1pt}
        p{0.3cm} !{\vrule width 1pt} p{0.5cm} | p{4cm} | X !{\vrule
        width 1pt}}
    \noalign{\hrule height 1pt}
    \multirow{4}{*}{\rotatebox[origin=c]{90}{Ten}}&
        \multirow{2}{*}{\rotatebox[origin=c]{90}{Eight}}
        & One & Two\\\cline{3-4}
    & & Three & Four\\\cline{2-4}
    &\multirow{2}{*}{\rotatebox[origin=c]{90}{Nine}}
    & Five & Six\\ \cline{3-4}
    & & \multicolumn{2}{ l !{\vrule width 1pt}}{Seven}\\
    \noalign{\hrule height 1pt}
    \end{tabularx}
    
    \end{document}
    

在此处输入图片描述

  • 如果您进行了此类手动调整(这是multirow不知道的),则可以使用可选fixup参数进行\multirow更正:

    \multirow{nrows}[bigstruts]{width}[fixup]{text}
    
  • 对于自动旋转,我将使用包中的>{...}和以及包中的环境,例如>{...}arraysidewaysrotating

    >{\begin{sideways}}p{0.3cm}<{\end{sideways}}
    

甚至为其定义一个新的列类型:

\newcolumntype{R}[1]{>{\begin{sideways}}p{#1}<{\end{sideways}}}

下面是显示自动旋转的示例,但没有多行,因为它在旋转后应用时不会按预期工作:

\documentclass[11pt, a4paper]{article}
\usepackage{lmodern}
\usepackage{array}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{rotating}
\newcolumntype{R}[1]{>{\begin{sideways}}p{#1}<{\end{sideways}}}
\begin{document}
\scriptsize
\setlength{\extrarowheight}{0.2em}
\noindent\begin{tabularx}{\textwidth}{!{\vrule width 1pt}
    R{0.3cm} !{\vrule width 1pt} R{0.5cm} | p{4cm} | X !{\vrule
    width 1pt}}
\noalign{\hrule height 1pt}
Ten & Eight
& One & Two\\\cline{3-4}
& & Three & Four\\\cline{2-4}
& Nine
& Five & Six\\ \cline{3-4}
& & \multicolumn{2}{ l !{\vrule width 1pt}}{Seven}\\
\noalign{\hrule height 1pt}
\end{tabularx}
\end{document}

相关内容