![旋转表格中的列标题和行](https://linux22.com/image/421771/%E6%97%8B%E8%BD%AC%E8%A1%A8%E6%A0%BC%E4%B8%AD%E7%9A%84%E5%88%97%E6%A0%87%E9%A2%98%E5%92%8C%E8%A1%8C.png)
我不仅想旋转表格标题中的文本,还想插入垂直线并旋转 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}