如图所示,有什么办法可以实现吗?
\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}