tikz 和 def 的问题

tikz 和 def 的问题

我试图结合人们提出的两个不同建议我之前问过的一个问题。我得到了一堆错误,但我不确定问题是什么。代码是:

\documentclass[border=2mm]{standalone}
\usepackage{tikz}   
\usetikzlibrary{calc}
\def\mycurve#1{(0,0) to[out=70, in=180] (5,1.8)#1}
\begin{document}
  \begin{tikzpicture}
\clip (-0.1,-0.1) rectangle (5,3);                                   
\draw[help lines,->] (0,0) -- (4.2,0);                               
\draw[help lines,->] (0,0) -- (0,3);   % draw axis lines             
\draw[gray,dashed] (0,2) -- (4.2,2);   % draw asymptote              
\draw[domain=0.5:4.6,very thick,red,->,samples=400] \mycurve;% draw plot

\foreach \x  in {0.25,0.5,...,4}                                                
 {
    \draw[help lines,->] (\x,0) -- ($(\x,\mycurve)-(0,0.6pt)$);
  }

\end{tikzpicture}                                                          
\end{document}

我认为问题出在最后,我尝试制作与曲线相关的垂直线;如果曲线定义为双曲线,则可行,如\def\mycurve#1{{1/(-(\x+#1))+2}},但如果我定义任意曲线,则不行。我不能这样做吗,还是我在某个地方犯了代码错误?

答案1

TikZ 通过读取流中的字符来检查路径上的待办事项列表,将宏单独放置几乎总是有问题的。在这里,您交织了一些问题;

当你定义\mycurve#1{}一个宏时,它会不断寻找参数,直到找到能让 TeX 平静下来的东西。用 pacman 符号表示

\mycurveᗧ••••••••ᗣ{other definition stuff} 

它会一直吃东西,直到碰到那些幽灵。如果东西没有分组,那么\mycurve{lots of things that will replace #1}它会卡在第一个)。我确信某处有重复的内容可以更好地解释它,所以我跳过了它。例如,你正在用你的定义延迟;

\mycurve;

因为#1被替换为;如果你用以下方式定义宏,结果是一样的

\def\mycurve{same definition without #1}

但是你使用

\mycurve)

然后它会延迟括号,而你将to路径放在坐标声明中。你可以简单地尝试

\draw (0,0) -- (1,to (3,5));

这是不允许的,而且我甚至不知道这意味着什么。但是!

当你将其定义为

\def\mycurve#1{{1/(-(\x+#1))+2}}

那么 TikZ 就足够聪明了,能够理解这可能是一个计算,计算结果将是一个数字,它会将其用作该坐标的 y 项。但是你仍然为 提供了一个括号\mycurve,因此它变成了

{1/(-(\x+)))+2}

而且它不应该起作用。所以我认为这不是你以前用过的东西。

相关内容