在 TikZ 中创建分数图

在 TikZ 中创建分数图

好吧,我当时正在帮助我的一个朋友解决一个分数问题,即如何表示分数,以便孩子们可以轻松比较它们。我们想到了一把尺子,将尺子分成几部分来表示分数,然后将尺子一个叠在另一个上面。我们这样做了,然后我开始在中创建类似的东西TikZ

这是我目前所拥有的:

\documentclass{article}
\usepackage{amsmath,tikz}
\begin{document}
\begin{tikzpicture}
\draw (-2,3) rectangle (3,2);
\node at (0.5,2.5) {1};
\draw (-2,2) rectangle (3,1);
\draw (0.5,2)--(0.5,1);
\node at (-0.75,1.5) {$\frac{1}{2}$};
\node at (1.75,1.5) {$\frac{1}{2}$};
\end{tikzpicture}
\end{document}

得出:

在此处输入图片描述

我在思考什么是自动进行此绘图的最佳方法,可能说\fracgraph{2}或者也许\fracgraph{5}{2}第一个数字控制图表的大小,第二个数字控制分数的级别;在这种情况下,它将最多为一半。

这是我目前所拥有的,但并不多。我只实现了将图表(包含它的矩形)扩展到所需大小,但诸如放置节点和进一步拆分图表之类的事情却没有。

\documentclass[letterpaper]{article}
\usepackage{amsmath, tikz}

\newcommand{\fracgraph}[2]{%
\pgfmathsetmacro{\meanfrac}{(0+#1)/2}
\begin{tikzpicture}
\draw (0,0) rectangle (#1,\number\numexpr-#2\relax);
\node at (\meanfrac,-\number\numexpr #2/2\relax){#2};
\end{tikzpicture}
}
\begin{document}
\fracgraph{5}{2}
\end{document}

任何对这一抽象愿望的帮助都将受到感激。

答案1

您可以按如下方式制作它:

在此处输入图片描述

\documentclass[letterpaper]{article}
\usepackage{amsmath, tikz}
\usetikzlibrary{calc}

\newcommand{\fracgraph}[3][2]{%
    % #1 = optional height
\begin{tikzpicture}
    \pgfmathsetmacro{\Yheight}{0.5*#1}%
    \pgfmathsetmacro{\Xincrement}{#2/#3}%

    \draw (0,0) rectangle (#2,#1);
    \node at ($(0.5*#2,0.75*#1)$) {1};
    \draw ($(0,\Yheight)$) -- ($(#2,\Yheight)$);
    \foreach \x in {2,...,#3} {%
        \pgfmathsetmacro{\Xcoord}{(\x-1)*\Xincrement}%
        \draw ($(\Xcoord,0)$) -- ($(\Xcoord,)$);
    }%
    \foreach \x in {1,...,#3} {%
        \pgfmathsetmacro{\XcoordLabel}{(\x-0.5)*\Xincrement}%
        \node at ($(\XcoordLabel,0.5*\Yheight)$) {$\frac{1}{#3}$};
    }%
\end{tikzpicture}
}
\begin{document}
\fracgraph{5}{2}

\bigskip
\fracgraph{5}{3}

\bigskip
\fracgraph{5}{4}
\end{document}

如果您只想要一个图表,那么我建议将语法更改为类似以下内容:

\fracgraph{5}{2/cyan!50,3/red!40,4/brown!50}

斜线后面的文本表示要应用的填充颜色:

在此处输入图片描述

代码:

\documentclass[letterpaper]{article}
\usepackage{amsmath, tikz}
\usetikzlibrary{calc}

\newcounter{CountOfSections}
\newcommand{\fracgraph}[3][1]{%
    % #1 = optional height
\begin{tikzpicture}
    \draw (0,0) rectangle (#2,#1) node [midway] {1};

    \setcounter{CountOfSections}{0}%
    \foreach \Size/\Options in {#3} {%
        \stepcounter{CountOfSections}%
        \pgfmathsetmacro{\YCoord}{#1*\arabic{CountOfSections}}%
        \draw  (0,-\YCoord) rectangle (#2,-\YCoord+#1);
        \pgfmathsetmacro{\Xincrement}{#2/\Size}%
         \foreach \x in {1,...,\Size} {%
            \pgfmathsetmacro{\Xcoord}{\x*\Xincrement}%
            \pgfmathsetmacro{\XcoordLabel}{(\x-0.5)*\Xincrement}%
            \draw [fill=\Options]  ($(\Xcoord-\Xincrement,-\YCoord)$)  rectangle ($(\Xcoord,-\YCoord+#1)$);
            \node at ($(\XcoordLabel,-\YCoord+0.5*#1)$) {$\frac{1}{\Size}$};
        }%
    }%
\end{tikzpicture}
}
\begin{document}
    \fracgraph{5}{2/cyan!50,3/red!40,4/brown!50}
\end{document}

相关内容