我正在使用类似这样的宏来绘制框
\newcommand{\drawbox}[2]{
\node[box, fill=green] at (#1,#2){};
}
其中我在调用宏时指定了参数#1
和#2
(对应于 x,y 值)。
现在我需要绘制多个框,其中参数#1
和的值#2
位于文本文件的一列中。我可能需要一个 for 循环,但我如何读取文本文件的每一行以获取参数#1
和#2
?
答案1
一个可能的解决方案datatool
\documentclass[border = 5pt]{standalone}
\usepackage{tikz}
\usepackage{datatool}
\DTLloaddb{coordinates}{points.csv}
\newcommand{\drawbox}[2]{
\node[draw, fill=green] at (#1,#2){};
}
\begin{document}
\begin{tikzpicture}
\DTLforeach*{coordinates}{\x=x,\y=y}{%
\drawbox{\x}{\y}
}
\end{tikzpicture}
\end{document}
其中points.csv
结构
x,y
1,2
3,4
5,6
编辑
稍微修改一下代码,只是为了展示你可以用它做的事情
\documentclass[border = 5pt]{standalone}
\usepackage{tikz}
\usepackage{datatool}
\DTLloaddb{coordinates}{points.csv}
\begin{document}
\begin{tikzpicture}[
box/.style={
draw,
fill = green,
minimum width = 2cm,
minimum height = 1cm,
label = center:#1,
opacity = 0.2
}
]
\DTLforeach*{coordinates}{\x=x,\y=y,\text=text}{%
\node[box=\text] (\theDTLrowi) at (\x, \y){};
}
\draw[red, ->] (1) to (2);
\draw[red, ->] (2) to (3);
\end{tikzpicture}
\end{document}
在这种情况下,输入文件是
x,y,text
1,2,foo
3,4,var
5,6,baz