Index: lib/matplotlib/backends/backend_pdf.py
===================================================================
--- lib/matplotlib/backends/backend_pdf.py	(revision 6062)
+++ lib/matplotlib/backends/backend_pdf.py	(working copy)
@@ -39,6 +39,17 @@
 from matplotlib.path import Path
 from matplotlib import ttconv
 
+
+def _quad2cubic(q0x, q0y, q1x, q1y, q2x, q2y):
+    # convert control points of quadratic bezier curve to cubic ones
+    # c0x, c0y = q0x, q0y
+    c1x, c1y = q0x + 2./3. * (q1x - q0x), q0y + 2./3. * (q1y - q0y)
+    c2x, c2y = c1x + 1./3. * (q2x - q0x), c1y + 1./3. * (q2y - q0y)
+    # c3x, c3y = q2x, q2y
+    return q0x, q0y, c1x, c1y, c2x, c2y, q2x, q2y
+
+
+
 # Overview
 #
 # The low-level knowledge about pdf syntax lies mainly in the pdfRepr
@@ -1096,6 +1107,7 @@
         tpath = transform.transform_path(path)
 
         cmds = []
+        last_points = None
         for points, code in tpath.iter_segments():
             if code == Path.MOVETO:
                 cmds.extend(points)
@@ -1104,15 +1116,18 @@
                 cmds.extend(points)
                 cmds.append(Op.lineto)
             elif code == Path.CURVE3:
-                cmds.extend([points[0], points[1],
-                             points[0], points[1],
-                             points[2], points[3],
-                             Op.curveto])
+                points = _quad2cubic(*(list(last_points[-2:]) + \
+                                       list(points)))
+                cmds.extend(points)
+                cmds.append(Op.curveto)
             elif code == Path.CURVE4:
                 cmds.extend(points)
                 cmds.append(Op.curveto)
             elif code == Path.CLOSEPOLY:
                 cmds.append(Op.closepath)
+
+            last_points = points
+                
         return cmds
     pathOperations = staticmethod(pathOperations)
 
Index: lib/matplotlib/backends/backend_ps.py
===================================================================
--- lib/matplotlib/backends/backend_ps.py	(revision 6062)
+++ lib/matplotlib/backends/backend_ps.py	(working copy)
@@ -95,6 +95,15 @@
 def _nums_to_str(*args):
     return ' '.join(map(_num_to_str,args))
 
+def _quad2cubic(q0x, q0y, q1x, q1y, q2x, q2y):
+    # convert control points of quadratic bezier curve to cubic ones
+    # c0x, c0y = q0x, q0y
+    c1x, c1y = q0x + 2./3. * (q1x - q0x), q0y + 2./3. * (q1y - q0y)
+    c2x, c2y = c1x + 1./3. * (q2x - q0x), c1y + 1./3. * (q2y - q0y)
+    # c3x, c3y = q2x, q2y
+    return q0x, q0y, c1x, c1y, c2x, c2y, q2x, q2y
+    
+
 def quote_ps_string(s):
     "Quote dangerous characters of S for use in a PostScript string constant."
     s=s.replace("\\", "\\\\")
@@ -448,20 +457,24 @@
         path = transform.transform_path(path)
 
         ps = []
+        last_points = None
         for points, code in path.iter_segments():
             if code == Path.MOVETO:
                 ps.append("%g %g m" % tuple(points))
             elif code == Path.LINETO:
                 ps.append("%g %g l" % tuple(points))
             elif code == Path.CURVE3:
+                points = _quad2cubic(*(list(last_points[-2:]) + \
+                                       list(points)))
                 ps.append("%g %g %g %g %g %g c" %
-                          (points[0], points[1],
-                           points[0], points[1],
-                           points[2], points[3]))
+                          tuple(points[2:]))
             elif code == Path.CURVE4:
                 ps.append("%g %g %g %g %g %g c" % tuple(points))
             elif code == Path.CLOSEPOLY:
                 ps.append("cl")
+
+            last_points = points
+            
         ps = "\n".join(ps)
 
         return ps
