TikZ: 스타일에 대해 계산된 항목이 포함된 목록을 만드는 방법

TikZ: 스타일에 대해 계산된 항목이 포함된 목록을 만드는 방법

TikZ 매트릭스가 있습니다. 그리고 행을 강조하고 싶습니다.
1, 3, 6, 10, 15, 21, 28,... =n*(n+1)/2

작은 예의 경우 다음과 같이 할 수 있습니다.

highlight/.style={  row #1/.style={....}   },
highlight/.list={1,3,6,10,15}

하지만 내 질문은: 상당히 더 많은 수의 행(예: 1000)에 대해 생각해 보세요." " 계산을 사용하여 이를 자동화하려면 어떻게 해야 합니까 n*(n+1)/2?

여기에 이미지 설명을 입력하세요

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
highlight/.style={  row #1/.style={nodes={fill=pink}}   },
]
\matrix[matrix of nodes,
highlight/.list={1,3,6,10,15}
](m){
1 \\
2 \\
3 \\
4 \\
5 \\
6 \\
7 \\
8 \\
9 \\
10  \\
11 \\
};
\end{tikzpicture}
\end{document}

답변1

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\ExplSyntaxOn
\cs_new:Npn\my_calculate:n #1
  { , \int_eval:n{#1*(#1+1)/2} }

\newcommand\createlist[1]{
  \int_step_function:nnN{1}{#1}\my_calculate:n
}
\ExplSyntaxOff

\begin{document}
\begin{tikzpicture}[
  highlight/.style={row #1/.style={nodes={fill=pink}}},
]
  \matrix[matrix of nodes,
    highlight/.list/.expanded={\createlist{5}}
  ] (m) {
    1 \\
    2 \\
    3 \\
    4 \\
    5 \\
    6 \\
    7 \\
    8 \\
    9 \\
    10 \\
    11 \\
  };
\end{tikzpicture}
\end{document}

답변2

2³¹−1을 초과하지 않는 정수 계산이므로 키 사양 내에서 \int_eval:n, \inteval(int_eval의 프런트엔드 버전) 또는 \pgfinteval(이전 버전의 복제품)을 사용할 수 있습니다.

highlight/.style={
  row \inteval{#1*(#1+1)/2}/.append style={nodes={fill=pink}}}

키를 변경하고 싶지 않다면 highlight물론 전달자를 사용할 수 있습니다.

highlight/.style={row #1/.append style={nodes={fill=pink}}},
highlight'/.style={highlight=\pgfinteval{#1*(#1+1)/2}}

다음과 같은 것을 만드는 것도 가능할 것입니다.

highlight/.list wrap={1, ..., 1000}{\inteval{#1*(#1+1)/2}}`

이전 제안이 충분하지 않은 경우.

암호

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\tikzset{
  create column/.style={
    matrix content/.initial=,
    /utils/temp/.style={
      matrix content/.append={##1\pgfmatrixendrow}},
    /utils/temp/.list={#1},
    node contents=\pgfkeysvalueof{/tikz/matrix content}}}
\begin{document}
\tikz[
  highlight/.style={
    row \inteval{#1*(#1+1)/2}/.append style={nodes={fill=pink}}}]
\matrix (m) [
  matrix of nodes,
  highlight/.list={1, ..., 1000},
  create column={1, ..., 1000}];

\tikz[
  highlight/.style={row #1/.append style={nodes={fill=pink}}},
  highlight'/.style={highlight=\pgfinteval{#1*(#1+1)/2}}]
\matrix (m) [
  matrix of nodes,
  highlight'/.list={1, ..., 1000},
  create column={1, ..., 1000}];
\end{document}

관련 정보