
EDITAR :Agregué algunos ejemplos para ilustrar lo que quiero hacer.
Me gustaría poder dibujar cuadros Young anidados. Para obtener una definición de cuadros jóvenes, consultehttps://en.wikipedia.org/wiki/Young_tableau. Lo que quiero decir con anidado es que el contenido de una celda de un cuadro es en sí mismo un cuadro. Por ejemplo, mi resultado debería verse así:
En general, las filas y columnas pueden tener cualquier longitud. Aquí hay otro ejemplo para ilustrar lo que quiero poder hacer:
Como también quiero tabloides y tabloides de columnas, dibujo mis cuadros usando el método de esta respuesta (en lugar de los paquetes ytableau o genyoungtabtikz):
tabloides de columna versus tabloides de fila
Sin embargo, no estoy acostumbrado al tikz y no funciona como me gustaría. Hay un código mínimo para mi primer ejemplo (usé \Tableau y \PTableau para que la computadora no confunda ambos métodos):
\documentclass{article}
\usepackage{tikz}
\newcount\tableauRow\newcount\tableauCol
\newcommand\Tableau[2]{%
\begin{tikzpicture}[scale=#2,draw/.append style={thick,black},baseline=-4mm]
\tableauRow=0
\foreach \Row in {#1} {
\tableauCol=1
\foreach\k in \Row {
\draw(\the\tableauCol,\the\tableauRow)+(-.5,-.5)rectangle++(.5,.5);
\draw(\the\tableauCol,\the\tableauRow)node{\k};
\global\advance\tableauCol by 1
}
\global\advance\tableauRow by -1
}
\end{tikzpicture}
}
\newcommand\PTableau[2]{%
\begin{tikzpicture}[scale=#2,draw/.append style={thick,black},baseline=-4mm]
\tableauRow=0
\foreach \Row in {#1} {
\tableauCol=1
\foreach\k in \Row {
\draw(\the\tableauCol,\the\tableauRow)+(-.5,-.5)rectangle++(.5,.5);
\draw(\the\tableauCol,\the\tableauRow)node{\k};
\global\advance\tableauCol by 1
}
\global\advance\tableauRow by -1
}
\end{tikzpicture}
}
\begin{document}
\[
\PTableau{{\Tableau{{1,2},{3,4}}{0.5},\Tableau{{5,6},{7,8}}{0.5}}}{1.5}
\]
\end{document}
Con este código, el resultado se ve así en lugar de lo que quiero (lo dibujé debido a un problema con la computadora, pero ilustra el problema):
¿Qué debo modificar en \PTableau para obtener el resultado que quiero? Y sobre todo, ¿por qué?
Respuesta1
No estoy seguro de si el resultado es lo que imagina, pero aquí hay un enfoque que utiliza \pic
mensajes de correo electrónico que en realidad no están anidados, sino que se apilan uno sobre otro para que el resultado parezca que están anidados:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\tikzset{
pics/tableau/.style={
code={
\tikzset{tableau/.cd, #1}
\pgfmathsetmacro{\s}{\pgfkeysvalueof{/tikz/tableau/size}*1pt}
\pgfmathsetmacro{\c}{\pgfkeysvalueof{/tikz/tableau/cols}}
\begin{scope}[
shift={(\pgfkeysvalueof{/tikz/tableau/at})},
]
\foreach \n [count=\i from 0] in \tableaulist {
\path[\ifx\n\empty\else draw\fi]
({mod(\i,\c)*\s},{int(-1*\i/\c)*\s})
coordinate (-\i)
rectangle ++({\s},{-1*\s})
node[pos=0.5] (-n\i) { \n };
}
\end{scope}
}
},
tableau/list/.store in=\tableaulist,
tableau/list/.initial={1},
tableau/cols/.initial={2},
tableau/size/.initial={1},
tableau/at/.initial={0,0}
}
\begin{document}
\begin{tikzpicture}
\pic (A) {tableau={list={1,{},9,10,11,{},12,{},20}, cols=3}};
\pic[tableau/size=0.5] (B) {tableau={list={2,3,{},8}, cols=2, at=A-1}};
\pic[tableau/size=0.25, font=\tiny]
{tableau={list={4,5,6,7}, cols=2, at=B-2}};
\pic[tableau/size=0.333, font=\tiny]
{tableau={list={13,14,15,16,17,18,{},{},19}, cols=3, at=A-7}};
\end{tikzpicture}
\end{document}