> I actually didn't know this was required at all as NB uses mathjax.js

I am just stumbling through this and might be missing something.  Here is the kind of traceback I get if I run the nbserver without latex on the PATH.  You can see in the bottom few frames that it's trying to run a latex command.  With latex on PATH,  the notebook runs without error.

```python
In [7]:

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, xlabel='Hypothesis for chance of heads', 
            ylabel='Probability of hypothesis', 
            title='Posterior probability distribution after first heads')
ppl.plot(ax, x_coin, stats.beta(3, 2).pdf(x_coin), linewidth=3.)
ax.set_xticklabels([r'0\%', r'20\%', r'40\%', r'60\%', r'80\%', r'100\%']);
plt.savefig('coin2.png')
 ---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-7-1b12ab8f82ee> in <module>()
      5 ppl.plot(ax, x_coin, stats.beta(3, 2).pdf(x_coin), linewidth=3.)
      6 ax.set_xticklabels([r'0\%', r'20\%', r'40\%', r'60\%', r'80\%', r'100\%']);
----> 7 plt.savefig('coin2.png')

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/pyplot.pyc in savefig(*args, **kwargs)
    559 def savefig(*args, **kwargs):
    560     fig = gcf()
--> 561     return fig.savefig(*args, **kwargs)
    562 
    563 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc in savefig(self, *args, **kwargs)
   1419             self.set_frameon(frameon)
   1420 
-> 1421         self.canvas.print_figure(*args, **kwargs)
   1422 
   1423         if frameon:

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
   2218                 orientation=orientation,
   2219                 bbox_inches_restore=_bbox_inches_restore,
-> 2220                 **kwargs)
   2221         finally:
   2222             if bbox_inches and restore_bbox:

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs)
    503 
    504     def print_png(self, filename_or_obj, *args, **kwargs):
--> 505         FigureCanvasAgg.draw(self)
    506         renderer = self.get_renderer()
    507         original_dpi = renderer.dpi

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self)
    449 
    450         try:
--> 451             self.figure.draw(self.renderer)
    452         finally:
    453             RendererAgg.lock.release()

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     53     def draw_wrapper(artist, renderer, *args, **kwargs):
     54         before(artist, renderer)
---> 55         draw(artist, renderer, *args, **kwargs)
     56         after(artist, renderer)
     57 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer)
   1032         dsu.sort(key=itemgetter(0))
   1033         for zorder, a, func, args in dsu:
-> 1034             func(*args)
   1035 
   1036         renderer.close_group('figure')

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     53     def draw_wrapper(artist, renderer, *args, **kwargs):
     54         before(artist, renderer)
---> 55         draw(artist, renderer, *args, **kwargs)
     56         after(artist, renderer)
     57 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/axes.pyc in draw(self, renderer, inframe)
   2084 
   2085         for zorder, a in dsu:
-> 2086             a.draw(renderer)
   2087 
   2088         renderer.close_group('axes')

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     53     def draw_wrapper(artist, renderer, *args, **kwargs):
     54         before(artist, renderer)
---> 55         draw(artist, renderer, *args, **kwargs)
     56         after(artist, renderer)
     57 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/axis.pyc in draw(self, renderer, *args, **kwargs)
   1091         ticks_to_draw = self._update_ticks(renderer)
   1092         ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
-> 1093                                                                 renderer)
   1094 
   1095         for tick in ticks_to_draw:

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/axis.pyc in _get_tick_bboxes(self, ticks, renderer)
   1040         for tick in ticks:
   1041             if tick.label1On and tick.label1.get_visible():
-> 1042                 extent = tick.label1.get_window_extent(renderer)
   1043                 ticklabelBoxes.append(extent)
   1044             if tick.label2On and tick.label2.get_visible():

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/text.pyc in get_window_extent(self, renderer, dpi)
    752             raise RuntimeError('Cannot get window extent w/o renderer')
    753 
--> 754         bbox, info, descent = self._get_layout(self._renderer)
    755         x, y = self.get_position()
    756         x, y = self.get_transform().transform_point((x, y))

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer)
    318         tmp, lp_h, lp_bl = get_text_width_height_descent('lp',
    319                                                          self._fontproperties,
--> 320                                                          ismath=False)
    321         offsety = (lp_h - lp_bl) * self._linespacing
    322 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_text_width_height_descent(self, s, prop, ismath)
    203             fontsize = prop.get_size_in_points()
    204             w, h, d = texmanager.get_text_width_height_descent(s, fontsize,
--> 205                                                                renderer=self)
    206             return w, h, d
    207 

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/texmanager.pyc in get_text_width_height_descent(self, tex, fontsize, renderer)
    667             dvi = dviread.Dvi(dvifile, 72 * dpi_fraction)
    668             try:
--> 669                 page = next(iter(dvi))
    670             finally:
    671                 dvi.close()

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in __iter__(self)
     83         """
     84         while True:
---> 85             have_page = self._read()
     86             if have_page:
     87                 yield self._output()

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self)
    144         while True:
    145             byte = ord(self.file.read(1)[0])
--> 146             self._dispatch(byte)
    147 #             if self.state == _dvistate.inpage:
    148 #                 matplotlib.verbose.report(

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte)
    232             c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ]
    233             n = self.file.read(a+l)
--> 234             self._fnt_def(k, c, s, d, a, l, n)
    235         elif byte == 247:
    236             i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ]

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n)
    392 
    393     def _fnt_def(self, k, c, s, d, a, l, n):
--> 394         tfm = _tfmfile(n[-l:].decode('ascii'))
    395         if c != 0 and tfm.checksum != 0 and c != tfm.checksum:
    396             raise ValueError('tfm checksum mismatch: %s'%n)

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in _tfmfile(texname)
    899 
    900 def _tfmfile(texname):
--> 901     return _fontfile(texname, Tfm, '.tfm', _tfmcache)
    902 
    903 def _vffile(texname):

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fontfile(texname, class_, suffix, cache)
    889         pass
    890 
--> 891     filename = find_tex_file(texname + suffix)
    892     if filename:
    893         result = class_(filename)

/Users/alexcoventry/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/dviread.pyc in find_tex_file(filename, format)
    870     # https://github.com/matplotlib/matplotlib/issues/633>
    871     pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE,
--> 872                             stderr=subprocess.PIPE)
    873     result = pipe.communicate()[0].rstrip()
    874     matplotlib.verbose.report('find_tex_file result: %s' % result,

/Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
    707                                 p2cread, p2cwrite,
    708                                 c2pread, c2pwrite,
--> 709                                 errread, errwrite)
    710         except Exception:
    711             # Preserve original exception in case os.close raises.

/Applications/Canopy.app/appdata/canopy-1.3.0.1715.macosx-x86_64/Canopy.app/Contents/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
   1324                         raise
   1325                 child_exception = pickle.loads(data)
-> 1326                 raise child_exception
   1327 
   1328 

OSError: [Errno 2] No such file or directory

<matplotlib.figure.Figure at 0x10e8372d0>
```