在 Tikz 中画一面旗帜!

在 Tikz 中画一面旗帜!

我在使用 tikz 时遇到了一些麻烦。我想在 Tikz 中画一面旗帜 - 但收效甚微。这是一张草图: 草图

草图看起来并不像它应该的样子:字母只是在那里,这样我就能告诉你我真正想要的是什么。黑色矩形也不应该在那里,它应该只显示区域。它应该看起来像一个红色矩形上的绿色矩形,中间有一个星号。

字母是坐标(单位为 px)。这里坐标

旗帜边缘:

  • N=(0,300)
  • M=(450,0)

星形边缘:

  • A=(200, 180)

  • B=(185,135)

  • C=(225,205)

  • D=(265,135)

  • E=(250,180)

以下是我尝试过的:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes,snakes}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{xcolor}


\definecolor{grun}{HTML}{239d48}%green - colour of the top rectangle
\definecolor{rot}{HTML}{bf0028}%red - colour of the bottom rectangle
\definecolor{gelb}{HTML}{f6ec0f}%yellow - colour of the star


\begin{document}

\begin{tikzpicture}
\fill[fill=grun] (0, 0) rectangle (12, 4.5);
\fill[fill=red] (0,4.5) rectangle (12, 9);
\end{tikzpicture}

\end{document}

问题: 我不知道为什么 definecolor 对“rot”和“gelb”不起作用。我不知道如何定义 tikz 的单位(因此,我可以用 px 写坐标而不是 cm 来得到结果)。我不知道如何绘制星星。

附加问题: 是否可以调整已完成的 tikzpicture 的比例(使其填满整个页面)?我想过类似 minipage 的东西?但这不是重要的问题,我只是对下一个 Tikz 项目感到好奇。

谨此致以亲切的问候并提前致谢!

答案1

由于已经给出了足够的答案,我可以自由地使用 MetaPost 制作这张图片。

对我来说,这是一个使用该luamplib软件包的一些最新功能的机会(它为 LuaLaTeX 中的 MetaPost 提供了接口)。更准确地说,我通过命令使用了单元px(我以前不知道) ,并通过命令使用了软件包\mpdim定义的颜色集成。xcolor\mpcolor

矩形的尺寸符合 OP 的第一个愿望,除了星号,星号似乎缺少了几个点。所以我加了一颗我自己的星号。

编辑我做了一些小改动,让国旗更像布基纳法索的官方国旗,就像 Paul Gaborit 在对原帖提问的评论中所说的那样。因此,红色和绿色部分是反转的,星星直径正好是国旗高度的三分之一。

\documentclass{standalone}
\usepackage{luamplib, xcolor}

\definecolor{grun}{HTML}{239D48}%green - colour of the top rectangle
\definecolor{rot}{HTML}{BF0028}%red - colour of the bottom rectangle
\definecolor{gelb}{HTML}{F6eC0F}%yellow - colour of the star

\begin{document}
\begin{mplibcode}

u := \mpdim{1px}; % Unit length

beginfig(1);
    z = u*(450, 300); path rect; rect = unitsquare xscaled x yscaled .5y;
    % Star summits (I was not able to use the OP's given coordinates)
    pair S[]; S0 = y/6*right rotated 18;    
    for i = 2 step 2 until 8: S[i] := S[i-2] rotated 72; endfor
    for i = 1 step 2 until 9:
        S[i] = whatever[S[(i-3) mod 10], S[(i+1) mod 10]] = whatever[S[i-1], S[(i+3) mod 10]];
    endfor
    % Drawings
    fill rect withcolor \mpcolor{grun}; 
    fill rect shifted (0, .5y) withcolor \mpcolor{rot};
    fill S0 for i = 1 upto 9: -- S[i] endfor -- cycle shifted .5z withcolor \mpcolor{gelb};
endfig;

\end{mplibcode}
\end{document}

在此处输入图片描述

答案2

注意,1px=0.026458cm您可以将单位设置tikzpicture

\begin{tikzpicture}[x=0.026458cm,y=0.026458cm]

并使用standalone类。现在你的代码将是

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes,snakes}

\definecolor{grun}{HTML}{239D48}
\definecolor{rot}{HTML}{BF0028}
\definecolor{gelb}{HTML}{F6EC0F}


\begin{document}

\begin{tikzpicture}[x=0.026458cm,y=0.026458cm]
  \fill[fill=grun] (0, 0) rectangle (450,150);
  \fill[fill=rot] (0,150) rectangle (450,300);
  \node [star,fill=gelb,minimum size=113,star point height=33] at (225,150){};
\end{tikzpicture}

\end{document}

在此处输入图片描述

与 erik 的方法不同,该方法至少需要运行 2 次编译,现在您只需编译一次即可获得标志,并且它可以按比例填充整个页面。

答案3

正如评论中所提到的,您需要在\definecolorHTML 论点中使用大写字母。

您可以使用该geometry包将页面大小设置为所需的旗帜大小,然后使用并引用节点的锚点tikzpicture使其填满整个页面。我在下面的示例中已经这样做了,但在中心放置了一个星形。星形的点可能没有您列出的坐标,但您应该能够轻松调整大小以实现您想要的效果。\begin{tikzpicture}[remember picture,overlay]current page

\documentclass{article}
\usepackage[paperwidth=450pt,paperheight=300pt]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning}

\begin{document}
\pagestyle{empty}
\definecolor{grun}{HTML}{239D48}%green - colour of the top rectangle
\definecolor{rot}{HTML}{BF0028}%red - colour of the bottom rectangle
\definecolor{gelb}{HTML}{F6EC0F}%yellow - colour of the star

\begin{tikzpicture}[remember picture,overlay]
\fill[grun] (current page.south west) rectangle (current page.east);
\fill[rot] (current page.west) rectangle (current page.north east);
\node [star,fill=gelb,minimum size=5cm,star point height=1.5cm] at (current page.center){};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容