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