有了这个 MWE
\documentclass[letterpaper]{article}
\usepackage{amsmath, tikz}
\usetikzlibrary{calc}
\newcounter{CountOfSections}
\newcommand{\fracgraph}[3][1]{%
% #1 = optional height
\begin{tikzpicture}
\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
\begin{document}
\fracgraph{12}{7/pink,10/gray!50}
\end{document}
我在网上找到了这个代码,它非常方便。但我希望稍微采用一下,这样我就可以画出 - 例如 - 6/7 和 8/10。我希望其他矩形是白色的。我该怎么做?
好吧,我实际上更接近解决方案,采用了几行代码。我将其改为
\foreach \Size/\Options in {#3}
并
\foreach \Number/\Size/\Options in {#3}
添加了
\draw [fill=\Options] (0,-\YCoord) rectangle (#2*\Number/\Size,-\YCoord+#1);
我的新 MWE 是
\usepackage{amsmath, tikz}
\usetikzlibrary{calc}
\newcounter{CountOfSections}
\newcommand{\fracgraph}[3][1]{%
% #1 = optional height
\begin{tikzpicture}
\setcounter{CountOfSections}{0}%
\foreach \Number/\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] (0,-\YCoord) rectangle (#2*\Number/\Size,-\YCoord+#1);
\draw [fill=white] ($(\Xcoord-\Xincrement,-\YCoord)$) rectangle ($(\Xcoord,-\YCoord+#1)$);
\node at ($(\XcoordLabel,-\YCoord+0.5*#1)$) {$\frac{1}{\Size}$};
}%
}%
\end{tikzpicture}
}
%-----------------------------------------------------------
% begin document
\begin{document}
\fracgraph{12}{6/7/pink,8/10/gray!50}
\end{document}
并产生:
我想查看整张图片上的分数。我该怎么做?
答案1
以下代码变体可以实现您想要的功能。我稍微简化了代码。该命令\fracgraph
现在将由斜线分隔的三个部分组成的值列表作为第二个参数(而不是像以前那样只有两个)。第二部分标记应填充的最后一段。
为了在传递给的不同值之间切换fill
,我使用了 PGF 的ifthenelse
函数。
\documentclass[letterpaper]{article}
\usepackage{amsmath, tikz}
\usetikzlibrary{calc}
\newcounter{CountOfSections}
\newcommand{\fracgraph}[3][1]{%
% #1 = optional height
\begin{tikzpicture}
\foreach \Size/\Stop/\Options [count=\c] in {#3} {
\pgfmathsetmacro{\YCoord}{#1*\c}
\pgfmathsetmacro{\Xincrement}{#2/\Size}
\foreach \x in {1,...,\Size} {
\pgfmathsetmacro{\Xcoord}{\x*\Xincrement}
\pgfmathsetmacro{\XcoordLabel}{(\x-0.5)*\Xincrement}
\pgfmathsetmacro{\XCoordFill}{ifthenelse(\x > \Stop, "none", "\Options")}
\draw[fill=\XCoordFill]
($(\Xcoord-\Xincrement,-\YCoord)$) rectangle ($(\Xcoord,-\YCoord+#1)$);
\node at ($(\XcoordLabel,-\YCoord+0.5*#1)$) {$\frac{1}{\Size}$};
}%
}%
\end{tikzpicture}
}
%-----------------------------------------------------------
% begin document
\begin{document}
\fracgraph{12}{7/3/pink,10/9/gray!50}
\end{document}
答案2
在 TeX 原语的帮助下,\ifnum
我们可以将其变成一行。
图表的大小由值x
和y
位置控制——忽略线宽——
x = 12cm
指定图表的宽度为 12cm,y = 1cm
指定一行的高度。
CountOfSections
我们可以使用内置的 PGFFor 选项,而不用 LaTeX 计数器count = \Row
。
节点位于每个矩形角的中间。
如果,则需要做更多的工作\Style
,即列表条目的第三个变量不仅仅是颜色,还应该改变其他设置。
代码
\documentclass[tikz]{standalone}
\usepackage{amsmath}
\newcommand*\fracgraph[2][]{%
\tikz[x=12cm,y=1cm,#1]
\foreach[count=\Row] \Number/\Size/\Style in {#2}
\foreach \NUMBER in {0, ..., \pgfinteval{\Size-1}}%
% or \foreach[count=\NUMBER from 0]\throwaway in {1, ..., \Size}
\draw[fill=\ifnum\NUMBER<\Number\Style\else none\fi] (\NUMBER/\Size, -\Row)
rectangle node {$\tfrac{1}{\Size}$} +(1/\Size,-1);%
}
\begin{document}
\fracgraph{6/7/pink, 8/10/gray!50}
\end{document}