Launch a copy of the specified `.ipynb` (template) file in an IPython
        notebook session for the specified notebook directory.

        If an IPython notebook session has already been launched for the
        notebook directory, reuse it.

        If no notebook directory is specified, use the current working directory.

        Arguments
        ---------

         - `template_path`: Path to template `.ipynb` file.
         - `notebook_dir`: Directory to start IPython notebook session in.
         - `overwrite`: Overwrite existing file in `notebook_dir`, if necessary.
         - `create_dir`: Create notebook directory, if necessary.
         - `no_browser`: Do not launch new browser tab.

def launch_from_template(self, template_path, notebook_dir=None,
                             overwrite=False, output_name=None,
                             create_dir=False, no_browser=False, **kwargs):
        '''
        Launch a copy of the specified `.ipynb` (template) file in an IPython
        notebook session for the specified notebook directory.

        If an IPython notebook session has already been launched for the
        notebook directory, reuse it.

        If no notebook directory is specified, use the current working directory.

        Arguments
        ---------

         - `template_path`: Path to template `.ipynb` file.
         - `notebook_dir`: Directory to start IPython notebook session in.
         - `overwrite`: Overwrite existing file in `notebook_dir`, if necessary.
         - `create_dir`: Create notebook directory, if necessary.
         - `no_browser`: Do not launch new browser tab.
        '''
        template_path = template_path.abspath()
        if output_name is None:
            output_name = template_path.name

        if notebook_dir is None:
            notebook_dir = path(os.getcwd())
        else:
            notebook_dir = path(notebook_dir).abspath()

        if template_path.parent.realpath() == notebook_dir.realpath():
            raise IOError('Notebook directory must not be the parent directory of '
                          'the template file.')
        else:
            # The parent of the template file is not the notebook directory.
            output_path = notebook_dir.joinpath(output_name)
            if output_path.isfile() and not overwrite:
                # A file with the same name already exists in the root.
                raise IOError('Notebook already exists with same name.')
            # Create notebook directory if it doesn't exist.
            if create_dir:
                notebook_dir.mkdirs_p()

            template_path.copy(output_path)
            notebook_path = output_path

        session = self.get_session(notebook_dir=notebook_dir, **kwargs)

        if not no_browser:
            # Open IPython notebook in new browser tab.
            session.open(notebook_path.name)