Figure: 2dmanifoldFig1.eps.  CliffordBasic calculation of the basis elements above and the area element.  Same calculation using my GA30.m package.  Generation of mmacell text for the book showing the input and output cells for the CliffordBasic calculation.

<<peeters`

(*relative to ~/physicsplay*)
peeters`setGitDir[ "../project/figures/GAelectrodynamics" ]

ClearAll[  e1, e2, e3, x1, x2, r1, r2, r, x, xp, plot1 ]

{e1, e2, e3} = IdentityMatrix[3];

xp :=  (a -b)^2  e1 + (1 - b b) e2 +b a e3;
x[u_, v_] := xp /. {a -> u, b->v};
x1[u_, v_] := D[xp,a] /. {a -> u, b->v};
x2[u_, v_] := D[xp,b] /. {a -> u, b->v};
x1[(Subscript[u, 1]),(Subscript[u, 2])]
x2[(Subscript[u, 1]),(Subscript[u, 2])]

plot1 = Module[{range, g, p1, x11, x21, n1, p2, x12, x22, n2},
range = 1;
p1 = x[.5,.5];
x11 = (x1[.5,.5]// Normalize)/5;
x21 = (x2[.5,.5]// Normalize)/5;
n1 = (Cross[ x11, x21]// Normalize)/200;

p2 = x[.35,.75];
x12 = (x1[.35,.75]// Normalize)/5;
x22 = (x2[.35,.75]// Normalize)/5;
n2 = (Cross[ x11, x21]// Normalize)/200;

g = Graphics3D[ {
Parallelepiped[ p1, {x11,x21, n1}],
Parallelepiped[ p2, {x12,x22, n2}],
(*Thickness -> 0.75,*)
Red // Darker,
Arrowheads[0.05],
Arrow[Tube[{p1,p1 + x11}, 0.01]],
Arrow[Tube[{p1 + x11,p1 + x11 + x21}, 0.01]],
Arrow[Tube[{p2,p2 + x12}, 0.01]],
Arrow[Tube[{p2 + x12,p2 + x12 + x22}, 0.01]]
}];
Show[{
ParametricPlot3D[ x[u,v], {u, 0, range}, {v,0, range}],
g
}]
]

plot1 = ;
peeters`exportForLatex["2dmanifoldFig1", plot1]

CliffordBasic calculation of the basis elements above and the area element.

<< CliffordBasic`;
$SetSignature={3,0};

ClearAll[xp, x, x1, x2]
(*use dummy parameter values for the derivatives, and then switch them to function parameter values.*)
xp :=  (a -b)^2  e[1] + (1 - b b) e[2] +b a e[3];
x[u_, v_] := xp /. {a -> u, b->v};
x1[u_, v_] := D[xp,a] /. {a -> u, b->v};
x2[u_, v_] := D[xp,b] /. {a -> u, b->v};

x1[u,v]
x2[u,v]
(*CliffordBasic display of wedge doesn't currently group by the wedge basis bivectors.*)
OuterProduct[x1[u,v],x2[u,v]] // GFactor

Curvilinear calculation and area element using my GA30 package.

<< GA30`;

xp :=  (a -b)^2  Vector[1,1] + (1 - b b) Vector[1,2] +b a Vector[1,3];
x[u_, v_] := xp /. {a -> u, b->v};
x1[u_, v_] := D[xp,a] /. {a -> u, b->v};
x2[u_, v_] := D[xp,b] /. {a -> u, b->v};

x1[(Subscript[u, 1]),(Subscript[u, 2])]
x2[(Subscript[u, 1]),(Subscript[u, 2])]
x1[(Subscript[u, 1]),(Subscript[u, 2])] ⋀ x2[(Subscript[u, 1]),(Subscript[u, 2])]

CellToTeX output for the CliffordBasic calculations above.

Import["https://raw.githubusercontent.com/jkuczm/MathematicaCellsToTeX/master/NoInstall.m"]

(*CellToTeX[In[1]] *)
(*In[1]// Cell// CellPrint*)
Cell[BoxData[{RowBox[{RowBox[{"<<"," ","CliffordBasic`"}],";"}],"
",RowBox[{RowBox[{"$SetSignature","=",RowBox[{"{",RowBox[{"3",",","0"}],"}"}]}],";"}]}],"Input",CellGroupingRules->{"GroupTogetherGrouping",10000.},CellChangeTimes->{{3.728261257941787*^9,3.728261258052167*^9},{3.728298936518673*^9,3.728298942783722*^9}}] // CellToTeX

Cell[BoxData[{
 RowBox[{
  RowBox[{"ClearAll", "[", 
   RowBox[{"xp", ",", " ", "x", ",", " ", "x1", ",", " ", "x2"}], "]"}], "
", 
  RowBox[{"(*", 
   RowBox[{
    RowBox[{"use", " ", "dummy", " ", "parameter", " ", "values", " ", "for", " ", "the", " ", 
     "derivatives"}], ",", " ", 
    RowBox[{"and", " ", "then", " ", "switch", " ", "them", " ", "to", " ", "function", " ", 
     "parameter", " ", 
     RowBox[{"values", "."}]}]}], "*)"}]}], "
", 
 RowBox[{
  RowBox[{"xp", " ", ":=", "  ", 
   RowBox[{
    RowBox[{
     RowBox[{
      RowBox[{"(", 
       RowBox[{"a", " ", "-", "b"}], ")"}], "^", "2"}], "  ", 
     RowBox[{"e", "[", "1", "]"}]}], " ", "+", " ", 
    RowBox[{
     RowBox[{"(", 
      RowBox[{"1", " ", "-", " ", 
       RowBox[{"b", " ", "b"}]}], ")"}], " ", 
     RowBox[{"e", "[", "2", "]"}]}], " ", "+", 
    RowBox[{"b", " ", "a", " ", 
     RowBox[{"e", "[", "3", "]"}]}]}]}], ";"}], "
", 
 RowBox[{
  RowBox[{
   RowBox[{"x", "[", 
    RowBox[{"u_", ",", " ", "v_"}], "]"}], " ", ":=", " ", 
   RowBox[{"xp", " ", "/.", " ", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"a", " ", "->", " ", "u"}], ",", " ", 
      RowBox[{"b", "->", "v"}]}], "}"}]}]}], ";"}], "
", 
 RowBox[{
  RowBox[{
   RowBox[{"x1", "[", 
    RowBox[{"u_", ",", " ", "v_"}], "]"}], " ", ":=", " ", 
   RowBox[{
    RowBox[{"D", "[", 
     RowBox[{"xp", ",", "a"}], "]"}], " ", "/.", " ", 
    RowBox[{"{", 
     RowBox[{
      RowBox[{"a", " ", "->", " ", "u"}], ",", " ", 
      RowBox[{"b", "->", "v"}]}], "}"}]}]}], ";"}], "
", 
 RowBox[{
  RowBox[{
   RowBox[{
    RowBox[{"x2", "[", 
     RowBox[{"u_", ",", " ", "v_"}], "]"}], " ", ":=", " ", 
    RowBox[{
     RowBox[{"D", "[", 
      RowBox[{"xp", ",", "b"}], "]"}], " ", "/.", " ", 
     RowBox[{"{", 
      RowBox[{
       RowBox[{"a", " ", "->", " ", "u"}], ",", " ", 
       RowBox[{"b", "->", "v"}]}], "}"}]}]}], ";"}], 
  "
"}], "
", 
 RowBox[{"x1", "[", 
  RowBox[{"u", ",", "v"}], "]"}], "
", 
 RowBox[{
  RowBox[{"x2", "[", 
   RowBox[{"u", ",", "v"}], "]"}], "
", 
  RowBox[{"(*", 
   RowBox[{"CliffordBasic", " ", "display", " ", "of", " ", "wedge", " ", 
    RowBox[{"doesn", "'"}], "t", " ", "currently", " ", "group", " ", "by", " ", "the", " ", "wedge", 
    " ", "basis", " ", 
    RowBox[{"bivectors", "."}]}], "*)"}]}], "
", 
 RowBox[{
  RowBox[{
   RowBox[{"OuterProduct", "[", 
    RowBox[{
     RowBox[{"x1", "[", 
      RowBox[{"u", ",", "v"}], "]"}], ",", 
     RowBox[{"x2", "[", 
      RowBox[{"u", ",", "v"}], "]"}]}], "]"}], " ", "//", " ", "GFactor"}], 
  " "}], "
"}], "Input",
 CellGroupingRules->{"GroupTogetherGrouping", 10000.},
 CellChangeTimes->{{3.7282612100896063`*^9, 3.728261230862653*^9}, {3.7282612907228203`*^9, 
   3.72826136561642*^9}, {3.728261690443898*^9, 3.728261711688758*^9}, {3.728298031449902*^9, 
   3.7282980349333277`*^9}, {3.728298099286249*^9, 3.7282981316933537`*^9}, {3.7282981730781384`*^9, 
   3.7282982091392317`*^9}, {3.728298805216961*^9, 3.728298874118993*^9}, 3.728298942784157*^9}] // CellToTeX

Cell[BoxData[
 RowBox[{
  RowBox[{"2", " ", 
   RowBox[{"(", 
    RowBox[{"u", "-", "v"}], ")"}], " ", 
   RowBox[{"e", "[", "1", "]"}]}], "+", 
  RowBox[{"v", " ", 
   RowBox[{"e", "[", "3", "]"}]}]}]], "Output",
 CellGroupingRules->{"GroupTogetherGrouping", 10000.},
 CellChangeTimes->{
  3.728261232063142*^9, {3.728261280816264*^9, 3.728261335621426*^9}, 3.7282613678758383`*^9, {
   3.7282617309753036`*^9, 3.7282617456926413`*^9}, 3.7282980419888697`*^9, {3.728298102770355*^9, 
   3.728298133279087*^9}, 3.7282989427843533`*^9, 3.7282993101951*^9}] // CellToTeX

Cell[BoxData[
 RowBox[{
  RowBox[{
   RowBox[{"-", "2"}], " ", 
   RowBox[{"(", 
    RowBox[{"u", "-", "v"}], ")"}], " ", 
   RowBox[{"e", "[", "1", "]"}]}], "-", 
  RowBox[{"2", " ", "v", " ", 
   RowBox[{"e", "[", "2", "]"}]}], "+", 
  RowBox[{"u", " ", 
   RowBox[{"e", "[", "3", "]"}]}]}]], "Output",
 CellGroupingRules->{"GroupTogetherGrouping", 10000.},
 CellChangeTimes->{
  3.728261232063142*^9, {3.728261280816264*^9, 3.728261335621426*^9}, 3.7282613678758383`*^9, {
   3.7282617309753036`*^9, 3.7282617456926413`*^9}, 3.7282980419888697`*^9, {3.728298102770355*^9, 
   3.728298133279087*^9}, 3.7282989427843533`*^9, 3.7282993102069387`*^9}] // CellToTeX

Cell[BoxData[RowBox[{RowBox[{RowBox[{"(",RowBox[{RowBox[{RowBox[{"-","4"}]," ","u"," ","v"}],"+",RowBox[{"4"," ",SuperscriptBox["v","2"]}]}],")"}]," ",RowBox[{"e","[",RowBox[{"1",",","2"}],"]"}]}],"+",RowBox[{RowBox[{"(",RowBox[{RowBox[{"2"," ",SuperscriptBox["u","2"]}],"-",RowBox[{"2"," ",SuperscriptBox["v","2"]}]}],")"}]," ",RowBox[{"e","[",RowBox[{"1",",","3"}],"]"}]}],"+",RowBox[{"2"," ",SuperscriptBox["v","2"]," ",RowBox[{"e","[",RowBox[{"2",",","3"}],"]"}]}]}]],"Output",CellGroupingRules->{"GroupTogetherGrouping",10000.},CellChangeTimes->{3.728261232063142*^9,{3.728261280816264*^9,3.728261335621426*^9},3.7282613678758383`*^9,{3.7282617309753036`*^9,3.7282617456926413`*^9},3.7282980419888697`*^9,{3.728298102770355*^9,3.728298133279087*^9},3.7282989427843533`*^9,3.72829931021854*^9}] // CellToTeX