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}