我原来的问题:
可以在 dot2tex 中使用循环吗?
我想输入类似以下内容的内容:
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,snakes,automata,backgrounds,fit}
\usepackage[pgf]{dot2texi}
\begin{document}
\begin{dot2tex}[tikz,options=-t math]
digraph G {
\foreach \x / \y in {0/1,1/2,2/3}
a\x -> a\y [label = "b_{\x,\y}"]
}
\end{dot2tex}
\end{document}
代替:
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,snakes,automata,backgrounds,fit}
\usepackage[pgf]{dot2texi}
\begin{document}
\begin{dot2tex}[tikz,options=-t math]
digraph G {
a0 -> a1 [label = "b_{0,1}"]
a1 -> a2 [label = "b_{1,2}"]
a2 -> a3 [label = "b_{2,3}"]
}
\end{dot2tex}
\end{document}
谢谢。请注意,这是一个玩具示例,我有几个(复杂的)情况可以使用循环。
编辑 我从评论中得知,这是不可能的。
我真正寻找的是能够让我绘制复杂图形的东西(我不想像在 tikz 中那样管理节点的定位)并使用循环来定义图形(有一些规律,可以节省我大量的打字时间)。
如果您知道这样的工具/包,请告诉我。
多谢。
答案1
我使用以下test.tex
文件获得相同的输出文件:
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,snakes,automata,backgrounds,fit}
\usepackage[pgf]{dot2texi}
\newtoks\dtttoks
\begin{document}
\begingroup
\global\dtttoks={}
\foreach \x / \y in {0/1,1/2,2/3}{
\edef\temp{a\x\space -> a\y\space [label = "b_{\x,\y}"]}
\global\dtttoks=\expandafter{\the\expandafter\dtttoks\temp^^J}
}
\edef\BODY{digraph G {^^J\the\dtttoks}}
\def\start{\begin{dot2tex}[tikz,options=-t math]}
\expandafter\start\BODY
\end{dot2tex}
\endgroup
\begin{dot2tex}[tikz,options=-t math]
digraph G {
a0 -> a1 [label = "b_{0,1}"]
a1 -> a2 [label = "b_{1,2}"]
a2 -> a3 [label = "b_{2,3}"]
}
\end{dot2tex}
\end{document}
test-dot2tex-fig1.dot
文件和均test-dot2tex-fig2.dot
包含
digraph G {
a0 -> a1 [label = "b_{0,1}"]
a1 -> a2 [label = "b_{1,2}"]
a2 -> a3 [label = "b_{2,3}"]
}
我想,这并不实用。