我在使用 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
正如评论中所提到的,您需要在\definecolor
HTML 论点中使用大写字母。
您可以使用该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}