我需要一个像这样的图形(四个垂直堆叠的带有文本的矩形;文本中的两个数字不同且不遵循模式):
我做了什么:
%working
\documentclass{standalone}
\usepackage{tikz,amsmath}
\newcommand{\vrect}[2]{ %%% Need to pass an array of 4 arguments
\foreach \pos [count=\i] in {{(0,-4)},{(0,-3)},{(0,-2)},{(0,-1)}}{
\node[draw=black,thick,minimum size=1cm] (z\i) at \pos {Val#1#2};
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
%%\vrect{{1,1}, {3,5}, {8,7}, {1,0}}} %% How to use this?
\vrect{1}{1}
\end{tikzpicture}
\end{document}
我不知道
- 如何传递数组作为参数
- 如何根据索引访问参数(尝试
#\i
失败)
任何帮助都将受到赞赏。
附言我需要绘制几个这样的图形,所以我创建了一个\newcommand
。
答案1
该\foreach
命令可以迭代多个参数,以 分隔/
。您可以使用循环的数组作为命令的参数。可以使用 用计数器设置\i
位置(0,-\i)
。
注意:您可以在数组内传递任意数量的参数(不必是 4 个)。
\documentclass{standalone}
\usepackage{tikz,amsmath}
\newcommand{\vrect}[1]{
\foreach \x/\y [count=\i] in #1 {
\node[draw=black,thick,minimum size=1cm] (z\i) at (0,-\i) {Val\x\y};
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\vrect{{1/1, 3/5, 8/7, 1/0}}
\end{tikzpicture}
\end{document}
答案2
如果你不受那个奇怪的语法的束缚:
\documentclass{standalone}
\usepackage{tikz,amsmath}
\newcommand{\vrect}[1]{%
\def\myarray{{#1}}%
\foreach \pos [count=\i from 0] in {{(0,-4)},{(0,-3)},{(0,-2)},{(0,-1)}}{
\pgfmathsetmacro{\val}{\myarray[\i]}%
\node[draw=black,thick,minimum size=1cm] (z\i) at \pos {Val\val};
}%
}
\begin{document}
\begin{tikzpicture}
\vrect{11,35,87,10}
\end{tikzpicture}
\end{document}
答案3
您可以将数组作为单个参数传递给,但是,如果使用 而不是\vect
列表,则会更容易。这样,您就可以以“正常”的 tikz 方式循环遍历坐标。{1,1}, {3,5}, {8,7}, {1,0}
1/1, 3/5, 8/7, 1/0
这是您的完整(更正后的) MWE:
\documentclass{standalone}
\usepackage{tikz,amsmath}
\newcommand{\vrect}[1]{ %%% Need to pass 4 arguments
\foreach \x/\y [count=\i] in {#1} {
\node[draw=black,thick,minimum size=1cm] (z\i) at (\x,\y) {Val\x-\y};
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\vrect{1/1, 3/5, 8/7, 1/0} %% How to use this!
\end{tikzpicture}
\end{document}
产生
请注意,这适用于数组中的任意数量的参数。
编辑
如果你想让盒子垂直堆叠,这会稍微容易一些:
\documentclass{standalone}
\usepackage{tikz,amsmath}
\newcommand{\vrect}[1]{ %%% Need to pass 4 arguments
\foreach \x/\y [count=\i] in {#1} {
\node[draw=black,thick,minimum size=1cm] (z\i) at (0,-\i) {Val\x-\y};
}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\vrect{1/1, 3/5, 8/7, 1/0} %% How to use this?
\end{tikzpicture}
\end{document}
生成结果:
再次,这将接受任意数量的参数。