在 tikz/pgf 中使用宏

在 tikz/pgf 中使用宏

我正在尝试绘制双曲线族,但不想每次都重复函数定义。例如,我有这个:

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[domain=-2:2]
        \draw plot ({exp(\x)+exp(-\x)}, {exp(\x)-exp(-\x)});
    \end{tikzpicture}
\end{document}

但现在我想把要点放在一个函数中:

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[domain=-2:2]
        \def\hyper#1#2#3{({#1*exp(#3)+#2*exp(-#3)}, {#1*exp(#3)-#2*exp(-#3)})}
        \draw plot \hyper{1}{1}{\x};
    \end{tikzpicture}
\end{document}

但后来我明白了

!包 tikz 错误:无法解析此绘图数据。

有没有简单的方法可以将这种预定义宏用作点?或者这不可能plot

我见过使用宏定义树子结构的问题强制 tikz/pgf 在命令中扩展宏返回节点的 pgf 宏TikZ 编程但我还是不明白什么时候可以做什么。

TikZ/PGF我们也欢迎任何对手册中启发性部分的指出。

答案1

\draw plot期望 x 和 y 坐标由逗号分隔,但是根据您现在的函数设置方式,它只能看到一块内容(不是正确的 LaTeX 术语)。

解决这个问题的一种方法是将\draw plot也放入宏中。您可以让宏接受传递给命令的可选参数draw,这样您就可以改变各个图的外观:

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[domain=-2:2]
        \newcommand\hyper[4][]{\draw [#1] plot ({#2*exp(#4)+#3*exp(-#4)}, {#2*exp(#4)-#3*exp(-#4)})}
         \hyper[red]{1}{1}{\x};
         \hyper[blue]{0.5}{0.5}{\x};
    \end{tikzpicture}
\end{document}

您可能不想使用该功能,而是\draw plot想看看 PGFPlots,它可以更轻松地创建图表和添加轴和图例等。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\newcommand\hyper[4][]{\addplot [#1] ({#2*exp(#4)+#3*exp(-#4)}, {#2*exp(#4)-#3*exp(-#4)});}
    \begin{tikzpicture}[domain=-2:2]
         \begin{axis}[xmin=0, xmax=4, smooth, axis lines=middle]
         \foreach \n in {0.25,0.5,...,2}{
            \hyper[domain=-1.5/\n:1.5/\n] {\n}{\n}{x}
         }
         \hyper[domain=-3:3, thick, red]{0.75}{0.75}{x}
         \end{axis}
    \end{tikzpicture}
\end{document}

答案2

TikZ/PGF 使用自己的解析器。在这里,你可以分别定义每个坐标(\hyperx\hypery):

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}[domain=-2:2]
        \def\hyperx#1#2#3{#1*exp(#3)+#2*exp(-#3)}
        \def\hypery#1#2#3{#1*exp(#3)-#2*exp(-#3)}
        \draw plot ({\hyperx{1}{1}{\x}},{\hypery{1}{1}{\x}});
    \end{tikzpicture}
\end{document}

答案3

这是 tkz-fct 和 gnuplot 的答案

\documentclass{article}
\usepackage{tkz-fct}

\begin{document}
\begin{tikzpicture}
   \tkzInit[xmin=-1,xmax=6,xstep=1,
            ymin=-5,ymax=5,ystep=1]
\tkzAxeXY
\foreach \a in {0.25,0.5,...,2}{%
  \def\b{-\a}    
  \tkzFctPar[color=red,
             samples=200,
             domain=-1.5/\a:1.5/\a]{\a*exp(t)-\b*exp(-t)}{\a*exp(t)+\b*exp(-t)}}
\end{tikzpicture}  
\end{document}

在此处输入图片描述

相关内容