So zeichnen Sie ein Diagramm mit benutzerdefinierten Themenkorrelativitäten

So zeichnen Sie ein Diagramm mit benutzerdefinierten Themenkorrelativitäten

Ich muss ein großes Diagramm erstellen, d. h. ein Diagramm mit benutzerdefinierten Themenkorrelationen, aber ich kann bestimmte Dinge nicht tun. Dazu werde ich Ti verwendenkZ.

Zutaten

Die Zutaten sind:

  1. Ein Titel. Viel gibt es dazu nicht zu sagen.
  2. Themen. Um diese Objekte zu erstellen, verwende ich den Quellcode vondiese sehr hilfreiche Antwort:

    Motivbild

  3. Große Rechtecke. Jedes Rechteck gibt das Jahr (auch als Niveau bezeichnet) an, in dem die Fächer gruppiert sind:

    Rechteck

  4. Pfeile. Sie verknüpfen die Fächer innerhalb desselben Lehrplanjahres und sogar zwischen verschiedenen Jahren:

    Pfeil

So werden die Dinge zusammengebaut

  1. Die Fächer sind innerhalb eines Rechtecks ​​(Jahreslaufbahn) gruppiert.
  2. Zwei Fächer können im selben Jahr oder in verschiedenen Jahren zusammengehören. Fächer aus demselben Jahr stehen immer nebeneinander (eines links, eines rechts).

Was habe ich getan

MWE:

\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=100cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{hyperref}
\usepackage{tikz}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }}, 
 }

\begin{document}

\thispagestyle{empty}   % To suppress page number

\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}

\noindent
\begin{Form}    % From https://tex.stackexchange.com/a/478346/152550
    \begin{tikzpicture}
        \path (0,0) pic (Geo)  {nonfillable subject={Subject}} (8.5cm,0) pic (Whatever)  {nonfillable subject={Subject}} (15cm,0) pic[draw=red] (Math)  {nonfillable subject={Math}};
        \draw[-latex] (Geo-Title) -- (Whatever-Title);
        \draw[-latex] (Whatever-Title) -- (Math-Title);
    \end{tikzpicture}
\end{Form}

\noindent
\begin{tikzpicture}
    \fill[fill=orange!30,rounded corners=50pt] (0,0) rectangle (11.5cm,-14cm) node[midway,align=center,font=\LARGE] {\bfseries Level $0$};
\end{tikzpicture}

\end{document}

Was habe ich getan

Endergebnis

Das ist was ich will:

Was ich möchte

Sie müssen das Bild nicht textlich kopieren, sondern nur einige Motive und Rechtecke.

Was ich brauche

  1. Die Anzahl der Rechtecke variiert zwischen 6und 7(nicht wie im letzten Bild, wo es vier sind). Der Code sollte so einfach wie möglich sein, damit Themen problemlos hinzugefügt werden können.
  2. Jedes Rechteck hat höchstens 8oder 9vertikale Motive und höchstens jedes Rechteck hat 2horizontale Motive.
  3. Die Jahresbeschriftung muss oben zentriert und nicht mittig platziert werden:

    Oben in der Mitte

  4. Sowohl die Rechtecke als auch die Motive innerhalb der Rechtecke müssen horizontal und vertikal zentriert sein, nicht wie bei meinem MWE, das linksbündig ausgerichtet ist. Kurz gesagt, alles muss zentriert sein:

    Alles muss zentriert sein

  5. Zwischen allen Objekten muss ein angemessener Abstand vorhanden sein, und der Abstand zwischen den Jahreszahlen muss das Wichtigste sein, da die Pfeile bei geringem Abstand sehr eng beieinander liegen und das Dokument hässlich aussieht. Als Referenz können Sie die von mir berechneten Maße (in Zentimetern) verwenden:

    Von mir berechnete Maße

    Wenn es sich um 7Jahre handelt (also um die größte Anzahl), dann beträgt die Breite der Seite: (0.5+4.5+1.5+4.5+0.5+3)*7-(3)+(1+1), was gleich ist 100.5cm. Die Höhe habe ich nicht berechnet, aber sie muss ungefähr betragen 20cm(unter Berücksichtigung der maximalen Anzahl vertikaler Felder, also 8/9).

    Solange die Länge des Blattes kleiner ist, ist es viel besser, ohne das Diagramm jedoch optisch zu verschlechtern (da ich das Diagramm auch gerne an ein Format anpassen möchte A4).

Das letzte, was passieren könnte:

Das Letzte, was passieren könnte

(Optionale Anforderung)

