我有一个网格,我想对它做一些改变,但没有想法。
我的最小例子:
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[step=2cm,color=gray,rotate=45] (-1,-1) grid (9,9);
\node at (-0.5,+0.5) {A};
\end{tikzpicture}
\end{document}
但这并不能给我答案。
我真正想要的是
(i) 每条相邻的线都有不同的颜色(总共两种,可能一种是红色,另一种是蓝色)。
(ii) 然后在蓝线和红线相交的地方画一个圆圈(用圆圈隐藏十字),圆圈内有一个文本,例如A(我放错了),他们经过的每一个地方。
(部分接近)
不要考虑背景颜色。但类似于这个有向(带箭头)网络。带有虚线和完整圆圈,标签不同。
我对 TikZ 和 LaTeX 绘图还不熟悉。抱歉。
答案1
问题不太清楚。当我准备这个解决方案时,我看到 marsupilam 已经回答了非常类似的问题。我的解决方案的主要区别在于包含一个\path[clip]
以删除不需要的部分:
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path[clip] (-3,-3) rectangle +(6,6);
\begin{scope}[rotate=45]
\foreach \x in {-4,...,4} {
\draw[red] (\x, -4) -- +(0,8);
}
\foreach \y in {-4,...,4} {
\draw[blue] (-4,\y) -- +(8,0);
}
\foreach \x in {-4,...,4}
\foreach \y in {-4,...,4}
\node[draw,circle,fill=white, inner sep=2pt] at (\x,\y) {A};
\end{scope}
\end{tikzpicture}
\结束{文档}
结果:
更新
楼主要求节点之间画箭头,一开始我想的是装饰一下边,但最后还是觉得下面的方法简单多了,箭头稍微偏移了一下:
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}[>=stealth]
\path[clip] (-3,-3) rectangle +(6,6);
\begin{scope}[rotate=45]
\foreach \x in {-4,...,4}
\foreach \y in {-4,...,4} {
\draw[blue,->] (\x-0.4, \y) -- (\x+0.6, \y);
\draw[red, ->] (\x, \y-0.5) -- (\x, \y+0.6);
\node[draw,circle,fill=white, inner sep=2pt] at (\x,\y) {A};
}
\end{scope}
\end{tikzpicture}
\end{document}
更新 2
OP 后来要求为备选节点提供不同的样式/内容。最简单的方法是计算mod(abs(x+y), 2)+1
只有两个可能结果(1 和 2)的函数,并使用此结果在节点内容中设置适当的子索引,并选择不同的 tikz 样式。
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\tikzset{
mynode/.style = {circle, draw, thick, fill=white, inner sep=0pt},
type1/.style = {mynode},
type2/.style = {mynode, dashed}
}
\begin{document}
\begin{tikzpicture}[>=stealth]
\path[clip] (-3,-3) rectangle +(6,6);
\begin{scope}[rotate=45]
\foreach \x in {-4,...,4}
\foreach \y in {-4,...,4} {
\pgfmathsetmacro{\type}{int(mod(abs(\x+\y),2)+1)};
\draw[blue,->] (\x-0.4, \y) -- (\x+0.6, \y);
\draw[red, ->] (\x, \y-0.5) -- (\x, \y+0.6);
\node[type\type]
at (\x,\y) {$A_\type$};
}
\end{scope}
\end{tikzpicture}
\end{document}
答案2
更新
带夹子,无坐标标签
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path[clip] (-10,-4) rectangle +(8,8);
\begin{scope}[rotate=45]
\draw[step=4cm,color=blue, thick] (-15,-15) grid (9,9);
\draw[step=4cm,color=red,thick, shift={(-2cm,-2cm)}] (-13,-13) grid (11,11);
\foreach \i in {-14,-12,...,8}{%
\foreach \j in {-14,-12,...,8}
\node[fill=black!30,circle,radius=2pt] at (\i,\j) {A};
}
\end{scope}
\end{tikzpicture}
\end{document}
正如其他人提到的那样,这个问题并不明确。我的解释是这样的:
- 平行网格线(在两个轴上)应该具有交替的颜色。
- 带有文字的圆圈
显然,圆圈不必在每个交点上,您可以自己在相关坐标上添加节点。我已将坐标留在节点上方,供您参考。如果不需要,您可以在自己的代码中省略它们。
另外,问题中的图像在节点之外有标签,所以我一时对您想要什么感到困惑。
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[rotate=45]
\draw[step=4cm,color=blue, thick] (-3,-3) grid (9,9);
\draw[step=4cm,color=red,thick, shift={(-2cm,-2cm)}] (-1,-1) grid (11,11);
\foreach \i in {-2,0,...,8}{%
\foreach \j in {-2,0,...,8}
\node[fill=black!30,circle,radius=2pt,label={[above]:(\i,\j)}] at (\i,\j) {A};
}
\end{tikzpicture}
\end{document}
我的代码的关键:
基本上,我将网格大小从 加倍2cm
到4cm
,并设置两个相互叠加的网格,并进行移位。这样,我就可以为网格设置两种颜色。
答案3
欢迎来到 TeX.SX!
编辑版本
输出
更接近你的照片。这样好些吗?
代码
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=45]
\coordinate (SE) at (-1,-1) ;
\coordinate (NW) at (9,9) ;
\foreach \x in {0,2,...,8}
{
\coordinate (X) at (\x,\x);
\draw [red] (X-|SE) -- (X-|NW) ;
\draw [blue] (X|-SE) -- (X|-NW) ;
}
\foreach \x in {0,2,...,8}
{
\foreach \y in {0,2,...,8}
{
\node [circle, draw, fill=green, fill opacity=.8, text opacity=1] at (\x,\y) {A};
}
}
\end{scope}
\end{tikzpicture}
\end{document}
原始版本
这就是你需要的吗?
输出
代码
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\begin{scope}[rotate=45]
\coordinate (SE) at (-1,-1) ;
\coordinate (NW) at (9,9) ;
\draw [step=2cm,color=gray] (SE) grid (NW);
\coordinate (A) at (2,4) ;
\draw [blue, thick,] (SE|-A) -- (NW|-A) ;
\draw [red, thick,] (SE-|A) -- (NW-|A) ;
\node [circle, draw, fill=green, fill opacity=.8, text opacity=1] at (A) {A};
\end{scope}
\end{tikzpicture}
\end{document}