Tikz 中每两个点都有一个箭头

Tikz 中每两个点都有一个箭头

我有一个文件 data.dat,其中包含以下几行:

-1.200000     0.000000
-1.200000    -0.728000
-0.728000    -0.728000
-0.728000     0.614172
 0.614172     0.614172
 0.614172     1.231670

它存储了一组具有xy坐标的点。我随后想绘制这个点列表,每两个点(或每个点,也可以)带有箭头,如下所示(但使用箭头而不是 mark=*):

\begin{document}
\begin{tikzpicture}
\draw[mark=*,mark indices={2,4,...,8}] plot file {data.dat};
\end{tikzpicture}
\end{document}

看起来没有像箭头一样的标记:更好的解决方案是使用foreach读取数据文件的循环吗?

答案1

这里有一个建议,使用 Lua 来编写多个\draws,因此必须使用 进行编译lualatex。我借用了以下文件读取代码:https://stackoverflow.com/questions/16038236/store-in-2d-array-the-contents-of-file-lua

箭头之间的角存在问题,因为线被绘制为单独的路径,因此它们没有正确连接。对于这种特定情况,一种破解方法是[shorten >=-0.5\\pgflinewidth]在子句draw中添加else

在此处输入图片描述

\documentclass[border=2mm]{standalone}
\usepackage{tikz,luacode,filecontents}
\begin{filecontents*}{data.dat}
-1.200000     0.000000
-1.200000    -0.728000
-0.728000    -0.728000
-0.728000     0.614172
 0.614172     0.614172
 0.614172     1.231670
\end{filecontents*}
\begin{document}

\begin{tikzpicture}
\begin{luacode}
local mt = {}          -- create the matrix
for line in io.lines'data.dat' do
  local new_row = {}
  for n in line:gmatch'%S+' do
     table.insert(new_row, tonumber(n))
  end
  if #new_row > 0 then
     table.insert(mt, new_row)
  end
endrows = \#mt
for i=1,endrows-1 do
    if i % 2 == 1 then
    tex.sprint("\\draw [-latex] (", mt[i][1], ",",  mt[i][2] , ") -- (", mt[i+1][1], ",",  mt[i+1][2], ");")
    else
    tex.sprint("\\draw (", mt[i][1], ",",  mt[i][2] , ") -- (", mt[i+1][1], ",",  mt[i+1][2], ");")
    end
    end
end
\end{luacode}
\end{tikzpicture}
\begin{tikzpicture}
\draw[mark=*,mark indices={2,4,...,8}] plot file {data.dat};
\end{tikzpicture}
\end{document}

相关内容