11

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}
5
  • 1
    The stripe one the left can be eliminated via adding a \noindent as the first line after \begin{document}. As far as the location of the starts and circles it should just be a matter of tweaking the coordinates to your liking. But comparing to this flag, the positioning and size look pretty good. I can't see what you positioning needs to be changed. Jan 18, 2013 at 8:10
  • @Peter Grill. thank you very much, It works for the margin.
    – Fethi G.
    Jan 18, 2013 at 8:16
  • 1
    On the size and position, please see for example, dc444.4shared.com/img/px48cTom/s7/Dimension_flagTunisia.png
    – Fethi G.
    Jan 18, 2013 at 8:23
  • 1
    With xshift=12.8cm (instead of 13.2cm), the star is located in the center of the inner circle... Jan 18, 2013 at 8:27
  • @Paul Gabriot. thank's, because i have a problem with the star position.
    – Fethi G.
    Jan 18, 2013 at 8:36

3 Answers 3

13

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}
6
  • Thank you, I thought of this question. "How to change this code."
    – Fethi G.
    Jan 18, 2013 at 9:42
  • 1
    @FethiG. You are right, I didn't answer directly your question, sorry. But I thought you could be interested in a simpler a more compact solution. And, anyway, I "changed your code" didn't I? :-)
    – JLDiaz
    Jan 18, 2013 at 10:38
  • not at all, I think to ask how to change this code, because, I believe that is very long. The reglamentary specification after 1999 law, changes the position of the 3rd circle, but I don't like it. Thank's.
    – Fethi G.
    Jan 18, 2013 at 10:54
  • Really, I thank you very much. I'm a biginner in Latex and Tikz, but I understand.
    – Fethi G.
    Jan 18, 2013 at 11:57
  • The red color should be {206,17,38} (RGB) (fr.wikipedia.org/wiki/Drapeau_de_la_Tunisie#Description). Jan 18, 2013 at 14:02
2

Here is Turkish Flag:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\definecolor{red}{RGB}{227, 10, 23}
\noindent\begin{tikzpicture}
% Use wikipedia's dimensions
  \fill[red] rectangle (12, 8);%G=8, L=12, L=1.5 G
   \fill[white] (4,4) circle (2);
   \fill[red] (4.5,4) circle (1.6);
    \node[star,fill=white, minimum size=2cm, rotate=90, star point ratio=2.617,inner sep=0pt] at (6.83333333333,4) {};
  \end{tikzpicture}
  \end{document}

0
2

The Tunisian and the Turkish flag according to their construction sheets created with l3draw (note that the halfmoons are constructed not simply by patching two circles over each other, but by calculating the angle and the coordinates for drawing two arcs):

\documentclass[border=10pt, multi=draw]{standalone}
\usepackage{l3draw}

\ExplSyntaxOn

\cs_new:Npn \myflags_draw_five_pointed_star:nnn #1 #2 #3 {
    \draw_scope_begin:
        \draw_transform_shift:n { #1 }
        \draw_path_moveto:n { \draw_point_polar:nn { #2 } { #3 } }
        \int_step_inline:nnnn { 72 } { 72 } { 360 } {
            \draw_path_lineto:n 
                { \draw_point_polar:nn { 2 / ( 3 + sqrt(5) ) * #2 } { #3 + ##1 - 36 } }
            \int_compare:nNnF { ##1 } = { 360 } {
                \draw_path_lineto:n { \draw_point_polar:nn { #2 } { #3 + ##1 } }
            }
        }
        \draw_path_close:
        \draw_path_use_clear:n { fill }
    \draw_scope_end:
}

\cs_generate_variant:Nn \clist_item:nn { en }
\tl_new:N \l_myflags__intersect_circles_tl
\fp_new:N \l_myflags_crescent_outer_angle_fp
\fp_new:N \l_myflags_crescent_inner_angle_fp
\cs_new:Npn \myflags_draw_crescent:nnnn #1 #2 #3 #4 {
    \tl_set:Nn \l_myflags_crescent_intersect_circles_tl { 
        \draw_point_intersect_circles:nnnnn { #1 } { #2 } { #3 } { #4 } { 2 } 
    }
    \fp_set:Nn \l_myflags_crescent_outer_angle_fp {
        atand ( 
            \clist_item:en { \l_myflags_crescent_intersect_circles_tl } { 2 } - 
                \clist_item:en { \draw_point:n { #1 } } { 2 } , 
            \clist_item:en { \l_myflags_crescent_intersect_circles_tl } { 1 } - 
                \clist_item:en { \draw_point:n { #1 } } { 1 }
        ) 
    }
    \fp_set:Nn \l_myflags_crescent_inner_angle_fp {
        atand ( 
            \clist_item:en { \l_myflags_crescent_intersect_circles_tl } { 2 } - 
                \clist_item:en { \draw_point:n { #3 } } { 2 } , 
            \clist_item:en { \l_myflags_crescent_intersect_circles_tl } { 1 } - 
                \clist_item:en { \draw_point:n { #3 } } { 1 }
        ) 
    }
    \draw_path_moveto:n { \l_myflags_crescent_intersect_circles_tl }
    \draw_path_arc:nnn { \l_myflags_crescent_outer_angle_fp } 
        { 360 - \l_myflags_crescent_outer_angle_fp } { #2 }
    \draw_path_arc:nnn { 360 - \l_myflags_crescent_inner_angle_fp } 
        { \l_myflags_crescent_inner_angle_fp } { #4 }
    \draw_path_close:
}

\NewDocumentEnvironment{draw}{ }{ 
    \ExplSyntaxOn
    \draw_begin:
}{ 
    \draw_end:
    \ExplSyntaxOff
}

\ExplSyntaxOff

\begin{document}
\begin{draw}

    \color_fill:nn { RGB } { 206 , 17 , 38 }
    \draw_path_rectangle_corners:nn { 0cm , 0cm } { 12cm , 8cm }
    \draw_path_use_clear:n { fill }

    \color_fill:n { white }
    \draw_path_circle:nn { 6cm , 4cm } { 2cm }
    \draw_path_use_clear:n { fill }

    \color_fill:nn { RGB } { 206 , 17 , 38 }
    \myflags_draw_crescent:nnnn { 6cm , 4cm } { 1.5cm } { 6.4cm , 4cm } { 1.2cm } 
    \draw_path_use_clear:n { fill }
    
    \color_fill:nn { RGB } { 206 , 17 , 38 }
    \myflags_draw_five_pointed_star:nnn { 6.4cm , 4cm } { 0.9cm } { 180 }
    \draw_path_use_clear:n { fill }

\end{draw}

\begin{draw}

    \color_fill:nn { RGB } { 227 , 10 , 23 }
    \draw_path_rectangle_corners:nn { 0cm , 0cm } { 12cm , 8cm }
    \draw_path_use_clear:n { fill }

    \color_fill:n { white }
    \myflags_draw_crescent:nnnn { 4cm , 4cm } { 2cm } { 4.5cm , 4cm } { 1.6cm } 
    \draw_path_use_clear:n { fill }
    
    \myflags_draw_five_pointed_star:nnn { 6.4cm , 4cm } { 1cm } { 180 }
    \draw_path_use_clear:n { fill }

\end{draw}
\end{document}

enter image description here

2
  • +1: Amazing. Never used l3draw myself but the result looks very good Mar 1 at 8:34
  • 1
    Note that extracting x and y parts of point coordinates should probably not be done via \clist_item:en, but I know of no better solution to extract items from tuples. Mar 3 at 13:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .