桌子上的大箭头(覆盖)

桌子上的大箭头(覆盖)

如图所示,有什么办法可以实现吗?

在此处输入图片描述

\documentclass[12pt,a4paper]{article}

\usepackage{rotating} % sidewaytables


\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}



\begin{sidewaystable}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,left delimiter=|, right delimiter=|] {
    & K=3 & K=4 & K=5 & K=6 & K=7 & K=8 & K=9 & K=10 & K=11 & K=12\\
    \hline
    C=2 &4&7&10&12&14&16&18&20&&\\ \hline
    C=3 &4&7&11&16&21&24&27&30&&\\ \hline
    C=4 &4&7&11&16&22&29&36&40&&\\ \hline
    C=5 &4&7&11&16&22&29&37&46&&\\ \hline
    C=6 &4&7&11&16&22&29&37&46&&\\ \hline
    C=7 &4&7&11&16&22&29&37&46&&\\ \hline
    C=8 &4&7&11&16&22&29&37&46&&\\ \hline
    C=9 &4&7&11&16&22&29&37&46&&\\ \hline
    C=10&4&7&11&16&22&29&37&46&&\\
};
\draw[->,red,thick] (m-2-2.west) -- (m-2-3.east);
\draw[->,red,thick] (m-4-4.west) -- (m-4-7.east);
\draw[->,red,thick] (m-6-7.west) -- (m-6-8.east);
\draw[->,red,thick] (m-9-3.west) -- (m-9-6.east);
\end{tikzpicture}

\end{sidewaystable}


\end{document}

这可以正常工作。但是我如何将其变成“表格”形式,即用垂直线分隔各列。

答案1

此方法使用stackengine包的\topinset宏将箭头覆盖在表格上。也许可以构造更好的箭头...我只是\rightarrow在长箭头的末尾添加了一个\rule

使构造变得简单的关键是计算四个长度,\cellv\cellh\vertoffset\horzoffset。一旦完成,每个箭头的水平和垂直偏移量就是\cellh和的整数倍\cellv

\documentclass[12pt,a4paper]{article}

