我有一个很长的巴西坐标文件,例如:
(-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
,但\@@input
LaTeX 将其重命名为 以提供更高级别的\input
。 TikZ 的\draw
命令(实际上是\path
)将首先扩展以下标记,然后再查找坐标。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\makeatletter
\draw\@@input coordfile ;
\makeatother
\end{tikzpicture}
\end{document}
这里我假设坐标在coordfile.tex
或coordfile
(无扩展名)。您应该在文件名后添加一个尾随空格,并避免使用带有特殊字符(即非英文字符)和空格的文件名。
如果您多次需要使用它,您应该\@@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
.