找回密码
 快速注册
搜索
查看: 94|回复: 11

用tikz画一个类似国际象棋盘的图

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2024-3-7 16:48 |阅读模式
QQ截图20240307164815.jpg
  1. \begin{tikzpicture}[every node/.style={inner sep=0pt}]
  2. \matrix (m) [matrix of math nodes,column sep=0pt,row sep=0pt,r/.style={fill=red!50,minimum size=7mm},
  3. b/.style={fill=blue!50,minimum size=7mm}]
  4. {
  5. \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~};\\
  6. \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~};\\
  7. \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~};\\
  8. \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~};\\
  9. \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~};\\
  10. \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~};\\
  11. \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~};\\
  12. \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~};\\
  13. };
  14. \end{tikzpicture}
复制代码


目前效果和代码如上,参考了这帖里链接中的方案和这帖里的矩阵画法。

现在还差打那个格子线没成,这个比如我要画成黑色的线,要怎么弄才简单一些?(比如能直接设置矩阵格子线的参数之类的)

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-7 22:09
用什么方案好,还视乎你往后还会不会继续在这个图上画些啥,或者是否还有很多类似的棋盘要画,只是染色方式不同,等等……

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-7 23:54
本帖最后由 kuing 于 2024-3-8 00:39 编辑 看了一会儿 tikz 手册,发现一个叫 execute at begin cell 的参数,可以往每个非空的 cell 前面插入东西,于是就可以这样玩儿了:

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2024-3-8 09:02
kuing 发表于 2024-3-7 22:09
用什么方案好,还视乎你往后还会不会继续在这个图上画些啥,或者是否还有很多类似的棋盘要画,只是染色方式 ...

目前只有两个棋盘型的图要画,只是填充方格颜色,还需要格子线,不需要再画别的东西。

这个我今天搜到一个帖子:tex.stackexchange.com/questions/226223/borders-of-a-matrix-are-not-well-placed
然后用帖子里的方式,让那些node都画上边线,再把边距用pgflinewidth调一下就好了,现在代码如下:
  1. \begin{tikzpicture}[every node/.style={inner sep=0pt}]
  2. \matrix (m) [
  3. matrix of math nodes,
  4. nodes=draw,
  5. row sep =-\pgflinewidth,
  6. column sep = -\pgflinewidth,
  7. r/.style={black, line width=1.1\pgflinewidth, fill=red!10, minimum size=7mm},
  8. b/.style={black, line width=1.1\pgflinewidth, fill=blue!10, minimum size=7mm}
  9. ]
  10. {
  11. \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~};\\
  12. \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~};\\
  13. \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~};\\
  14. \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~};\\
  15. \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~};\\
  16. \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~};\\
  17. \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~};\\
  18. \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~}; & \node[b]{~}; & \node[b]{~}; & \node[r]{~}; & \node[r]{~};\\
  19. };
  20. \end{tikzpicture}
复制代码

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-8 11:45
abababa 发表于 2024-3-8 09:02
目前只有两个棋盘型的图要画,只是填充方格颜色,还需要格子线,不需要再画别的东西。

这个我今天搜到一 ...

咋还用这复杂的写法,没看 3# 的代码吗?

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2024-3-8 13:32
kuing 发表于 2024-3-8 11:45
咋还用这复杂的写法,没看 3# 的代码吗?


原来是想把\node[ b ]{~}这种替换成一个新命令,但是我想让这个命令只在这个tikzpicture里起作用,离开这个环境就失效,避免其它地方再次用它,所以就没改。

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-8 14:13
abababa 发表于 2024-3-8 13:32
原来是想把\node[ b ]{~}这种替换成一个新命令,但是我想让这个命令只在这个tikzpicture里起作用,离开这 ...

那你将 3# 的 \newcommand 那行放 tikzpicture 环境的内部,这样就只在该图里有效。

PS、3# 中的 0.4pt 就是默认线宽,不过的确改成 \pgflinewidth 是更好的选择。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2024-3-8 16:03
kuing 发表于 2024-3-8 14:13
那你将 3# 的 \newcommand 那行放 tikzpicture 环境的内部,这样就只在该图里有效。

PS、3# 中的 0.4pt  ...

这样的话,\test这个命令在下一题里想用,是不是就得renewcommand才行?我刚才试了,提示LaTeX Error: Command \test already defined.

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-8 17:10
abababa 发表于 2024-3-8 16:03
这样的话,\test这个命令在下一题里想用,是不是就得renewcommand才行?我刚才试了,提示LaTeX Error: Co ...

定义放环境里面那下一题还想用就得再次 \newcommand。
不过你说的提示我不太理解,\test already defined 的话,那就是已经有定义,你确定 \test 是放进 tikzpicture 里了吗?

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2024-3-8 20:37
kuing 发表于 2024-3-8 17:10
定义放环境里面那下一题还想用就得再次 \newcommand。
不过你说的提示我不太理解,\test already defined ...

是的,我知道这是怎么回事了,因为我把这段复制粘贴到测试文档里,而那个文档前面定义过\test,所以就报错了,我开始以为是两个tikzpicture环境里的定义冲突,怎么也找不出原因来。

点评

😅下次得取个长点的名,不能再习惯性地写 \test 了  发表于 2024-3-8 21:10

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2024-3-8 21:27
本帖最后由 kuing 于 2024-3-8 21:37 编辑 还有一种简便写法 |[...]| :

这样就不需要定义新命令,也是个不错的选择。

(小 b 改成了大 B,因为 [ b ] 触发了 discuz 粗体😣)

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 16:00

Powered by Discuz!

× 快速回复 返回顶部 返回列表