Wie füge ich um einen Knoten mehrere verschiedenfarbige Ränder hinzu?

Wie füge ich um einen Knoten mehrere verschiedenfarbige Ränder hinzu?

Ich möchte einen Knoten zeichnen, der mit einer Tabelle mit Daten gefüllt werden soll, und er sollte (drei) verschiedenfarbige Ränder haben. Ich konnte weder im PGF-Handbuch noch im Internet oder in diesem Forum etwas dazu finden, also habe ich mir dieses MWE ausgedacht ...

Das Verschachteln von drei Tikzpicture-Umgebungen kommt mir wie eine GROSSE amateurhafte Pfuscherei vor. Und wenn nicht, wie werde ich den weißen Raum zwischen den Rändern los?

\documentclass[pdftex,dutch]{article}
\usepackage{babel}
\usepackage{tikz}

\begin{document}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0}
\definecolor{DE.geel}{RGB}{255,207,0}

\begin{tikzpicture}
\node[rectangle,line width=0.5mm,draw=black] at (0,0)
{\begin{tikzpicture}
 \node[rectangle,line width=0.5mm,draw=DE.rood] at (0,0)
 {\begin{tikzpicture}
  \node[rectangle,line width=0.5mm,draw=DE.geel,fill=lichtgrijs] at (0,0) {Vliegtuig};
  \end{tikzpicture}};
 \end{tikzpicture}};
\end{tikzpicture}

\end{document}

Mein Kludge

Antwort1

So was?

Bildbeschreibung hier eingeben

\documentclass[dutch]{article}
\usepackage{babel}
\usepackage{tikz}
\usetikzlibrary{fit}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0} % Rood in Duitse vlag
\definecolor{DE.geel}{RGB}{255,207,0} % Geel in Duitse vlag

\begin{document}
    \begin{tikzpicture}[
box/.style = {draw=#1, line width=0.5mm,inner sep=0.25mm}
                        ]
\node (n1) [box=DE.geel,
            fill=lichtgrijs, inner sep=2mm] at (0,0) {Vliegtuig};
\node (n2) [box=DE.rood, fit=(n1)] {};
\node (n3) [box=black,   fit=(n2)] {};
    \end{tikzpicture}
\end{document}

Einige Notizen:

  • nisten Sie niemals tikzpicturein tikzpicture, da dies zu unerwarteten Nebenwirkungen führen kann;
  • die fitBibliothek tikzwird verwendet, um das Gewünschte zu erhalten;
  • Sie können einen Knotenstil definieren, der alle Knoten zu einem zusammenführt, aber zuerst möchte ich wissen, ob das dargestellte Ergebnis das ist, wonach Sie suchen :-)

Nachtrag: Hier ist eine dreifarbige Knotenvariante. Insbesondere append after command=wird die Option in einem Knotenstil für die mittleren und äußeren Farben verwendet:

\documentclass[dutch]{article}
\usepackage{babel}
\usepackage{tikz}
\usetikzlibrary{fit}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0} % Rood in Duitse vlag
\definecolor{DE.geel}{RGB}{255,207,0} % Geel in Duitse vlag

\begin{document}

    \begin{tikzpicture}[
tcb/.style = {% three color border
              draw=DE.geel, fill=lichtgrijs,
              line width=0.5mm,inner sep=2mm,
              append after command={\pgfextra{\let\LN\tikzlastnode
                    \node [draw=DE.rood, line width=0.5mm,
                           inner sep=0.25mm,fit=(\LN)] {};
                    \node [draw, line width=0.5mm,
                           inner sep=0.75mm,fit=(\LN)] {};
              }}}
                        ]
\node (n1) [tcb] {Vliegtuig};
    \end{tikzpicture}
\end{document}

Das Ergebnis ist das gleiche wie zuvor.

Antwort2

Nur zum Spaß:

\documentclass{standalone}% to avoid cropping
\usepackage{babel}% not needed for MWE
\usepackage{tikz}
\usetikzlibrary{calc}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0}
\definecolor{DE.geel}{RGB}{255,207,0}

\begin{document}
\begin{tikzpicture}
\begin{scope}[line width=0.5mm]
  \node[draw=black,inner sep = 1.5mm] (n1) at (0,0) {Vliegtuig};
  \draw[DE.rood] ($(n1.south west)+(0.75mm,0.75mm)$) rectangle ($(n1.north east)+(-0.75mm,-0.75mm)$);
  \draw[DE.geel] ($(n1.south west)+(1.25mm,1.25mm)$) rectangle ($(n1.north east)+(-1.25mm,-1.25mm)$);
