tikz中关于 graph 和 foreach 的两个问题

发布于 2023-01-08 16:03:05

一 我想通过 foreach 语句得到以下图形
74a5108ccc99831d2d5161e93ded3321.png
我的代码如下:

\begin{tikzpicture}[x=2.5cm,y=-1.5cm,-stealth]
\foreach \x/\y/\m in {
 1/1/H,
 1/2/M,
 2/1/N,
 2/2/K}
{\node (\x\y)at(\x,\y){\m};}
\foreach \x/\y/\m/\n in
{
 11/12/f/above,
 12/22/g/below,
 11/21/m/left,
 21/22/n/right
}
{\draw(\x)--(\y)node[pos=.5,\n]{$\m$};}
\end{tikzpicture}

但是关于箭头上的标签的位置的foreach参数n 不能正常输出参数的位置,会报错,请问该怎么把标签的位置也归于 foreach 语句里面?

二 我想用 foreach 语句绘制 graph 环境中的图形,大概是以下这样
fc15a2d2c3b0bd0e4fcc390e8fea5f43.png
我的代码如下:

\begin{tikzpicture}
\foreach \x/\y in {a1/a2,a2/a3,a3/a4}
{\graph{\x->\y};}

\end{tikzpicture}

但最后的结果是

a7e1b4014c538a7951a2fbac4cc3806f.png
各部分 graph 中的图形不会展开,而会重叠起来,请问这样该如何解决?

查看更多

关注者
0
被浏览
866
雾月
雾月 2023-01-08
这家伙很懒,什么也没写!

问题里长代码要换行再点上面的“代码”才可以正确输出代码,不然问题根本不能看。

第一个,\node 选项里的 \n 没展开,tikz 检测不到它的内容,要先展开:

\begin{tikzpicture}[x=2.5cm,y=-1.5cm,-stealth]
\foreach \x/\y/\m in {
  1/1/H,
  1/2/M,
  2/1/K,
  2/2/N}
 {\node (\x\y)at(\x,\y){\m};}
\foreach \x/\y/\m/\n in
{
  11/21/f/above, 
  12/22/g/below,
  11/12/m/left,
  21/22/n/right
}
{\expanded{\noexpand\draw(\x)--(\y)node[pos=.5,\n]{$\m$};}}
\end{tikzpicture}

第二个,\foreach \x/\y in {..} {\graph{\x->\y};} 相当于 \graph{\x->\y};\graph{\x->\y};..,显然不等于 \graph{a1->a2->a3->a4}
你这个需求,手册上有一个例子:
image.png
可以用 /tikz/graph/parse 键:

\def\mychain#1{
  \def\mytext{a1}
  \foreach \x in {2,...,#1} {\xdef\mytext{\mytext->a\x}}
}
\tikzgraphsset{my chain/.style={
  /utils/exec=\mychain{#1},
  parse/.expand once=\mytext}
}
\begin{tikzpicture}
\graph {[my chain=4]};
\end{tikzpicture}
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览