来自文本文件的宏输入在 x,y 处绘制节点,其中 x,y 值从文件中读取

来自文本文件的宏输入在 x,y 处绘制节点,其中 x,y 值从文件中读取

我正在使用类似这样的宏来绘制框

\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

相关内容