Automatisieren Sie die Farbe der Pfeile. Jedes Motiv hat seine eigene Pfeilfarbe. Wie Sie unter „Endergebnis“ sehen, gibt es für jedes Motiv eine Menge Pfeile. Ideal wäre also ein Befehl, der beispielsweise durch Übergabe der Gesamtzahl der Motive nden Farbverlauf in ngleiche Teile aufteilt, um die Farben zu vereinheitlichen. Wenn Ihnen das verrückt vorkommt, können Sie die Pfeile auch problemlos manuell einfärben.

Danke!!

Antwort1

Nach Absprache handelt es sich hierbei um eine verfeinerte Version.

  1. Sie können s in einer Matrix verwenden pic, nicht nur Knoten. Das ist hier sehr hilfreich.
  2. Für die horizontale und vertikale Zentrierung tikzpicturekönnen Sie einfach \centeringund verwenden \vfill.
  3. Das Aussehen des Dings wird durch einige PGF-Schlüssel und -Stile bestimmt. Dies ist im Code markiert.
  4. Ich habe nur sehr wenige Pfeile hinzugefügt, aber das zeigt im Prinzip, wie es geht. Mir ist keine narrensichere Methode bekannt, um zu vermeiden, dass diese Pfeile Knoten kreuzen.
  5. Sie müssen \begin{Form}...\end{Form}gegebenenfalls ergänzen. Ich habe im Wesentlichen keine Ahnung, was das betrifft. Dieser Beitrag konzentriert sich auf die TikZ-Teil.

\documentclass{article}
\usepackage[showframe,margin=0in,footskip=0.25in,paperwidth=50cm,paperheight=20cm]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage{globalvals}
\usepackage{hyperref}
\usepackage{tikz}
\usetikzlibrary{positioning,backgrounds,fit}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=4.5cm,align=center,font=\footnotesize\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace*{-0.5em}\TextField[align=1,name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0.15em}\TextField[align=1,name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~~/\hspace*{-0em}\TextField[align=1,name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]{}~};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF) 
{\hspace{1.2em}~/~\hspace{1.15em}~/~\hspace{2.35em}{}};
\node[title field] (-Title) 
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
 -- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
 }}, 
 manoooh/.style={column sep=-2cm,row sep=5mm}
 }

\begin{document}

\thispagestyle{empty}   % To suppress page number

\noindent
\begin{tikzpicture}
\fill[white,fill=orange] (0,0) rectangle (\paperwidth,-2cm) node[midway,align=center,font=\Huge] {\bfseries Some text here\\\LARGE More text here};
\end{tikzpicture}

\vfill
\centering
\begin{tikzpicture}[node distance=3.14cm]
 % step 1: add the matrices, name them mat0, mat1 etc.
 \begin{scope}[local bounding box=matrices] 
  \matrix[manoooh] (mat0)  {
         \pic (A)  {nonfillable subject={Subject}}; & & 
         \pic (B)  {nonfillable subject={Subject}}; \\
         & \pic (C)  {nonfillable subject={Subject}}; & \\
         };
  \matrix[manoooh,right=of mat0] (mat1){
         \pic (D)  {nonfillable subject={Subject}}; \\ 
         \pic (E)  {nonfillable subject={Subject}}; \\
         \pic (F)  {nonfillable subject={Subject}}; \\ 
         \pic (G)  {nonfillable subject={Subject}}; \\ 
         };
  \matrix[manoooh,right=of mat1] (mat2)  {
         \pic (H)  {nonfillable subject={Subject}}; & & 
         \pic (I)  {nonfillable subject={Subject}}; \\
         & \pic (J)  {nonfillable subject={Subject}};  & \\
         \pic (K)  {nonfillable subject={Subject}}; 
         & &
         \pic (L)  {nonfillable subject={Subject}}; \\
         };
  \matrix[manoooh,right=of mat2] (mat3)  {
         & \pic (M)  {nonfillable subject={Subject}};  & \\
         \pic (N)  {nonfillable subject={Subject}}; & & 
         \pic (O)  {nonfillable subject={Subject}}; \\
         \pic (P)  {nonfillable subject={Subject}}; 
         & &
         \pic (Q)  {nonfillable subject={Subject}}; \\
         };
 \end{scope}
 \foreach \X in {0,...,3} %<- if you have more or less matrices, adjust 3       
 {\node[anchor=south,yshift=1cm,align=center,font=\LARGE\bfseries\boldmath] 
 at (mat\X |-matrices.north) (L\X) {Level $\X$};
 \begin{scope}[on background layer]
  % the fit parameters determine the shape of the background rectangles
  \node[fit=(L\X) (mat\X) (matrices.south-|mat\X.south),inner ysep=5mm,
  inner xsep=5mm,fill=orange!30,rounded corners=50pt](F\X){};
 \end{scope}}
 % now add the arrows 
 \foreach \X in {D,...,G}
 {\draw[blue,-latex] (B-Title) to[out=0,in=180] (\X-Title);}
\end{tikzpicture}

\vfill
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen