6

How can I make the following diagram in LaTeX:

enter image description here

20

I have made the full diagram in TikZ. You can read the TikZ manual here: http://texdoc.net/pkg/tikz

diagram

\documentclass[a4paper,landscape]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage[scale=1]{geometry}
\begin{document}
\hfill
\vfill
\begin{figure}[htp]
\centering
\tikz[scale=0.9]{
\coordinate (C2) at (0,4);
\coordinate (C3) at (0,3);
\coordinate (C4) at (0,2);
\coordinate (C5) at (0,-2);
\coordinate (B1) at (-3,1.5);
\coordinate (B2) at (-3,0.5);
\coordinate (kh11) at (-9,5);
\coordinate (kh21) at (-8,6);
\coordinate (kh12) at (-9,-3);
\coordinate (kh22) at (-8,-4);
\coordinate (kh13) at (-12,2);
\coordinate (kh23) at (-12,0);
\coordinate (v1) at (-8,2);
\coordinate (vi) at (-8,1);
\coordinate (vn) at (-8,0);
\fill (kh13) +(0,-0.75) circle (1.5pt);
\fill (kh23) +(0,0.75) circle (1.5pt);
\fill (-12,1) circle (1.5pt);
\node at (-12.5,1) {$K_h$};
\node at (-13.5,1) {\Large $A_i$};
\draw [black!70!white,very thick] (-12,1) circle (1 and 2);
\node at (-9.5,3) {\Huge \textbf{G}};
\draw [black!70!white,very thick] (vi) circle (1.5 and 2);
\draw [gray] (B1) -- (C2);
\draw [gray] (B2) -- (C2);
\draw [gray] (B1) -- (C3);
\draw [gray] (B2) -- (C3);
\draw [gray] (B1) -- (C4);
\draw [gray] (B2) -- (C4);
\draw [gray] (B1) -- (C5);
\draw [gray] (B2) -- (C5);
\draw [gray] (B1) -- (v1);
\draw [gray] (B1) -- (vi);
\draw [gray] (B1) -- (vn);
\draw [gray] (B2) -- (v1);
\draw [gray] (B2) -- (vi);
\draw [gray] (B2) -- (vn);
\draw [gray] (v1) -- (kh11);
\draw [gray] (v1) -- (kh21);
\draw [gray] (vn) -- (kh12);
\draw [gray] (vn) -- (kh22);
\path (kh11) +(-1.5,1.5) node {\Large $A_1$};
\path (kh22) +(-2.25,-0.75) node {\Large $A_n$};
\fill (kh13) circle (3pt);
\fill (kh23) circle (3pt);
\fill (C2) circle (3pt);
\fill (C3) circle (3pt);
\fill (C4) circle (3pt);
\fill (0,0.2) circle (1.5pt);
\fill (0,0) circle (1.5pt);
\fill (0,-0.2) circle (1.5pt);
\fill (C5) circle (3pt);
\draw [gray,dashed] (0,4.5) -- (0.5,4.5) -- (0.5,-2.5) -- (0,-2.5);
\draw [gray,dashed] (0.5,1) -- (1.5,1);
\node at (2,1) {\Huge \textbf{C}};
\node at (-3,0) {$K_{[B]}$};
\draw [black!70!white,very thick] (-3,1) circle (1.5);
\node at (-3,3) {\Huge \textbf{B}};
\draw [gray] (kh11) -- (B1) ;
\draw [gray] (kh11) -- (B2) ;
\draw [gray] (kh21) -- (B1) ;
\draw [gray] (kh21) -- (B2) ;
\draw [gray] (kh12) -- (B1) ;
\draw [gray] (kh12) -- (B2) ;
\draw [gray] (kh22) -- (B1) ;
\draw [gray] (kh13) -- (B1) ;
\draw [gray] (kh23) -- (B1) ;
\draw [gray] (kh13) -- (B2) ;
\draw [gray] (kh23) -- (B2) ;
\fill (kh11) circle (3pt) ;
\fill (kh21) circle (3pt) ;
\fill (-8.6,6) circle (1.5pt) ;
\fill (-8.85,5.8) circle (1.5pt) ;
\fill (-9,5.5) circle (1.5pt) ;
\node at (-9.25,6.2) {$K_h$};
\draw [black!70!white,very thick] (-8.5,5.5) circle (1.5);
\fill (kh12) circle (3pt) ;
\fill (kh22) circle (3pt) ;
\fill (-8.6,-4) circle (1.5pt) ;
\fill (-8.85,-3.8) circle (1.5pt) ;
\fill (-9,-3.5) circle (1.5pt) ;
\node at (-9.25,-4.2) {$K_h$};
\draw [black!70!white,very thick] (-8.5,-3.5) circle (1.5);
\fill (B1) circle (3pt);
\fill (B2) circle (3pt);
\fill (-3,1.20) circle (1.25pt);
\fill (-3,1) circle (1.25pt);
\fill (-3,0.80) circle (1.25pt);
\draw [gray] (kh13) -- (vi) ;
\draw [gray] (kh23) -- (vi) ;
\fill (v1) circle (3pt); \node [left] at (v1) {$v_1$};
\fill (vi) circle (3pt); \node [left] at (vi) {$v_i$};
\fill (vn) circle (3pt); \node [left] at (vn) {$v_n$};
\draw [dash pattern=on 2pt off 1cm] (-12,3.2) to [in=180,out=90] (-10,6);
\draw [dash pattern=on 2pt off 1cm] (-12,-1.2) to [out=-90,in=180] (-10,-4);
}
\end{figure}
\vfill
\hfill
\end{document}
  • The manual you had linked to was to a very old version of TikZ, so I changed it to lead to a site hosting a newer version. One can also access the manual by issuing texdoc tikz on a command line. – Torbjørn T. Nov 23 '13 at 15:49
