我正在尝试绘制双曲线族,但不想每次都重复函数定义。例如,我有这个:
\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}