Coloración periódica de particiones planas encajonadas.

Coloración periódica de particiones planas encajonadas.

Estoy usando el siguiente código, que crea capas de diferentes colores. Tener problemas para conseguir una decoración al hacer que funcione simultáneamente para cada capa en los tres ejes. Por favor, algo de ayuda aquí. Espero usar 3 colores a, b, c para colorear un cuadro en la posición (a, b, c) con el color a+b+c mod 3.

Código

% Plane partition
% Author: Jang Soo Kim
\documentclass{standalone}
\usepackage[danish]{babel}
\usepackage{ifthenx}
\usepackage{verbatim}
\usepackage{tikz}

% Three counters
\newcounter{x}
\newcounter{y}
\newcounter{z}
% The angles of x,y,z-axes
\newcommand{\xaxis}{210}
\newcommand{\yaxis}{-30}
\newcommand{\zaxis}{90}
% The top side of a cube
\newcommand{\topside}[3]{%
  \fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (0,1) --(150:1)--(0,0);
}
% The left side of a cube
\newcommand{\leftside}[3]{%
  \fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  shift={(\zaxis:#3)}] (0,0) -- (0,-1) -- (210:1) --(150:1)--(0,0);
}
% The right side of a cube
\newcommand{\rightside}[3]{%
  \fill[fill=cubecolor, draw=black,shift={(\xaxis:#1)},shift={(\yaxis:#2)},
  shift={(\zaxis:#3)}] (0,0) -- (30:1) -- (-30:1) --(0,-1)--(0,0);
}
% The cube 
\newcommand{\cube}[3]{%
  \topside{#1}{#2}{#3} \leftside{#1}{#2}{#3} \rightside{#1}{#2}{#3}
}

    % Definition cubecolors
\newcommand*\cubecolors[1]{%
  \ifcase#1\relax
  \or\colorlet{cubecolor}{green}%
  \or\colorlet{cubecolor}{blue}%
  \or\colorlet{cubecolor}{red}%
  \or\colorlet{cubecolor}{green}%
  \or\colorlet{cubecolor}{blue}%
  \or\colorlet{cubecolor}{red}%

  \else
    \colorlet{cubecolor}{white}%
  \fi
}

% Definition of \planepartition
\newcommand\planepartition[1]{
 \setcounter{x}{-1}
  \foreach \a in {#1} {
    \addtocounter{x}{1}

    \setcounter{y}{-1}
    \foreach \b in \a {
      \addtocounter{y}{1}

      \setcounter{z}{-1}
      \foreach \c in {0,...,\b} {
        \addtocounter{z}{1}

        \cubecolors{\a}
      \ifthenelse{\c=0}{\setcounter{z}{-1},\addtocounter{y}{0}}{
        \cube{\value{x}}{\value{y}}{\value{z}}}
      }
    }
  }
}

    \begin{document}
\begin{tikzpicture}
\planepartition{{5,3,2,2},{4,2,2,1},{3,2,1},{2,1},{1}}
\end{tikzpicture}
   \end{document}

Respuesta1

Creo que debe haber una manera de colorear usando a, modpero no estoy seguro de cómo en este momento (en mi defensa, es un poco tarde). Sin embargo, mientras tanto, puedo ofrecerte una alternativa que te permitirá deshacerte de los contadores, que son útiles pero siguen siendo código extra, así como el ifthenxpaquete y el \ifthenelsecomando, reemplazados por \ifnum### ... \else ... \fi.

Entonces puedes reemplazar tu \planepartitioncomando con lo siguiente:

\newcommand\planepartition[1]{
  \foreach \a [count=\x starting from -1] in {#1} {
    \foreach \b [count=\y starting from -1] in \a {
      \foreach \c [count=\z starting from -1] in {0,...,\b} {
        \cubecolors{\a}
        \ifnum\c=0
        \else
            \cube{\x}{\y}{\z} 
        \fi
      }
    }
  }
}

información relacionada