12

enter image description here

This MWE uses Asymptote object-oriented approach to build the diagram.

% diag.tex :
%
\documentclass{article}
\usepackage[inline]{asymptote}
\begin{asydef}
void vdots(pair a,pair b,pen p=currentpen+1.5bp){
  for(int i=1;i<4;++i) dot(a*(1-i/4)+b*i/4,p);
}

void arcdots(guide g,int n=3, pen p=currentpen+1.5bp){
  real L=arclength(g);
  pair a=point(g,0); pair b=point(g,size(g));
  for(int i=1;i<n+1;++i) dot(arcpoint(g,L*i/(n+1)),p);
}

struct scircle{
  pair center;
  real R;
  real phi;  // rotation angle
  real dotShift;
  string L;
  pair Lpos;
  pen borderPen;

  transform tr;
  guide border;
  pair ptA, ptB;

  void draw(){ draw(border,borderPen); }

  void drawDots(){
    dot(ptA,UnFill); dot(ptB,UnFill);
    vdots(ptA,ptB);
    label(L,tr*Lpos);
  }

  pair borderPoint(pair Dir){
    return intersectionpoint(border,center--(scale(2R)*unit(Dir)+center));
  }

  void operator init(
    pair center=(0,0),
    real R=1,
    real phi=0,  
    real dotShift=0.382,
    string L,
    pair Lpos=(-dotShift*sqrt(3),0),
    pen borderPen=currentpen
  ){
    this.center    = center    ;
    this.R         = R         ;
    this.phi       = phi       ;
    this.dotShift  = dotShift  ;
    this.L         = L         ;
    this.Lpos      = Lpos      ;
    this.borderPen = borderPen ;

    tr=shift(center)*scale(R)*rotate(phi);
    this.border=tr*unitcircle;
    this.ptA=tr*(0,dotShift);
    this.ptB=tr*(0,-dotShift);
  }  
}

void connect(scircle a, pair[] inptPoint, pen linePen=gray+0.3bp){
  for(int i=0;i<inptPoint.length;++i){
    draw(a.ptA--inptPoint[i]--a.ptB,linePen);
  }
}
\end{asydef}
\usepackage{lmodern}
\begin{document}
\begin{figure}
\begin{asy}
size(280);

import fontsize;
defaultpen(fontsize(9pt));

scircle A1=scircle((260, 200),60,-45,"$K_h$");
scircle Ai=scircle((120,   0),60,0,"$K_h$",(-0.6,0));
scircle An=scircle((260,-200),60,45,"$K_h$");
scircle B =scircle((500,   0),60,0,"$K_{[B]}$",(-0.6,0));


real dh=50;
int ndots=4;
pair[] inputPoint=new pair[ndots+1];

for(int i=0;i<ndots;++i) inputPoint[i]=(630,(ndots-i)*dh);

inputPoint[ndots]=(inputPoint[0].x,-inputPoint[0].y);

vdots((inputPoint[0].x,0),(inputPoint[0].x,-inputPoint[ndots-1].y));

pair[] v={(A1.ptA.x,dh), (A1.ptA.x,0), (A1.ptA.x,-dh)};

guide gG=shift(v[1])*scale(Ai.R,2dh)*unitcircle; draw(gG);

label("$v_1$",v[0],W); label("$v_i$",v[1],W); label("$v_n$",v[2],W);

connect(A1,new pair[]{v[0],B.ptA,B.ptB});
connect(Ai,new pair[]{v[1],B.ptA,B.ptB});
connect(An,new pair[]{v[2],B.ptA,B.ptB});

connect(B,inputPoint); connect(B,v);

A1.draw(); Ai.draw(); An.draw(); B. draw();

dot(inputPoint,UnFill); dot(v,UnFill);

A1.drawDots(); Ai.drawDots(); An.drawDots(); B. drawDots();

vdots(v[0],v[1]); vdots(v[2],v[1]);

guide garc=A1.borderPoint(W)
..(0.5(A1.borderPoint(W)+Ai.borderPoint(N))+(-dh,dh)/3)
..Ai.borderPoint(N);

arcdots(garc,7); arcdots(reflect(W,E)*garc,7);

pen dashed=gray+0.5bp+linetype(new real[]{7,6});

guide gdashedA=(inputPoint[0]+(0,dh/2))
--(inputPoint[0]+(dh/2,dh/2))
--(inputPoint[ndots]+(dh/2,-dh/2))
--(inputPoint[ndots]+(0,-dh/2));

guide gdashedB=(inputPoint[0].x+dh/2,0)--(inputPoint[0].x+dh,0);

draw(gdashedA^^gdashedB,dashed);

label("$\mathbf{A_1}$",A1.borderPoint(NW),NW);
label("$\mathbf{A_i}$",Ai.borderPoint(W),W);
label("$\mathbf{A_n}$",An.borderPoint(SW),SW);
label("$\mathbf{B}$",B.borderPoint(N),N);
label("$\mathbf{C}$",point(gdashedB,1),E);
label("$\mathbf{G}$",v[0],8NW);
\end{asy}
\end{figure}
\end{document}
%
% Process :
%
% pdflatex diag.tex    
% asy diag-*.asy    
% pdflatex diag.tex

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.