[Tex/LaTex] A Tunisian flag on Tikz using a macro “m-grams”

graphicstikz-pgf

I tried to represent the flag of my country.
I typed this code. But I believe that the position of stars, circles, … is not so respected. In addition I have a left margin "white band" I want to eliminate it, but without result.

Please can you help me get the correct code.

%A tunisian flag
%Author: Fethi GHARIANI
%using Tom Bombadil code in http://tex.stackexchange.com/questions/58903/how-to-draw-star-in-tikz-background who uses a macro for drawing stars as well as "n-grams"
\documentclass[fontsize=14pt]{scrartcl}
\usepackage[norsk,francais]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[dvips=false,pdftex=false,vtex=false,paperwidth=24cm,paperheight=16cm,margin=0cm,bottom=0cm,top=0cm,nohead]{geometry}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}




% inner radius, outer radius, tips, rot angle, options ├ętoile
\newcommand{\tstar}[5]{
\pgfmathsetmacro{\starangle}{360/#3}
\draw[#5] (#4:#1)
\foreach \x in {1,...,#3}
{ -- (#4+\x*\starangle-\starangle/2:#2) -- (#4+\x*\starangle:#1)
}
-- cycle;
}

\newcommand{\ngram}[4]{% outer radius, tips, rot angle, options
\pgfmathsetmacro{\starangle}{360/#2}
\pgfmathsetmacro{\innerradius}{#1*sin(90-\starangle)/sin(90+\starangle/2)}
\tstar{\innerradius}{#1}{#2}{#3}{#4}
}

\definecolor{rec}{rgb}{1,0,0}
\definecolor{cir}{rgb}{1,1,1}
\definecolor{hon}{rgb}{1,0,0}
\definecolor{sta}{rgb}{1,1,1}

\begin{document}
\begin{tikzpicture}
  \fill[rec] rectangle (24cm,16cm);
  \fill[cir] (12,8) circle (4cm);
  \fill[hon] (12,8) circle (3cm);
  \fill[sta] (12.8,8) circle (2.4cm);
  \ngram{1.5}{5}{72}{red,thick,fill=red,xshift=13.2cm,yshift=8cm};
\end{tikzpicture}
\end{document}

Best Answer

No n-grams code is required. Standard star node shape can do.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\definecolor{red}{RGB}{206,17,38}
\noindent\begin{tikzpicture}
  % Use wikipedia's dimensions
  \fill[red] rectangle (12, 8);
  \fill[white] (6,4) circle (2);
  \fill[red] (6,4) circle (1.5);
  \fill[white] (6.4,4) circle (1.2);
  \node[star,fill=red, minimum size=1.8cm, rotate=90, star point ratio=2.617,inner sep=0pt] at (6.4,4) {};
  % Star point ratio is GoldenRatio^2 (1.618^2)
\end{tikzpicture}
\end{document}

Result

Dimensions were taken from the reglamentary specification after 1999 law. This specification says nothing about the star shape and rotation, but it is safe to assume that it is a regular pentagram and that the flag has a horizontal symmetry axe, which completes the required information.

Update

There is the pre-1999 version:

pre1999

In this case I wrote a code more complex, in order to show a different technique. All elements in the flag are tikz nodes, and the styles define their size and position. Also all dimensions are relative to \flagwidth which can be changed at will.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{shapes.geometric}

\definecolor{red}{RGB}{206,17,38}
\def\flagwidth{6cm}
\tikzset{
flag/.style = { 
  fill=red, 
  minimum width=\flagwidth, 
  minimum height=2/3*\flagwidth, 
  inner sep = 0pt,
},
inner circle/.style = {
  fill = white,
  minimum size=1/3*\flagwidth, 
  circle,
  inner sep = 0pt,
},
crescent/.style = {
  fill = red,
  minimum size = 2/9*\flagwidth,
  circle,
  inner sep = 0pt,
  after node path = {node[moon] {}},
},
moon/.style = {
  fill = white,
  xshift= 1/45*\flagwidth,
  minimum size = 1/5*\flagwidth,
  inner sep = 0pt, 
  circle,
 },
inner star/.style = {
  fill = red,
  star, 
  inner sep = 0pt,
  xshift= 1/30*\flagwidth,
  minimum size=4/27*\flagwidth,
  rotate=90, 
  star point ratio=2.617,
}
}

\noindent\begin{tikzpicture}%[scale=0.01]
% Use pre 1999 dimensions
% http://en.wikipedia.org/wiki/File:Mesures_drapeau_Tunisie_avant_1999.svg
\draw node[flag] {} 
      node[inner circle]  {} 
      node[crescent] {}
      node[inner star] {};
\end{tikzpicture}
\end{document}