我正在尝试使用 foreach 语句打印 2 的幂。我首先将 n 定义为 2,然后打印 n 并将其乘以 2 10 次。代码确实编译无误,但我在输出中看到的唯一数字是页码。我是否误用了 pgfmathresult?
下面的代码 ----
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\n}{2}
\foreach \i in {1,...,10} {
\pgfmathparse{\n}\pgfmathresult
\pgfmathsetmacro{\n}{2*\n}
}
\end{tikzpicture}
\end{document}
答案1
尝试这个:
\documentclass{article}
\usepackage{tikz,siunitx,calc}
\sisetup{round-mode = places, round-precision = 0}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,10} {
\pgfmathsetmacro{\n}{2*\i}
\node at (\i,1) () {\num{\i}};
\node at (\i,0) () {\num{\n}};
}
\end{tikzpicture}
\end{document}
输出:
答案2
两种不使用任何库的情况:
\documentclass{article}
\usepackage{tikz}
\begin{document}
with \verb+\pgfmathparse+
\begin{tikzpicture}
\foreach \i in {1,...,10}
\node at (\i,0) {\pgfmathparse{int(2*\i)}\pgfmathresult};
\end{tikzpicture}
\medskip
with \verb+evaluate+ defined in \verb+\foreach+ macro
\begin{tikzpicture}
\foreach \i [evaluate=\i as \n using int(2*\i)] in {1,...,10}
\node[red] at (\i,0) {\n};
\end{tikzpicture}
\end{document}
答案3
对你的问题的评论已经给出了一些有用的提示:
tikzpicture
如果不需要,请不要使用环境。节点外的文本不会在环境内打印,但您也可以在此环境外tikzpicture
使用宏。\pgfmath
由于\foreach
循环创建了一个范围,因此每次循环后的新值\n
都会丢失。您可以通过remember=\n
向\foreach
宏添加选项来避免这种情况。您可能希望使用int()
将去掉小数的函数。最后,只需输入\n
即可打印其值。
\documentclass{article}
\usepackage{tikz}
\begin{document}
foo
\pgfmathsetmacro{\n}{2}%
\foreach [remember=\n] \i in {1,...,10} {%
\n%
\pgfmathsetmacro{\n}{int(2*\n)}
}%
bar
\end{document}