\end{scope}
\end{tikzpicture}
\end{document}

Demo

Antwort3

Ohne TikZ nur \colorboxes.

Ich habe hinzugefügt, \usepackage{picture}dass die nicht in Vielfachen von angegebenen Breiten/Längen verwendet werden sollen \unitlength.

Ich habe \usepackage{calc}der Einfachheit halber hinzugefügt, dass Berechnungen in durchgeführt werden können \setlength(Sie können dies vermeiden, wenn Sie verwenden \addtolength).

Ich habe verwendet, \makebox(\myxxxwidth, \myxxxheight){...}um die Breite und Gesamthöhe der Boxen anzugeben.

Die Breite der Kästen habe ich folgendermaßen berechnet:

width of the border + width of the content + width of the border

das ist

width of the content + double of the width of the border

Die Rahmenbreiten können Sie beliebig einstellen.

Das Gleiche gilt für Höhen.

Ich habe \myboxder Einfachheit halber einen neuen Befehl erstellt. Sie können ihn sogar ändern, um die Rahmenbreiten als Parameter/Parameter festzulegen, wenn Sie möchten.

\documentclass[pdftex,dutch]{article}
\usepackage{babel}

\usepackage{xcolor}
\usepackage{picture}% see here: https://tex.stackexchange.com/a/48238/101651
\usepackage{calc}
\newlength{\mygraywidth}
\newlength{\mygrayheight}
\newlength{\myyellowwidth}
\newlength{\myyellowheight}
\newlength{\myredwidth}
\newlength{\myredheight}
\newlength{\myblackwidth}
\newlength{\myblackheight}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0}
\definecolor{DE.geel}{RGB}{255,207,0}

\newcommand{\mybox}[1]{%
    \setlength{\mygraywidth}{\widthof{#1}+4mm}
    \setlength{\mygrayheight}{\totalheightof{#1}+4mm}
    \setlength{\myyellowwidth}{\mygraywidth+1mm}
    \setlength{\myyellowheight}{\mygrayheight+1mm}
    \setlength{\myredwidth}{\myyellowwidth+1mm}
    \setlength{\myredheight}{\myyellowheight+1mm}
    \setlength{\myblackwidth}{\myredwidth+1mm}
    \setlength{\myblackheight}{\myredheight+1mm}
    \colorbox{black}{\makebox(\myblackwidth,\myblackheight){%
        \colorbox{DE.rood}{\makebox(\myredwidth,\myredheight){%
            \colorbox{DE.geel}{\makebox(\myyellowwidth,\myyellowheight){% 
                \colorbox{lichtgrijs}{\makebox(\mygraywidth, \mygrayheight){%
                #1}}%
            }}%
        }}%
    }}%
    }

\begin{document}

\mybox{Vliegtuig}

\vspace{4ex}

\mybox{Do you like it?}

\end{document}

Bildbeschreibung hier eingeben

Antwort4

Sie benötigen dafür keine Bibliothek und können die Dinge viel automatischer gestalten, indem Sie einfach die Liste der Farben angeben. Dann läuft es darauf hinaus, zu sagen

\node[inner sep=8pt,line width=2pt,multicolor rectangle={DE.rood,DE.geel}] {Vliegtuig};

Diese Strategie kann bei Bedarf auch auf andere Knotenformen angewendet werden.

Hier ist der Code.

\documentclass[pdftex,dutch]{article}
\usepackage{babel}
\usepackage{tikz}

\begin{document}

\definecolor{lichtgrijs}{RGB}{232,232,232}
\definecolor{DE.rood}{RGB}{222,0,0}
\definecolor{DE.geel}{RGB}{255,207,0}

\begin{tikzpicture}[multicolor rectangle/.style={draw,path picture={
\foreach \CPP [count=\YPP] in {#1}
{\draw[\CPP] ([xshift=\YPP*\pgflinewidth,yshift=\YPP*\pgflinewidth]path picture bounding box.south west)
rectangle ([xshift=-\YPP*\pgflinewidth,yshift=-\YPP*\pgflinewidth]path picture bounding box.north east); }}}]
\node[inner sep=8pt,line width=2pt,multicolor rectangle={DE.rood,DE.geel}] {Vliegtuig};
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Falls es Sie stört, dass Sie dies inner sepper Hand einstellen müssen, lässt sich dies auf Kosten eines etwas längeren Codes erledigen.

verwandte Informationen