
을 사용하여 배열의 각 숫자를 그리드에 넣고 싶습니다 tikz
.
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjob}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}
\begin{document}
\begin{tikzpicture}
\draw (0,0) grid(5,3);
% \foreach \x in {1,2,3,4,5}
% \foreach \y in {1,2,3}
% {
% \node at (\x-0.5,\y-0.5) {\Values(\x+\y*5)};
% }
\multido{\dx=0cm+1cm,\iColumn=1+1}{5}{%
\multido{\dy=0cm+1cm,\iRow=1+2}{3}{%
\node at (\dx+0.5cm,\dy+0.5cm) {\Values(\iColumn+\iRow*5)};}}
\end{tikzpicture}
\end{document}
하지만 나는 이런 것을 얻었습니다. \multido
로 바꾸면 결과는 비슷합니다 \foreach
. 배열의 인덱스에서는 수학 연산이 지원되지 않는 것 같습니다. 이 문제를 어떻게 해결할 수 있나요?
답변1
를 사용해야 arrayjobx
하지만 인수에 대한 산술 연산을 지원하지 않습니다.
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjobx}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}
\begin{document}
\begin{tikzpicture}
\draw (0,0) grid(5,3);
\foreach \x in {1,2,3,4,5}
{
\foreach \y in {1,2,3}
{
\node at (\x-0.5,\y-0.5) {\expandafter\Values\expandafter(\the\numexpr\x+\y*5)};
}
}
\end{tikzpicture}
\end{document}
보다 쉽게 작업을 수행하는 명령을 정의하십시오.
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{multido}
\usetikzlibrary{calc}
\usepackage{arrayjobx}
\newarray\Values
\readarray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}
\newcommand{\Get}[2]{%
\expandafter#1\expandafter(\the\numexpr#2\relax)%
}
\begin{document}
\begin{tikzpicture}
\draw (0,0) grid(5,3);
\foreach \x in {1,2,3,4,5}
{
\foreach \y in {1,2,3}
{
\node at (\x-0.5,\y-0.5) {\Get\Values{\x+\y*5}};
}
}
\end{tikzpicture}
\end{document}
더욱 현대적인 도구 사용:
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usetikzlibrary{calc}
\ExplSyntaxOn
\NewDocumentCommand{\definearray}{mm}
{
\seq_clear_new:c { l_jasmine_array_#1_seq }
\seq_set_split:cnn { l_jasmine_array_#1_seq } { & } { #2 }
}
\cs_generate_variant:Nn \seq_set_split:Nnn { c }
\NewExpandableDocumentCommand{\getarrayitem}{mm}
{
\seq_item:cn { l_jasmine_array_#1_seq } { #2 }
}
\ExplSyntaxOff
\definearray{Values}{I&F&I&G&L&O&C&K&E&D&A&W&A&Y&.}
\begin{document}
\begin{tikzpicture}
\draw (0,0) grid(5,3);
\foreach \x in {1,2,3,4,5}
{
\foreach \y in {1,2,3}
{
\node at (\x-0.5,\y-0.5) {\getarrayitem{Values}{\x+\y*5}};
}
}
\end{tikzpicture}
\end{document}
세 가지 코드 모두 동일한 결과를 산출합니다.
답변2
암호
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs}
\begin{document}
\tikz
\graph[
grid placement, wrap after=5, branch up,
fresh nodes, nodes={
draw, minimum size=+1cm, text height=+\ht\strutbox, text depth=+0pt},
]{I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .};
\tikz
\draw (0,0) grid (5,3) [shift={(.5,.5)}]
graph[
grid placement, wrap after=5, branch up,
fresh nodes, nodes={text height=+\ht\strutbox, text depth=+0pt},
]{I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .};
\tikz
\node foreach[count=\i from 0] \t in {I, F, I, G, L, O, C, K, E, D, A, W, A, Y, .}
[draw, minimum size=+1cm, text height=+\ht\strutbox, text depth=+0pt]
at ({mod(\i,5)},{int(\i/5)}) {\t};
\end{document}