def set_style(style='basic', **kwargs):
    ''' Changes Matplotlib basic style to produce high quality graphs. Call 
    this function at the beginning of your script. You can even further improve
    graphs with a call to fix_style at the end of your script.

    Parameters
    ----------    
    style: string
        'basic', 'article', 'poster', 'B&W', 'talk', 'origin'

    kwargs: dict of rcParams
        add Matplotlib rcParams    

    Examples
    --------
    >>> set_style('article')

    >>> set_style('poster',**{'lines.linewidth':2})
    
    See Also
    --------
    
    :func:`~publib.publib.fix_style`,
    :func:`~publib.tools.tools.reset_defaults`,
    :func:`~publib.tools.tools.regenerate_fonts`

    '''

    style = _read_style(style)

    # Add basic style as the first style
    if style[0] != 'basic':
        style = ['basic'] + style

    # Apply all styles
    for s in style:
        _set_style(s, **kwargs)