Root systems and weight lattices with PStricks
Your original version of the question asked if this would be simpler in TikZ. That got me thinking about how to do it, and I didn't notice that you'd edited that out until I'd gotten most of the way there. So you can have this solution anyway!
Here's the result:
Here's the code:
\documentclass{article}
%\url{http://tex.stackexchange.com/q/30301/86}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[>=latex]
\pgfmathsetmacro\ax{2}
\pgfmathsetmacro\ay{0}
\pgfmathsetmacro\bx{2 * cos(120)}
\pgfmathsetmacro\by{2 * sin(120)}
\pgfmathsetmacro\lax{2*\ax/3 + \bx/3}
\pgfmathsetmacro\lay{2*\ay/3 + \by/3}
\pgfmathsetmacro\lbx{\ax/3 + 2*\bx/3}
\pgfmathsetmacro\lby{\ay/3 + 2*\by/3}
\foreach \k in {1,...,6} {
\draw[blue,dashed] (0,0) -- +(\k * 60 + 30:5.5);
}
\fill[blue!25] (0,0) -- (30:4 * \lby) -- (0,4 * \lby) -- cycle;
\begin{scope}
\clip (90:5) \foreach \k in {1,...,6} { -- ++([rotate=\k * 60 + 60]90:5) };
\foreach \na in {-3,...,2} {
\foreach \nb in {-3,...,2} {
\node[circle,fill=red] at (\na * \ax + \nb * \bx, \na * \ay + \nb * \by) {};
\node[circle,draw=red] at (\lax + \na * \ax + \nb * \bx, \lay + \na * \ay + \nb * \by) {};
\node[circle,draw=red] at (\lbx + \na * \ax + \nb * \bx, \lby + \na * \ay + \nb * \by) {};
}
}
\end{scope}
\draw[gray,->] (0,0) -- (\ax,\ay) node[below left] {\(\alpha_1\)};
\draw[gray,->] (0,0) -- (\bx,\by) node[right] {\(\alpha_2\)};
\draw[->] (0,0) -- (\lax,\lay) node[below] {\(\lambda_1\)};
\draw[->] (0,0) -- (\lbx,\lby) node[below right] {\(\lambda_2\)};
\node at (0:5) {\(\rho_2\)};
\node at (120:5) {\(\rho_1\)};
\node at (180:5) {\(\rho_{12}\)};
\node at (-120:5) {\(\rho_{121} = \rho_{212}\)};
\node at (-60:5) {\(\rho_{21}\)};
\end{tikzpicture}
\end{document}
The idea is to try to follow the idea as much as possible. So we define the key coordinates (\ax,\ay)
and (\bx,\by)
then the lambdas in terms of them. We draw a segment of the lattice using the \foreach
s to iterate over a chunk of the integers, and clip against a hexagonal region to only show that part that we want (the point of clipping is to avoid having to compute exactly which nodes to draw; if I weren't so lazy, I could figure it out beforehand).
Then there's a few labels to put in, and arrows to draw, but that's quite simple.
Below is a replication of Figure 6.6 in your linked document. Note the use of multido
\documentclass{article}
\usepackage{pstricks}
\usepackage{multido}
\begin{document}
\begin{pspicture}(0,0)(16,16)
\psset{unit=0.7}
%\psgrid % very useful when constructing!
\psline[linestyle=dashed,linecolor=blue](0,0)(16,16)
\psline[linestyle=dashed,linecolor=blue](0,16)(16,0)
\psline[linestyle=dashed,linecolor=blue](0,8)(16,8)
\psline[linestyle=dashed,linecolor=blue](8,0)(8,16)
\multido{\nx=5+2}{4}{\psdot[linecolor=red,dotstyle=o,dotsize=0.2](\nx,15)}%
\multido{\nx=4+2}{5}{\psdot[linecolor=red,dotsize=0.2](\nx,14)}%
\multido{\nx=3+2}{6}{\psdot[linecolor=red,dotstyle=o,dotsize=0.2](\nx,13)}%
\multido{\ny=4+2}{5}{%
\multido{\nx=2+2}{7}{\psdot[linecolor=red,dotsize=0.2](\nx,\ny)}%
}
\multido{\ny=5+2}{4}{%
\multido{\nx=1+2}{8}{\psdot[linecolor=red,dotstyle=o,dotsize=0.2](\nx,\ny)}%
}
\multido{\nx=2+2}{7}{\psdot[linecolor=red,dotsize=0.2](\nx,4)}%
\multido{\nx=3+2}{6}{\psdot[linecolor=red,dotstyle=o,dotsize=0.2](\nx,3)}%
\multido{\nx=4+2}{5}{\psdot[linecolor=red,dotsize=0.2](\nx,2)}%
\multido{\nx=5+2}{4}{\psdot[linecolor=red,dotstyle=o,dotsize=0.2](\nx,1)}%
\rput(3,15){$\rho_1$}
\rput(1,13){$\rho_{12}$}
\rput(1,3){$\rho_{121}$}
\rput(3,1){$\rho_{1212}=\rho_{2121}$}
\rput(13,1){$\rho_{212}$}
\rput(15,3){$\rho_{21}$}
\rput(15,14){$\rho_{2}$}
\psline[linecolor=black,arrows=->](8,8)(8,10)
\psline[linecolor=black,arrows=->](8,8)(9,9)
\psline[linecolor=gray,arrows=->](8,8)(10,8)
\psline[linecolor=gray,arrows=->](8,8)(6,10)
\uput[270](10,8){$\alpha_2$}
\uput[0](9,9){$\lambda_1$}
\uput[45](8,10){$\lambda_2$}
\uput[45](6,10){$\alpha_2$}
\end{pspicture}
\end{document}
If you need the arrows to be on top of the dots, simply change their ordering in the code.
UPDATE
I have recreated Figure 6.5 below. As previously, I imagine that there are more clever/elegant/robust ways to achieve it; I've often found that trying to shortcut can cost me more time than going the long way round. Here is the process I used:
- found the equation of the lines that the dots lie on
- plotted the dots on the lines
- clipped everything outside of the hexagon
AFAIK, \psdot
can not take algebraic expressions, so I had to use RPN. If someone knows better, please let me know.
\documentclass{article}
\usepackage{pstricks}
\usepackage{multido}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\tiny
\psset{unit=0.7}
%\psgrid % very useful when constructing!
% plot the lines
\psset{algebraic=true}
\psplot[linestyle=dashed,linecolor=blue]{-5}{5}{0.5*x}
\psplot[linestyle=dashed,linecolor=blue]{-5}{5}{-0.5*x}
\psline[linestyle=dashed,linecolor=blue](0,-5)(0,5)
% shaded region
\pscustom[linestyle=none,fillstyle=solid,fillcolor=blue]{
\psline(0,0)(0,4)
\psline(0,4)(4,2)
\psline(4,2)(0,0)}
% clip everything outside of the hexagon
\begin{psclip}{\pspolygon[linestyle=none](-4.5,-2.5)(-4.5,2.5)(0,4.5)(4.5,2.5)(4.5,-2.5)(0,-4.5)}
% plot the HOLLOW dots
\multido{\nx=-4+1}{9}%
{%
\multido{\nb=-4+1}{10}%
{%
% ordered pair: (\nx, 0.5\nx + \nb)
\psdot[linecolor=red,dotsize=0.4,dotstyle=o](!\nx\space dup 0.5 mul \nb\space add)
}%
}%
% plot the SOLID dots
\multido{\nx=-4+1}{9}%
{%
\multido{\nb=-6+3}{5}%
{%
% ordered pair: (\nx, 3/2*\nx+\nb)
\psdot[linecolor=red,dotsize=0.4](!\nx\space dup 2 div 3 mul \nb\space add)
}%
}%
\end{psclip}
% other stuff
\psline[linecolor=gray,arrows=->](0,0)(2,0)
\psline[linecolor=gray,arrows=->](0,0)(-1,1.5)
\psline[linecolor=black,arrows=->](0,0)(0,1)
\psline[linecolor=black,arrows=->](0,0)(1,0.5)
\rput(-3,-4){$\rho_{121}=\rho_{212}$}
\rput(3,-4){$\rho_{21}$}
\rput(5,0){$\rho_2$}
\rput(-5,0){$\rho_{12}$}
\rput(-3,4){$\rho_{1}$}
\uput[270](1,0.5){$\lambda_1$}
\uput[315](0,1){$\lambda_2$}
\uput[225](2,0){$\alpha_1$}
\uput[0](-1,1.5){$\alpha_2$}
\end{pspicture}
\end{document}
If you are ok with TikZ, you can try the rank-2-roots package.
\documentclass{article}
\usepackage{rank-2-roots}
\begin{document}
\foreach \system in {A,B,G}
{
\begin{tikzpicture}
\begin{rootSystem}{\system}
\roots
\weightLattice{3}
\WeylChamber
\end{rootSystem}
\end{tikzpicture}
}
\end{document}