tikz pgf

레이블이 있는 다섯 개의 별을 그리는 방법

별의 각 지점에 다른 레이블이 있는 5개의 별을 그리고 싶습니다. 이 질문 을 밀접하게 따르는 아래 예제에 도달 했지만 숫자를 다른 텍스트 레이블로 바꿀 수 없었고 원의 선을 제거할 수 없었습니다. (나는 foreach 도 필요하지 않다고 생각 합니다.)

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}

\begin{tikzpicture}[n/.style={circle,inner sep=1pt}]
  \draw node [star, star point height=.5cm, minimum size=2cm, inner sep=0,outer sep=0] (s) {}
     circle (1) (s.outer point 1) node[n,label={90:1}]{}
     foreach\x in {4,2,5,3}{--(s.outer point \x) node[n,label={(-45+90*\x):\x}]{}}--cycle;
\end{tikzpicture}

\end{document}


개정판: 더 짧은 TikZ 코드

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[dot/.style={circle,fill,inner sep=2pt}]
\def\r{2}  % radius of the star
\def\n{4}  % n+1 = number of vertexes
\def\Vlabel{{"$V_a$","$V_b$","$V_c$","$V_d$","$V_e$"}}
\foreach \i in {0,...,\n}
\path ({90+\i*360/(\n+1)}:\r) coordinate (V\i) node[dot]{}
+({90+\i*360/(\n+1)}:.4) node{\pgfmathparse{\Vlabel[\i]}\pgfmathresult}
;
\draw (V2)--(V0)--(V3)--(V1)--(V4)--cycle;
\end{tikzpicture}
\end{document}

너가 원하는게 그거야? Vlabel 배열을 사용하여 레이블을 선택할 수 있습니다 .

// http://asymptote.ualberta.ca/에서 실행
import math;
unitsize(1cm);
real r=2;
int n=5;
pair[] V;
for(int i=0; i<n; ++i) V.push(r*dir(90+360*i/n));
draw(V[0]--V[2]--V[4]--V[1]--V[3]--cycle);

string[] Vlabel={"$V_a$","$V_b$","$V_C$","$V_d$","$V_e$"};
for(int i=0; i<n; ++i) 
dot(Vlabel[i],align=2dir(degrees(V[i])),V[i],blue);

업데이트 1. \usepackage[inline]{asymptote} 를 로드하여 LaTex 문서에 포함할 수 있습니다 . MikTeX의 경우 Asymptote 소프트웨어 를 설치해야 합니다 (이 소프트웨어는 TeXlive에 이미 포함되어 있음).

\documentclass{article}
\usepackage[inline]{asymptote}
\begin{document}
\begin{asy}
import math;
unitsize(1cm);
real r=2;
int n=5;
pair[] V;
for(int i=0; i<n; ++i) V.push(r*dir(90+360*i/n));
draw(V[0]--V[2]--V[4]--V[1]--V[3]--cycle);
string[] Vlabel={"$V_a$","$V_b$","$V_C$","$V_d$","$V_e$"};
for(int i=0; i<n; ++i) 
dot(Vlabel[i],align=2dir(degrees(V[i])),V[i],blue);     
\end{asy}
\end{document}

2. 같은 방법으로 TikZ로 그림을 그릴 수 있습니다. TikZ의 배열 작업이 그리 편리하지 않기 때문에 Asymptote를 선택합니다. 우리가 얼마나 많은 트릭을 사용해야 하는지 보이시나요? ^^

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\r{2}
\def\n{5}
\pgfmathsetmacro\m{\n-1}
\foreach \i in {0,...,\n}
\path ({90+\i*360/\n}:\r) coordinate (V\i);
\draw (V2)--(V0)--(V3)--(V1)--(V4)--cycle;
\def\Vlabel{{"$V_a$","$V_b$","$V_c$","$V_d$","$V_e$"}}
\foreach \i in {0,...,\m}{
\fill[red] (V\i) circle(2pt);
\path (0,0)--(V\i)--([turn]0:.4) 
node{\pgfmathparse{\Vlabel[\i]}\pgfmathresult}; 
}
\end{tikzpicture}
\end{document}



다음은 TikZ 솔루션입니다. \foreach 루프가 레이블 집합을 통과 하도록 만들고 count= 를 사용하여 숫자 값을 만들 수 있습니다. evaluate 명령 은 노드를 배치하고 레이블을 배치하는 데 사용되는 각도( \k )를 계산합니다.

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\foreach \l[count=\t, evaluate=\t as \k using \t*72+18] in {label1,label2,label3,label4,label5} 
    {\node[inner sep=0pt,label={\k:\l}] at (\k:2)(n\t){};}
\draw (n1.center)--(n3.center)--(n5.center)--(n2.center)--(n4.center)--cycle;
\end{tikzpicture}

\end{document}

다음은 (합리적인) 길이의 목록과 함께 작동 하는 매크로 \labelstar[<radius>]{<label list>} 에 내장된 버전 입니다.

\documentclass{article}

\usepackage{tikz}

\newcommand{\labelstar}[2][1]{\begin{tikzpicture}
\foreach \l[count=\n] in {#2}{\xdef\nn{\n}}
\foreach \l[count=\n, evaluate=\n as \t using (\n-1)/\nn*360+90] in {#2} {
    \node[inner sep=0pt] at (\t:#1)(n\n){};
    \node at (\t:(#1+.25){\l};}
\foreach \k[evaluate=\k as \m using {int(1+mod(int(\k+(\nn+1)/2-1)-1,\nn))}] in {1,...,\nn}{
\draw[line cap=round] (n\k.center)--(n\m.center);}
\end{tikzpicture}}

\begin{document}

\labelstar{a,b,c}\qquad
\labelstar{a,b,c,d}\qquad
\labelstar{a,b,c,d,e}\qquad
\labelstar{a,b,c,d,e,f}\qquad

\bigskip
\labelstar{a,b,c,d,e,f,g}\qquad
\labelstar{a,b,c,d,e,f,g,h}\qquad
\labelstar{a,b,c,d,e,f,g,h,i}\qquad
\labelstar{a,b,c,d,e,f,g,h,i,j}\qquad

\bigskip
\labelstar[2]{a,...,q}\qquad
\labelstar[2]{a,...,z}\qquad

\end{document}