如何优化 TikZ 代码?

如何优化 TikZ 代码?

我之所以选择 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} 

在此处输入图片描述

相关内容