![我如何制作一个带有一些叠加线条的表格?](https://linux22.com/image/336484/%E6%88%91%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E5%B8%A6%E6%9C%89%E4%B8%80%E4%BA%9B%E5%8F%A0%E5%8A%A0%E7%BA%BF%E6%9D%A1%E7%9A%84%E8%A1%A8%E6%A0%BC%EF%BC%9F.png)
我使用 PowerPoint 制作了下表,现在我想使用 LuaLaTeX 或 XeLaTeX 生成它。我需要使用大小为 10.5 pt 的 Arial 字体。
我发现自己面临着几个挑战:
- 生成表格
- 分别在 2 和 3 以及 7 和 8 之间绘制两条虚线
- 绘制连接表格中所有 5 的直线
- 在桌子顶部绘制一串红色圆形节点
- 对应值3,5的节点在3和4之间浮动
我在网上搜索过,但没有找到类似的例子。我读过 TeX.SE 中有关表格的其他问题,我想我应该使用包matrix of nodes
中提供的表格tikz
。我读过 TikZ & PGF 手册中涵盖矩阵库的部分,但我还远远没有到达这里。我确实需要帮助。
答案1
这是一个具有pst-node
和的解决方案arydshln
。它包括使用普通tabularx
环境并将相关单元定义为各种类型的节点,并通过节点连接将它们链接起来。
它仅编译xelatex
。
\documentclass{article}
\usepackage{array, tabularx, arydshln}
\usepackage{geometry}
\usepackage{pst-node, multido}
\usepackage{fontspec}
\setsansfont{Arial}
\begin{document}
\begin{table}[h]
\sffamily\renewcommand\arraystretch{1.8}\centering
\fontsize{10.5}{13}\selectfont
\psset{linecolor=red}
\makebox[0pt]{\begin{tabularx}{1.2\textwidth}{|*{12}{ >{\centering\arraybackslash}X|}}
\multicolumn{12}{c}{TITLE} \\
\hline
\multicolumn{12}{|c|}{SOME INFORMATION} \\
\hline
\multicolumn{4}{|c|}{GROUP 1} & \multicolumn{2}{c|}{GROUP 2} & \multicolumn{2}{c|}{GROUP 3} & \multicolumn{4}{c|}{GROUP 4} \\
A & B & A & B & \multicolumn{2}{c|}{C} & \multicolumn{2}{c|}{D} & & & & \\
AA & AA & BB & BB & CC & DD & AA & BB & EE & FF & GG & HH \\
\hline
10 & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10 \\
9 & 9 & 9 & 9 & 9 & 9 & 9 & 9 & 9 & 9 & 9 & 9 \\
8 & 8 & 8 & 8 & 8 & 8 & 8 & 8 & \circlenode{c9}{8} & 8 & 8 & 8 \\
\hdashline
7 & 7 & 7 & 7 & 7 & 7 & 7 & 7 & 7 & \circlenode{c10}{7} & 7 & 7 \\
6 & \circlenode{c2}{6} & 6 & 6 & 6 & 6 & 6 & 6 & 6 & 6 & 6 & 6 \\
\rnode{R1}{5} & \rnode{R2}{5} & \rnode{R3}{5} & \rnode{R4}{5} & \rnode{R5}{5} & \rnode{R6}{5} & \rnode{R7}{5} & \rnode{R8}{5} & \rnode{R9}{5} & \rnode{R10}{5} & \rnode{R11}{\circlenode{c11}{5}} & \rnode{R12}{5} \\
\circlenode{c1}{4} & 4 & 4 & 4 &\circlenode{c5}{4} & 4 & \rnode{t7}{4} & \circlenode{c8}{4} & 4 & 4 & 4 & 4 \\
3 & 3 & 3 & 3 & 3 & 3 & \rnode{b7}{3} & 3 & 3 & 3 & 3 & 3 \\
\hdashline
2 & 2 & \circlenode{c3}{2} & \circlenode{c4}{2} & 2 & 2 & 2 & 2 & 2 & 2 & 2 & \circlenode{c12}{2} \\
1 & 1 & 1 & 1 & 1 & \circlenode{c6}{1} & 1 & 1 & 1 & 1 & 1 & 1 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\hline
\end{tabularx}}
\midAB(t7)(b7){m7}\rput(m7){\circlenode[framesep=0pt]{c7}{3,5}}%
\multido{\ia=1+1, \ib=2+1}{11}{\ncline{c\ia}{c\ib}}
\pnode[-0.85cm, 0](R1){R0}
\pnode[0.85cm, 0](R12){R13}
\psset{linewidth=0.5pt, linecolor=black, nodesep=3pt}
\multido{\ia=0+1, \ib=1+1}{13}{\ncline{R\ia}{R\ib}}
\end{table}
\end{document}
答案2
通过生成表格,你的意思是首先创建一个表格吗?
我建议将类似的事情分解成单独的任务(就像你列出的清单一样),然后一步一步地完成,从一个非常基本的结构开始,然后逐渐建立起来。这些任务中的每一个都可以在互联网上的各种示例中找到(特别是这里),但是如果你需要更直接的起点,这应该可以让你开始。
代码
\documentclass{article}
\usepackage{tikz}
\usepackage{fontspec}
\setmainfont{Arial}
\usetikzlibrary{fit,matrix}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[mycircle/.style={draw,circle, minimum size=1cm}]
% table
\matrix[draw=black,row sep=0.75cm,column sep=0.75cm]{
\node {}; & \node {group 1}; & \node {}; \\
\node {a}; & \node {b}; & \node {a}; \\
\node {aa}; & \node {aa}; & \node {bb}; \\
\node {..}; & \node {..}; & \node {..}; \\
\node {6}; & \node(baa6)[draw=red,text=black,mycircle] {6}; & \node {6}; \\
\node(aaa5) {5}; & \node(baa5) {5}; & \node(abb5) {5}; \\
\node(aaa4)[draw=red,text=black,mycircle] {4}; & \node {4}; & \node {4}; \\
\node {3}; & \node {3}; & \node(abb3) {3}; \\
\node(aaa2) {2}; & \node {2}; & \node(abb2) {2}; \\
};
% straight line between 5's
\draw(aaa5)--(baa5)--(abb5);
% dashed lines above 2's
\draw[dashed](aaa2.north west)--(abb2.north east);
% the 3,5 node
\node(aab35)[draw=red,text=black,mycircle,above=0.05cm of abb3] {3.5};
% string of red circular nodes
\draw[red](aaa4)--(baa6)--(aab35);
\end{tikzpicture}
\end{document}
结果