# Scaleable 'double border'-rectangle

How can I draw a rectangle with a 'double-border', which allows to specify a color for each of its 8 (4 inner, 4 outer) borders separately and does not widen the separating space between the outer and inner rectangle when scaled in a resizebox?

(Sorry, I'm very new to TikZ.)

I tried the following, its shortcomings are: its 3 'rectangles' (inner border equals outer border) and its edges look 'not connected':

\begin{tikzpicture}
\draw[red, double = black] (0,0) -- (1,0);
\draw[green, double = purple] (1,0) -- (1,1);
\draw[blue, double = brown] (1,1) -- (0,1);
\draw[yellow, double = white] (0,1) -- (0,0);
\end{tikzpicture}


• Example code showing what you have tried, what doesn't work, and maybe a picture of what you are trying to achieve would go a long way to help those trying to help you. May 7 '14 at 19:06
• I think this question is related with your previous one but I still don't understand what you want to do. Could you post any example (even hand-drawn) showing it? Why do you need to resize it while keeping a constant distance between borders? May 7 '14 at 19:36
• Sorry, I guess this question was really unclear ... tried my best to clarify ...
– MCH
May 7 '14 at 20:17
• Do you want your tikz figure being resized to fill right area? keeping proportions? just vertically centered? May 7 '14 at 22:28

Maybe that ?

\documentclass{article}
\usepackage{tikz,lipsum}
\usetikzlibrary{calc}

\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}

\makeatletter
\newcommand{\Square}[2]{%
\def\@W{#1}%
\begin{tikzpicture}[baseline=(current bounding box.base)]
\foreach \o/\i [count=\j from 0] in {
blue/red,
yellow/black,
orange/gray,
green/violet}{%
\fill[rotate=\j*90,\o]
(-#2,-#2)--(#2,-#2)--(#2-\@W,\@W-#2)--(\@W-#2,\@W-#2)--cycle ;
\fill[rotate=\j*90,\i]
(-#2+\@W,-#2+\@W)--(#2-\@W,-#2+\@W)--(#2-2*\@W,2*\@W-#2)--(2*\@W-#2,2*\@W-#2)--cycle ;
}
\end{tikzpicture}
}
\makeatother

\newlength{\MyHeight}
\newsavebox{\MyBox}

\newcommand{\DBbox}[3][.05]{%
\begin{lrbox}{\MyBox}
\fbox{%
\begin{minipage}{#2}
#3
\end{minipage}
}%
\end{lrbox}%
\settoheight{\MyHeight}{\usebox{\MyBox}}%
\usebox{\MyBox}%
\raisebox{.2\baselineskip}{\Square{#1}{\MyHeight}}% <- WHY ???
}

\begin{document}

\DBbox[5pt]{9cm}{%
\lipsum[1]}

\bigskip

\DBbox[20pt]{7cm}{%
\lipsum[1]}

\end{document}


More stuff :

\documentclass[margin=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}

\makeatletter
\newcommand{\Square}[5][%
blue/red,
yellow/black,
orange/gray,
green/violet%
]{%
\pgfpointdiff{\pgfpointanchor{#3}{center}}
{\pgfpointanchor{#4}{center}}
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
\pgfmathparse{veclen(\pgf@xa,\pgf@ya)/2.82843}
\let\@L\pgfmathresult
\def\@W{#2}% epaisseur
%\def\@L{#3}% côté
\begin{scope}[shift={($(#3)!.5!(#4)$)}]
\node {#5} ;
\foreach \o/\i [count=\j from 0] in {#1}{%
\fill[rotate=\j*90,\o]
(-\@L pt,-\@L pt)--(\@L pt,-\@L pt)--(\@L-\@W,\@W-\@L)--(\@W-\@L,\@W-\@L)--cycle ;
\fill[rotate=\j*90,\i]
(-\@L+\@W,-\@L+\@W)--(\@L-\@W,-\@L+\@W)--(\@L-2*\@W,2*\@W-\@L)--(2*\@W-\@L,2*\@W-\@L)--cycle ;
}
\end{scope}
}
\makeatother

\begin{document}
\begin{tikzpicture}

\coordinate (A) at (0,0) ;
\coordinate (B) at (5,5) ;
\coordinate (C) at (3,-3) ;

\Square{8pt}{A}{B}{Text 2} ;
\Square[
red/orange,
yellow!30!green/gray,
blue!25/black,
violet/green%
]{5pt}{A}{C}{Text 1} ;
\end{tikzpicture}
\end{document}

• \xdef\W{#1}? Why? I can see no reason for it (and several for avoiding it). May 7 '14 at 23:09
• It is a relic from something else but in fact #2+\W is easier read than #2+#1. What are the reasons to avoid it? May 7 '14 at 23:24
• I don't think so; and globally defining \W is definitely not a good idea. May 7 '14 at 23:25
• I made the changes. I understand the problem with the global, but how to define locally ? May 7 '14 at 23:31
• There's no reason for it; you should use a control sequence that is not likely to be used elsewhere (this is what \makeatletter is for) or enclose the whole working in a group. May 7 '14 at 23:32