\usepackage{amsmath,enumerate}
\usepackage{rotating} % sidewaytables
\usepackage{xcolor}
\usepackage{stackengine}
\newlength\cellv
\newlength\cellh
\newlength\vertoffset
\newlength\horzoffset
\setlength{\cellv}{\baselineskip}
\setlength{\cellh}{3.6em}
\setlength\vertoffset{.4\baselineskip}
\setlength\horzoffset{1.5em}
\def\stackalignment{l}
\newcommand\myarrow[1]{$\color{red}\rule[.47ex]{#1}{.6pt}\!\!\!\rightarrow$}

\begin{document}

\begin{sidewaystable}

\[
\topinset{\myarrow{1.5\cellh}}{%
\topinset{\myarrow{3.5\cellh}}{%
\topinset{\myarrow{5.5\cellh}}{%
\(
    \begin{array}{c|c|c|c|c|c|c|c|c|c|c}
    & K=3 & K=4 & K=5 & K=6 & K=7 & K=8 & K=9 & K=10 & K=11 & K=12\\
    \hline
    C=2 &4&7&10&12&14&16&18&20&&\\ \hline
    C=3 &4&7&11&16&21&24&27&30&&\\ \hline
    C=4 &4&7&11&16&22&29&36&40&&\\ \hline
    C=5 &4&7&11&16&22&29&37&46&&\\ \hline
    C=6 &4&7&11&16&22&29&37&46&&\\ \hline
    C=7 &4&7&11&16&22&29&37&46&&\\ \hline
    C=8 &4&7&11&16&22&29&37&46&&\\ \hline
    C=9 &4&7&11&16&22&29&37&46&&\\ \hline
    C=10&4&7&11&16&22&29&37&46&&
    \end{array}
\)
}{1\cellv+\vertoffset}{3\cellh+\horzoffset}
}{2\cellv+\vertoffset}{5\cellh+\horzoffset}
}{3\cellv+\vertoffset}{7\cellh+\horzoffset}
\]
\end{sidewaystable}

\end{document}

在此处输入图片描述

答案2

\documentclass[12pt,a4paper]{article}

\usepackage{rotating} % sidewaytables


\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}



\begin{sidewaystable}

\begin{tikzpicture}
\matrix (m) [matrix of math nodes,left delimiter=|, right delimiter=|] {
    & K=3 & K=4 & K=5 & K=6 & K=7 & K=8 & K=9 & K=10 & K=11 & K=12\\
    \hline
    C=2 &4&7&10&12&14&16&18&20&&\\ \hline
    C=3 &4&7&11&16&21&24&27&30&&\\ \hline
    C=4 &4&7&11&16&22&29&36&40&&\\ \hline
    C=5 &4&7&11&16&22&29&37&46&&\\ \hline
    C=6 &4&7&11&16&22&29&37&46&&\\ \hline
    C=7 &4&7&11&16&22&29&37&46&&\\ \hline
    C=8 &4&7&11&16&22&29&37&46&&\\ \hline
    C=9 &4&7&11&16&22&29&37&46&&\\ \hline
    C=10&4&7&11&16&22&29&37&46&&\\
};
\draw[->,red,thick] (m-2-2.west) -- (m-2-3.east);
\draw[->,red,thick] (m-4-4.west) -- (m-4-7.east);
\draw[->,red,thick] (m-6-7.west) -- (m-6-8.east);
\draw[->,red,thick] (m-9-3.west) -- (m-9-6.east);
\end{tikzpicture}

\end{sidewaystable}


\end{document}

这是来自中文论坛的另一个答案。但是,我无法将其变成“表格”形式,即用垂直线分隔各列。

Gonzalo Medina 编辑:

您可以按照以下步骤添加线条并缩短箭头末端:

\documentclass[12pt,a4paper]{article}
\usepackage{rotating} % sidewaytables
\usepackage{tikz}
\usetikzlibrary{matrix}

\tikzset{ 
table/.style={
  matrix of math nodes,
  row sep=-\pgflinewidth,
  column sep=-\pgflinewidth,
  nodes={rectangle,draw=black,text width=3.3em,align=center},
  text depth=0.25ex,
  text height=2ex,
  nodes in empty cells
  }
}

\begin{document}

\begin{sidewaystable}
\begin{tikzpicture}
\matrix (m) [table] {
    & K=3 & K=4 & K=5 & K=6 & K=7 & K=8 & K=9 & K=10 & K=11 & K=12\\
    \hline
    C=2 &4&7&10&12&14&16&18&20&&\\ \hline
    C=3 &4&7&11&16&21&24&27&30&&\\ \hline
    C=4 &4&7&11&16&22&29&36&40&&\\ \hline
    C=5 &4&7&11&16&22&29&37&46&&\\ \hline
    C=6 &4&7&11&16&22&29&37&46&&\\ \hline
    C=7 &4&7&11&16&22&29&37&46&&\\ \hline
    C=8 &4&7&11&16&22&29&37&46&&\\ \hline
    C=9 &4&7&11&16&22&29&37&46&&\\ \hline
    C=10&4&7&11&16&22&29&37&46&&\\
};
\begin{scope}[shorten >= 10pt,shorten <= 10pt]
\draw[->,red,thick] (m-2-2.west) -- (m-2-3.east);
\draw[->,red,thick] (m-4-4.west) -- (m-4-7.east);
\draw[->,red,thick] (m-6-7.west) -- (m-6-8.east);
\draw[->,red,thick] (m-9-3.west) -- (m-9-6.east);
\end{scope}
\end{tikzpicture}
\end{sidewaystable}

\end{document}

在此处输入图片描述

答案3

{NiceTabular}这是使用 的解决方案nicematrix。该环境类似于经典环境{tabualar},但还会在单元格、行和列下创建 PGF/TikZ 节点。在构建主数组后,可以使用这些节点按照您想要的规则使用 TikZ 进行绘制。

\documentclass[12pt,a4paper]{article}
\usepackage{rotating}
\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}

\begin{sidewaystable}

\begin{NiceTabular}{*{11}{c}}[hvlines-except-borders]
    & K=3 & K=4 & K=5 & K=6 & K=7 & K=8 & K=9 & K=10 & K=11 & K=12\\
    C=2 &4&7&10&12&14&16&18&20&&\\ 
    C=3 &4&7&11&16&21&24&27&30&&\\ 
    C=4 &4&7&11&16&22&29&36&40&&\\ 
    C=5 &4&7&11&16&22&29&37&46&&\\ 
    C=6 &4&7&11&16&22&29&37&46&&\\ 
    C=7 &4&7&11&16&22&29&37&46&&\\ 
    C=8 &4&7&11&16&22&29&37&46&&\\ 
    C=9 &4&7&11&16&22&29&37&46&&\\ 
    C=10&4&7&11&16&22&29&37&46&&\\
\Hline
\CodeAfter
\begin{tikzpicture} [->,red,thick,shorten > = -1mm, shorten < = -1mm]
   \draw (2-2.west) -- (2-3.east);
   \draw (4-4.west) -- (4-7.east);
   \draw (6-7.west) -- (6-8.east);
   \draw (9-3.west) -- (9-6.east);
\end{tikzpicture}
\end{NiceTabular}

\end{sidewaystable}

\end{document}

上述代码的输出

相关内容