TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How can I make the following diagram in LaTex:

enter image description here

share|improve this question
I would use TikZ/PGF. – Manuel Nov 23 '13 at 11:48

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


\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);
share|improve this answer
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
@TorbjørnT. Thanks for the edit. – Kartik Nov 23 '13 at 16:07

enter image description here

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

% diag.tex :
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);

  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 ;


void connect(scircle a, pair[] inptPoint, pen linePen=gray+0.3bp){
  for(int i=0;i<inptPoint.length;++i){

import fontsize;

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);



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)

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))

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


% Process :
% pdflatex diag.tex    
% asy diag-*.asy    
% pdflatex diag.tex
share|improve this answer
+1 This answer is better than mine. – Kartik Nov 24 '13 at 7:04

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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