旋转表格中的列标题和行

旋转表格中的列标题和行

我不仅想旋转表格标题中的文本,还想插入垂直线并旋转 45 度(在 CaptionR3 和 CaptionR4 之间)。

感谢您的帮助!

\documentclass{article}

\usepackage{tabularx}
\newcolumntype{x}[1]{!{\centering\arraybackslash\vrule width #1}}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} % linksbündig mit Breitenangabe

\usepackage{adjustbox}
\usepackage{array}

\newcolumntype{R}[2]{%
    >{\adjustbox{angle=#1,lap=\width-(#2)}\bgroup}%
    l%
    <{\egroup}%
}
\newcommand*\rot{\multicolumn{1}{R{45}{1em}}}% no optional argument here, please!

\usepackage{arydshln}

\begin{document}

\begin{tabular}{L{0.9cm}|L{2.0cm}|l|l}
\multicolumn{1}{c|}{Caption1} & \multicolumn{1}{c|}{Caption2} & \rot{CaptionR3} & \rot{CaptionR4} \\
\hline      Text1 & Text4 & - \\
\hdashline  Text2 & Text5 & - \\
\hdashline  Text3 & Text6 & - \\

\end{tabular}

\end{document}

答案1

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

旋转的角度可以通过参数设置\angle

定义一个命令\Rot来旋转标签(该命令向右进行平移以获得更好的输出)。

必须在of\MixedRule中使用命令才能绘制与该标签相对应的规则(这些规则的前言中不应放置任何符号)。\CodeAfter{NiceTabular}|

您需要多次编译。

\documentclass{article}
\usepackage{xparse}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}

\ExplSyntaxOn
\NewExpandableDocumentCommand { \ValuePlusOne } { m } 
  { \int_eval:n { \int_use:c { c @ #1 } + 1 } }
\NewExpandableDocumentCommand { \Sec } { m } 
  { \fp_eval:n { secd ( #1 ) } }
\NewDocumentCommand { \Rot } { m }
  { 
    \hbox_to_wd:nn { 1 em }
      { 
        \hbox_overlap_right:n 
          { 
            \skip_horizontal:n { \fp_to_dim:n { 7 * cosd (\Angle) } } 
            \rotatebox{\Angle}{#1}
          } 
      } 
  }
\ExplSyntaxOff

\NewDocumentCommand { \MixedRule } { m }
  {
    \begin{tikzpicture}
    \coordinate (a) at (2-|#1) ;
    \coordinate (b) at (1-|#1) ;
    \draw (a) -- ($(a)!\Sec{90-\Angle}!\Angle-90:(b)$) ;
    %
    \draw (2-|#1) -- (\ValuePlusOne{iRow}-|#1) ;
    \end{tikzpicture}
  }

\begin{document}

\def\Angle{45}

\begin{NiceTabular}{c|c|ccc}
Caption 1 & Caption 2 & \Rot{Caption 3} & \Rot{Caption 4} & \Rot{Caption 5}\\ \hline
Text1 & Text4 & -- & -- & -- \\ \hline  
Text2 & Text5 & -- & -- & -- \\ \hline  
Text3 & Text6 & -- & -- & --
\CodeAfter
\MixedRule{4}
\MixedRule{5}
\end{NiceTabular}
    
\bigskip
\def\Angle{60}

\begin{NiceTabular}{c|c|ccc}
Caption 1 & Caption 2 & \Rot{Cap 3} & \Rot{Cap 4} & \Rot{Cap 5}\\ \hline
Text1 & Text4 & -- & -- & -- \\ \hline  
Text2 & Text5 & -- & Text7 & -- \\ \hline  
Text3 & Text6 & -- & -- & --
\CodeAfter
\MixedRule{4}
\MixedRule{5}
\end{NiceTabular}
    
\bigskip
\def\Angle{90}

\begin{NiceTabular}{c|c|ccc}
Caption 1 & Caption 2 & \Rot{Caption 3} & \Rot{Caption 4} & \Rot{Caption 5}\\ \hline
Text1 & Text4 & -- & -- & -- \\ \hline  
Text2 & Text5 & -- & Text7 & -- \\ \hline  
Text3 & Text6 & -- & -- & --
\CodeAfter
\MixedRule{4}
\MixedRule{5}
\end{NiceTabular}

\end{document}

上述代码的输出

最后一个例子是参数的值为 90 \Angle

答案2

有一个简单的方法可以做到这一点,但你必须手动调整虚线的长度:

\documentclass{article}

\usepackage{tabularx}
\newcolumntype{x}[1]{!{\centering\arraybackslash\vrule width #1}}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} % linksbündig mit Breitenangabe

\usepackage{adjustbox}
\usepackage{array}

\newcolumntype{R}[2]{%
    >{\adjustbox{angle=#1,lap=\width-(#2)}\bgroup}%
    l%
    <{\egroup}%
}
\newcommand*\rot{\multicolumn{1}{R{45}{1em}}}% no optional argument here, please!

\usepackage{arydshln}

\begin{document}

\begin{tabular}{L{0.9cm}|L{2.0cm}|l|@{}l@{}l}
  \multicolumn{1}{c|}{Caption1} & \multicolumn{1}{c|}{Caption2} & \rot{CaptionR3} &
  \hspace*{-1ex}\rot{\hspace*{-1ex}- - - - - - - - -} &\rot{CaptionR4} \\
\hline      Text1 & Text4 & - \\
\hdashline  Text2 & Text5 & - \\
\hdashline  Text3 & Text6 & - \\

\end{tabular}

\end{document}

带有旋转虚线的表格

相关内容