tikz 中 foreach 语句索引的简单算法

tikz 中 foreach 语句索引的简单算法

foreach 真的是 tikz 语句还是从其他包派生而来的?

我想绘制一个水平轴,其中有 7 个刻度,间隔 1 厘米。我想在每个刻度下放置一个标签,该标签是刻度的序数(1、2、3..),在刻度上方放置一个标签,该标签是序数乘以常数 3.14 的值

答案1

是的,foreach是 TikZ/PGF 语句。它被描述得非常详细pgfmanual。您也可以通过在前言中发出来独立于 TikZ/PGF 使用它\usepackage{pgffor}。如果您使用 TikZ,则不需要这样做,因为它会自动加载。

下面是一个如何实现您在问题中描述的内容的示例。\pgfmathsetmacro<macroname>{<expression>}使用 PGF 数学引擎进行计算并将结果分配给宏,同时\pgfmathprintnumber四舍五入并输出结果。

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

\begin{tikzpicture}

\foreach \x in {1,...,7} {
    \pgfmathsetmacro\result{\x * pi}
    \draw (\x,-4pt) -- (\x,4pt)
        node [below,yshift=-2ex] {\x}
        node [above] {\pgfmathprintnumber{\result}};
}

\draw [-latex] (1,0) -- (7.6,0);

\end{tikzpicture}
\end{document}

带标签的轴

答案2

仅使用foreach自己的计算工具的两种解决方案

\foreach \x [count=\i] in {3.14,6.28,...,21.98} 

计算列表中第二项和第一项之间的差值,并将其添加到第二个和后续值中,直到最后一个值。同时\i计算列表项的数量。

\foreach \i [evaluate=\i as \x using \i*3.14] in {1,2,...,7}

\i通过列表前进并用于计算新变量\x

两种解决方案都产生相同的结果:

在此处输入图片描述

完整的代码可能是:

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

\begin{tikzpicture}

\foreach \x [count=\i] in {3.14,6.28,...,21.98} {
    \draw (\i,-4pt) -- (\i,4pt)
        node [below,yshift=-2ex] {\i}
        node [above] {\x};
}

\draw [-latex] (1,0) -- (7.6,0);

\end{tikzpicture}

\begin{tikzpicture}

\foreach \i [evaluate=\i as \x using \i*3.14] in {1,2,...,7} {
    \draw (\i,-4pt) -- (\i,4pt)
        node [below,yshift=-2ex] {\i}
        node [above] {\x};
}

\draw [-latex] (1,0) -- (7.6,0);

\end{tikzpicture}
\end{document}

相关内容