
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}
Antwort1
So was?
\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
tikzpicture
intikzpicture
, da dies zu unerwarteten Nebenwirkungen führen kann; - die
fit
Bibliothektikz
wird 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}
Antwort3
Ohne TikZ nur \colorbox
es.
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 \mybox
der 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}
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}
Falls es Sie stört, dass Sie dies inner sep
per Hand einstellen müssen, lässt sich dies auf Kosten eines etwas längeren Codes erledigen.