Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs	(revision 10456)
@@ -106,4 +106,6 @@
       Operators = checkedItemList.AsReadOnly();
       Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
+
+      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
     }
 
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs	(revision 10456)
@@ -1,3 +1,5 @@
-﻿using System.Collections.Generic;
+﻿using System;
+using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Text;
@@ -8,15 +10,19 @@
   [Item("LaTeX/PDF Formatter", "Formatter for symbolic expression trees for use with latex.")]
   public class SymbolicExpressionTreeLatexFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
-    private readonly static Dictionary<string, string> symbolNameMap = new Dictionary<string, string>
+    private readonly static Dictionary<string, string> SymbolNamesMap = new Dictionary<string, string>
     {
       {"ProgramRootSymbol", "Prog"},
-      {"StartSymbol","RPB"}
+      {"StartSymbol","RPB"},
+      {"Addition", "$+$"},
+      {"Subtraction", "$-$"},
+      {"Multiplication", "$\\times$"},
+      {"Division", "$\\div$"}
     };
     private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> layoutEngine;
     private readonly SymbolicExpressionTreeLayoutAdapter layoutAdapter;
 
-
     public SymbolicExpressionTreeLatexFormatter() {
       layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
+      layoutAdapter = new SymbolicExpressionTreeLayoutAdapter();
     }
 
@@ -37,22 +43,42 @@
       foreach (var ln in layoutNodes)
         layoutEngine.AddNode(ln.Content, ln);
+      layoutEngine.CalculateLayout();
       var nodeCoordinates = layoutEngine.GetNodeCoordinates();
       var sb = new StringBuilder();
-      sb.AppendLine("\\begin{figure}");
-      sb.AppendLine("\\begin{tikzpicture}");
+      var nl = Environment.NewLine;
+      sb.Append("\\documentclass[class=minimal,border=0pt]{standalone}" + nl +
+                "\\usepackage{tikz}" + nl +
+                "\\begin{document}" + nl +
+                "\\begin{tikzpicture}" + nl +
+                "\\def\\ws{1}" + nl +
+                "\\def\\hs{0.7}" + nl);
 
-      foreach (var node in symbolicExpressionTree.IterateNodesBreadth()) {
+      const double ws = 1.0, hs = 0.7; // some scaling factors useful for fine-tuning document appearance before latex compilation
+      var nodes = symbolicExpressionTree.IterateNodesBreadth().ToList();
+      var nodeIndices = new Dictionary<ISymbolicExpressionTreeNode, int>();
+      for (int i = 0; i < nodes.Count; ++i) {
+        var node = nodes[i];
+        nodeIndices.Add(node, i);
         var symbolName = node.Symbol.Name;
-        var nodeName = symbolNameMap.ContainsKey(symbolName) ? symbolNameMap[symbolName] : symbolName;
+        var nodeName = SymbolNamesMap.ContainsKey(symbolName) ? SymbolNamesMap[symbolName] : symbolName;
         var coord = nodeCoordinates[node];
 
-        sb.AppendLine(string.Format("\\draw node ({0},{1}) {{{2}}};", coord.X, coord.Y, nodeName));
+        sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\node ({0}) at (\\ws*{1},\\hs*{2}) {{{3}}};", i, ws * coord.X, -hs * coord.Y, EscapeLatexString(nodeName)));
       }
 
-      sb.AppendLine("\\end{figure}");
-      sb.AppendLine("\\end{tikzpicture}");
+      for (int i = 0; i < nodes.Count; ++i) {
+        foreach (var s in nodes[i].Subtrees) {
+          sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\draw ({0}) -- ({1});", i, nodeIndices[s]));
+        }
+      }
+
+      sb.AppendLine("\\end{tikzpicture}" + nl + "\\end{document}" + nl);
 
       return sb.ToString();
     }
+
+    private static string EscapeLatexString(string s) {
+      return s.Replace("\\", "\\\\").Replace("{", "\\{").Replace("}", "\\}").Replace("_", "\\_");
+    }
   }
 }
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs	(revision 10456)
@@ -28,5 +28,5 @@
   public class SymbolicExpressionTreeLayoutAdapter : ILayoutAdapter<ISymbolicExpressionTreeNode> {
     // default conversion function between ISymbolicExpressionTreeNode and ILayoutNode<ISymbolicExpressionTree>
-    ILayoutNode<ISymbolicExpressionTreeNode> defaultConvert(ISymbolicExpressionTreeNode node) {
+    static ILayoutNode<ISymbolicExpressionTreeNode> DefaultConvert(ISymbolicExpressionTreeNode node) {
       var layoutNode = new LayoutNode<ISymbolicExpressionTreeNode> { Content = node };
       layoutNode.Ancestor = layoutNode;
@@ -40,5 +40,5 @@
     // return an enumerable containing all the layout nodes
     public IEnumerable<ILayoutNode<ISymbolicExpressionTreeNode>> Convert(ISymbolicExpressionTreeNode root, Func<ISymbolicExpressionTreeNode, ILayoutNode<ISymbolicExpressionTreeNode>> convertFunc = null) {
-      var rootLayoutNode = convertFunc == null ? defaultConvert(root) : convertFunc(root);
+      var rootLayoutNode = convertFunc == null ? DefaultConvert(root) : convertFunc(root);
       rootLayoutNode.Ancestor = rootLayoutNode;
 
@@ -63,5 +63,5 @@
       for (int i = 0; i < layoutNode.Content.SubtreeCount; ++i) {
         var subtree = layoutNode.Content.GetSubtree(i);
-        var childLayoutNode = convertFunc == null ? defaultConvert(subtree) : convertFunc(subtree);
+        var childLayoutNode = convertFunc == null ? DefaultConvert(subtree) : convertFunc(subtree);
         childLayoutNode.Parent = layoutNode;
         childLayoutNode.Number = i;
Index: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs
===================================================================
--- branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 10347)
+++ branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs	(revision 10456)
@@ -83,4 +83,6 @@
       Operators = checkedItemList.AsReadOnly();
       Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
+
+      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
     }
 
