如何将 ASCII 坐标导入 TikZ

如何将 ASCII 坐标导入 TikZ

我有一个很长的巴西坐标文件,例如:

(-3.43,-0.56) -- (-3.44,-0.56) -- (-3.44,-0.55) -- (-3.50,-0.55) -- (-3.52,-0.55) ...

然后我想将其导入到tikzpicture环境中以便与命令一起使用 \draw。例如:

\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\pagestyle{empty}

\begin{tikzpicture}
\draw 'myfile'
\end{tikzpicture}

\end{document}

答案1

您可以使用 TeX 的 以可扩展的方式读取文件内容\input,但\@@inputLaTeX 将其重命名为 以提供更高级别的\input。 TikZ 的\draw命令(实际上是\path)将首先扩展以下标记,然后再查找坐标。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \makeatletter
    \draw\@@input coordfile ;
    \makeatother
\end{tikzpicture}
\end{document}

这里我假设坐标在coordfile.texcoordfile(无扩展名)。您应该在文件名后添加一个尾随空格,并避免使用带有特殊字符(即非英文字符)和空格的文件名。


如果您多次需要使用它,您应该\@@input在序言中声明一个不同的名称,然后在正文中使用它:

\documentclass{article}
\usepackage{tikz}
\makeatletter
\let\expinput\@@input
\makeatother
\begin{document}
\begin{tikzpicture}
    \draw\expinput coordfile ;
\end{tikzpicture}
\end{document}

或者,更加 LaTeX 风格:

\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand*\expinput[1]{\@@input #1 }
\makeatother
\begin{document}
\begin{tikzpicture}
    \draw\expinput{coordfile};
\end{tikzpicture}
\end{document}

答案2

foo你可以从 TeX 文件中读取数据。假设你有一个包含内容的文件(0,0) -- (2,0) -- (2,2),那么你可以读取该行并将其传递给绘制命令,如下所示:

\documentclass{article}
\usepackage{tikz}
\begin{document}
  \newread\bar
  \openin\bar=foo
  \read\bar to\res
  \tikz\draw\res;
\end{document}

这将绘制相应的线条。如果文件中有多行,则\read\bar to \res第二次将从文件中读取第二行。完成后,您应该\closein\bar。还有一个\ifeof,您可以使用它来循环遍历文件,直到它不再包含任何行。

要遍历整个文件,您只需编写一个宏,只要有内容要读取,它就会循环。要使这个简单的设置起作用,循环中的第一个命令必须是读取文件。

\documentclass{article}
\usepackage{tikz}
\def\myloop#1#2#3\repeat{\def\filenm{#2}\def\body{#1#2#3}\iterate}
\def\iterate{\body\ifeof\filenm\let\next\relax\else\let\next\iterate\fi\next}
\begin{document}
\newread\bar
\openin\bar=foo
\begin{tikzpicture}
  \myloop\read\bar to\res\draw\res;\repeat
\end{tikzpicture}
\end{document}

这会将文件的每一行添加到同一个tikzpicture.

相关内容