
BEARBEITEN :Ich habe einige Beispiele hinzugefügt, um zu veranschaulichen, was ich tun möchte.
Ich möchte in der Lage sein, verschachtelte Young-Tableaus zu zeichnen. Eine Definition von Young-Tableaus finden Sie unterhttps://en.wikipedia.org/wiki/Young_tableau. Mit verschachtelt meine ich, dass der Inhalt einer Zelle eines Tableaus selbst ein Tableau ist. Mein Ergebnis sollte beispielsweise so aussehen:
Im Allgemeinen können Zeilen und Spalten beliebig lang sein. Hier ist ein weiteres Beispiel, um zu veranschaulichen, was ich tun möchte:
Da ich auch Boulevardzeitungen und Kolumnen-Boulevardzeitungen möchte, zeichne ich meine Tableaus mit der Methode in dieser Antwort (anstelle der Pakete ytableau oder genyoungtabtikz):
Spalten-Boulevardzeitungen versus Zeilen-Boulevardzeitungen
Ich bin jedoch nicht an Tikz gewöhnt und es funktioniert nicht so, wie ich es gerne hätte. Für mein erstes Beispiel gibt es einen minimalen Code (ich habe \Tableau und \PTableau verwendet, damit der Computer die beiden Methoden nicht verwechselt):
\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}
Mit diesem Code sieht das Ergebnis nicht so aus, wie ich es möchte, sondern so (ich habe es wegen eines Computerproblems gezeichnet, aber es veranschaulicht das Problem):
Was muss ich an \PTableau ändern, um das gewünschte Ergebnis zu erhalten? Und vor allem: Warum?
Antwort1
Ich bin nicht sicher, ob die Ausgabe Ihren Vorstellungen entspricht, aber hier ist ein Ansatz, bei dem \pic
s verwendet werden, die nicht wirklich verschachtelt sind, sondern so übereinander gestapelt sind, dass das Ergebnis so aussieht, als wären sie verschachtelt:
\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}