![如何优化 TikZ 代码?](https://linux22.com/image/253876/%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96%20TikZ%20%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
我之所以选择 LaTeX,主要是因为它的排版非常漂亮,尤其是它能够将数学文本和图形渲染得非常漂亮。作为一名高中老师,我经常使用 LaTeX 制作讲义。为了绘制图形,我通常使用 TikZ。在使用 LaTeX 之前,我没有编程经验,所以我不知道我的风格什么时候已经很糟糕,或者是否还很好。我只知道代码可以完成工作。
现在,为了回答标题中的问题,这里是我使用 TikZ 为高中生关于函数极限的主题编写的代码。
\documentclass{article}
\usepackage{tkz-fct}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\tkzInit [xmin=-7,xmax=7,ymin=-7,ymax=7]
\begin{scriptsize}
\tkzGrid[color = gray!30!white]
\tkzAxeXY
\end{scriptsize}
\draw (-2,3) circle (3pt);
\fill (1,2) circle (3pt);
\draw (1,4) circle (3pt);
\fill (-2,4) circle (3pt);
\fill (7,-1) circle (3pt);
\draw [-latex] (-2.1,2.9) parabola (-4.9,-7);
\draw (1,2) parabola (-1.9,2.9);
\draw [-latex] (1.1,3.9) parabola (2.9,-7);
\draw [-latex] (7,-1) parabola (3.1,7);
\draw [dashed = on 3pt off 3pt] (-5,-7) -- (-5,7);
\draw [dashed = on 3pt off 3pt] (3,-7) -- (3,7);
\end{tikzpicture}
\end{document}
这应该是具有以下属性的函数 $f$ 的图:
\lim\limits_{x\rightarrow -5^+} f(x) = -\infty$
(我在这里的用法\limits
是我在讲义和试卷中真正使用它的方式,因为它使我的高中学生更容易阅读数学)\lim\limits_{x\rightarrow -2^-} f(x) = 3$
\lim\limits_{x\rightarrow 1^+} f(x) = 4$
\lim\limits_{x\rightarrow 3^-} f(x) =-\infty$
\lim\limits_{x\rightarrow 3^+} f(x) = +\infty$
请注意,我在 TikZ 代码中使用了很多抛物线,虽然我使用它们只是因为它使我的代码更短,从而为我节省了大量编码时间和手动计算(然后我可以用它来辅导有微积分困难的学生)来放置节点/坐标。 (此外,我现在对贝塞尔曲线没有耐心。我知道,我真的必须尽快改变这种行为。)但请注意,在实际的 PDF 中,(-2,3)处的孔与连接到它的曲线之间存在一个空间。所以我的第一个问题实际上是:
如何创建一端有孔的曲线?我曾经尝试过类似的东西\draw [o-] (-2,3) -- (1,2);
,但最终却得到了一个看起来很尴尬的形象。
另外,如您所见,我使用标准 TikZ 和 @Altermundus 的一些语法混合了 TikZ 代码tkz-fct
(我认为这没问题,因为该包tkz-fct
是建立在 TikZ 之上的)。同样,我的主要原因是实用性,无需使用多个foreach
循环即可实现我的目标。所以我的第二个问题是,这可以吗,听起来像 LaTeX 编码?
答案1
这里只有 的代码tkz-fct
。可以只使用 tikz 或优秀的pgfplots
。
gnuplot 出现了一些奇怪的问题,这就是为什么有时你会看到 (-5) 而不是 -5 或者 (-1)*(x-1)**2 而不是 -1(x-1)**2。
\documentclass{article}
\usepackage{tkz-fct}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[scale=0.5,font=\scriptsize]
\tkzInit [xmin=-7,xmax=7,ymin=-7,ymax=7]
\tkzGrid[color = gray!30!white]
\tkzVLines[dashed = on 3pt off 3pt,color=blue]{(-5),3}
\tkzAxeXY
\tkzFct[domain=-4.8:-2,<-]{-1.2*(x+2)**2+3}
\tkzFct[domain=-2:1]{(x-1)**2/9+2}
\tkzFct[domain=1:2.6,->]{(-1)*(x-1)**2/0.25+4}
\tkzDefPointByFct[with=b](-2)
\tkzDrawPoint[fill=white](tkzPointResult)
\tkzDefPointByFct[draw,with=b](1)
\tkzDefPointByFct[with=c](1)
\tkzDrawPoint[fill=white](tkzPointResult)
\end{tikzpicture}
\end{document}