演示文稿中以点形式显示的巨大数字

演示文稿中以点形式显示的巨大数字

我尝试在 beamer 演示文稿中将巨大的数字显示为点。由于我对 foreach 不太熟悉,因此遇到了几个问题。

首先我尝试的代码:

\documentclass{standalone}
   \usepackage{tikz}
   \begin{document}

   \begin{tikzpicture}
     \foreach \x in {0,1,...,96}
       \foreach \y in {0,1,...,95}
         {
           \draw (\x,\y) circle (0.2cm);
           \fill (\x,\y) circle (0.1cm);
         }
   \end{tikzpicture}
   \end{document}

这样就得到了一个有 9120 个点的正方形。不幸的是,我试图显示的数字只有 9050,所以最后一行应该只包含 26 个点。

我还想实现的是,一些点的颜色不同。例如,点 2036 至 2148 应为红色。

这个问题可以用 foreach 解决吗?还是我走错了方向?你知道一个优雅的解决方案吗?

为了我想实现这样的目标

答案1

我在这个例子中减少了点的数量,但效果是一样的。最难的部分是你使用的是纯填充形状,它们没有名称,因此无法引用。

所以我切换到节点,并添加了自定义计数器。因此现在每个节点都分配了一个数字,从0到 最大数字。我认为在我的情况下有702100 个。

要停止绘制其中任何一个节点(如您的情况),您可以告诉 Tikz 仅绘制特定数字以下的节点。至于节点的颜色,您可以使用布尔值pgfmath它允许您验证两个条件,以便这两个参数之间的所有内容都会有不同的颜色,等等。

输出

在此处输入图片描述

代码

\documentclass[tikz, margin=5mm]{standalone}

\newcounter{nonu}
\setcounter{nonu}{0}

\begin{document}
\begin{tikzpicture}

\foreach \y in {0,1,...,26}{
\foreach \x in {0,1,...,25}{

% don't draw more than this
\ifnum\thenonu>689\relax
\else
    \node[fill, circle, inner sep=1mm] (\thenonu) at (\x,\y) {\stepcounter{nonu}};
\fi

% Fill between two numbers
\pgfmathsetmacro\param{\thenonu>80 && \thenonu<142 ?int(1):int(0)}
\ifnum\param=1\relax
    \node[fill=red, circle, inner sep=1mm] at (\x,\y) {};
\fi
}
}
\end{tikzpicture}
\end{document}

答案2

圆圈确实很多,因此如果您需要更改几个圆圈的样式,虽然可以检查当前的迭代次数并相应地设置样式,但效率并不高。但过度绘制圆圈可以节省大量编译时间。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[]

\def\mytotaldots{9050}
\def\mycolno{95}

\pgfmathsetmacro\myresidue{Mod(\mytotaldots,\mycolno)}
\pgfmathparse{\myresidue ==0 ? int(1) : int(0)}
\ifnum\pgfmathresult>0\relax%
  \pgfmathtruncatemacro\myrows{\mytotaldots/\mycolno}%
\else
  \pgfmathtruncatemacro\myrows{\mytotaldots/\mycolno + 1}%
\fi

\foreach \x in {0,1,...,\myrows}{
    \ifnum\x<\myrows\relax\else\let\mycolno\myresidue\fi
    \foreach \y in {0,1,...,\mycolno}{
        \fill[] (\y pt,-\x pt) circle (0.1pt);
    }
}
\end{tikzpicture}
\end{document} 

在此处输入图片描述

第二种方法速度快几个数量级,因为它使用虚线而不是绘制明确的圆圈。诀窍是使点与路径对齐。第一个例子需要 LuaTeX,但下面的方法基本上无论如何都可以工作。

因此您有更好的套印选择。

\documentclass[margin=5pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
    aligned dots/.style={line width=#1, line cap=round, 
        dash pattern=on 0pt off 2\pgflinewidth
    },
    aligned dots/.default=3pt
    ]

\draw [aligned dots] 
       (0,0) -- (6*95 pt,0) 
        \foreach \x in {0,...,95}{
        --++ (0,-6 pt) -- ++({ifthenelse(Mod(\x,2)==1,94,-94)*6pt},0)}
        ++ (-95*6pt,-6 pt) -- ++(48pt,0pt)
        ;
\draw [aligned dots,draw=yellow] (45*6pt,-15*6pt) -- ++(6*40 pt,0) ;
\draw [aligned dots,draw=red] (30*6pt,-15*6pt) -- ++(0,-6*40 pt) ;    

\end{tikzpicture}
\end{document} 

相关内容