我如何编写返回坐标(或节点)的宏。节点必须可在 tikzpicture 环境中使用,最好在路径声明内使用。
我需要类似以下内容(它无法编译)。我不确定这是否pgfcoordinate
是正确的做法...
\documentclass{article}
\usepackage{tikz}
\usepackage{pgf}
\begin{document}
\newcommand{\mycoord}[2]{
\pgfmathsetmacro{\x}{\pgfmathparse{#1} \pgfmathresult} % actually do some calculations
\pgfmathsetmacro{\y}{\pgfmathparse{#2} \pgfmathresult} % actually do some calculations
\pgfcoordinate{\x}{\y}} % I want this node to be returned.
\begin{tikzpicture}
\node at \mycoord{1}{2} {some text}; % I want to use the calculated node
\end{tikzpicture}
\end{document}
错误信息是
包 tikz 错误:无法解析此坐标。
答案1
这是一个正常错误。Tikz 等待坐标,例如 (3,0) 或 (a),其中 a 是节点的名称。我认为您使用不正确,\pgfcoordinate
我从未使用过此宏,所以也许我错了,但此宏快速定义了与坐标关联的节点名称。您可以在 tikzpicture 之外定义您的宏。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\newcommand{\mycoord}[2]{
\pgfcoordinate{#1}{#2}}
\mycoord{a}{\pgfpoint{3cm}{0cm}}
\begin{tikzpicture}
\node[draw] at (a) {good};
\node[draw] at (0,0) {bad};
\end{tikzpicture}
\end{document}
下一个代码只有在你想修改时才\x
有趣\y
\documentclass{article}
\usepackage{tikz}
\begin{document}
\newcommand{\mycoord}[2]{
\pgfmathsetmacro\x{5} % or what you want
\pgfmathsetmacro\y{-2}}
\begin{tikzpicture}
\node[draw](d){deb};
\path \pgfextra \mycoord{1}{2} \endpgfextra node[draw] (f) at (\x,\y) {end}; %
\draw (d)--(f) ;
\end{tikzpicture}
\end{document}
答案2
我认为最简单的方法是将宏扩展为“(x,y)”之类的文本,然后使用 calc 或其他标准转换来操作它。例如,您可以执行如下简单操作:
\newcommand{\mycoord}[2]{([xshift=2cm] #1,#2)}
然后像您期望的那样将宏调用嵌入到路径中。
\draw (0,0) -- \mycoord{0}{0};
下面是一个使用 calc 的简单示例。请注意,这个示例执行的操作相当随机(我只是从手册中取出一个示例并对其进行了修改),它只是为了展示语法如何工作,而不是真正有用:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\newcommand{\mycoordB}[3]{(${2*(#3-3)}*(#1,#2)$)}
\begin{tikzpicture}
\fill [black] \mycoordB{0cm}{0cm}{4} circle (2pt);
\fill [blue] \mycoordB{1cm}{2cm}{5} circle (2pt);
\fill [green] \mycoordB{2cm}{2cm}{2} circle (2pt);
\end{tikzpicture}
\end{document}
另请参阅此问题:TikZ 编程
答案3
也许这里的讨论和交叉引用链接可能会有所帮助:在 pgfplots 图中,使用宏作为坐标。