![如何使用 foreach 循环的当前值来改变绘制对象的宽度?](https://linux22.com/image/405772/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20foreach%20%E5%BE%AA%E7%8E%AF%E7%9A%84%E5%BD%93%E5%89%8D%E5%80%BC%E6%9D%A5%E6%94%B9%E5%8F%98%E7%BB%98%E5%88%B6%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%AE%BD%E5%BA%A6%EF%BC%9F.png)
我想创建一个 Ti钾z 图,其中使用数字向量来包含图片。我希望使用当前值缩放图片,以便较高的图片y-axis
比低值的图片更大。不知何故,我总是得到错误“非法计量单位(插入pt)”尝试在宽度参数中使用我的变量时。以下是我目前所做的:
\begin{tikzpicture}
\foreach \y [count=\x] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\includegraphics[width=\y*0.2cm]{../figs/Potato.png}};
\end{tikzpicture}
答案1
\includegraphics
与 pgf 不同,它不解析其键的参数,因此您需要进行解析。
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \y [count=\x] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\pgfmathparse{\y*0.2}\includegraphics[width=\pgfmathresult cm]{example-image-duck}};
\end{tikzpicture}
\end{document}
顺便说一句,\x
它\y
也被图书馆使用calc
。所以我个人可能会使用
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \Y [count=\X] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\X,\Y) {\pgfmathparse{\Y*0.2}\includegraphics[width=\pgfmathresult cm]{example-image-duck}};
\end{tikzpicture}
\end{document}
calc
如果我稍后决定在循环中使用,以确保安全。
答案2
可以foreach
循环推进计算并避免\pgfmathparse
\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \y [count=\x, evaluate=\y as \width using \y*0.2] in {0.5, 0.7, 0.8, 0.9, 0.95, 1, 1.05, 1.07, 1.2, 1.205, 2, 3, 3.1, 5, 5.4, 5.8, 6.1, 6.15, 6.125, 6.4}
\node at(\x,\y) {\includegraphics[width=\width cm]{example-image}};
\end{tikzpicture}
\end{document}