docs: def from_Composition(composition, width=80):
      """Convert a mingus.containers.Composition to an ASCII tablature string.
  
      Automatically add an header based on the title, subtitle, author, e-mail
      and description attributes. An extra description of the piece can also
      be given.
  
      Tunings can be set by using the Track.instrument.tuning or Track.tuning
      attribute.
      """
      # Collect tunings
      instr_tunings = []
      for track in composition:
          tun = track.get_tuning()
          if tun:
              instr_tunings.append(tun)
          else:
              instr_tunings.append(default_tuning)
      result = add_headers(
          width,
          composition.title,
          composition.subtitle,
          composition.author,
          composition.email,
          composition.description,
          instr_tunings,
          )
  
      # Some variables
      w = _get_width(width)
      barindex = 0
      bars = width / w
      lastlen = 0
      maxlen = max([len(x) for x in composition.tracks])
  
      while barindex < maxlen:
          notfirst = False
          for tracks in composition:
              tuning = tracks.get_tuning()
              ascii = []
              for x in xrange(bars):
                  if barindex + x < len(tracks):
                      bar = tracks[barindex + x]
                      r = from_Bar(bar, w, tuning, collapse=False)
                      barstart = r[1].find('||') + 2
  
                      # Add extra '||' to quarter note marks to connect tracks.
                      if notfirst:
                          r[0] = (r[0])[:barstart - 2] + '||' + (r[0])[barstart:]
  
                      # Add bar to ascii
                      if ascii != []:
                          for i in range(1, len(r) + 1):
                              item = r[len(r) - i]
                              ascii[-i] += item[barstart:]
                      else:
                          ascii += r
  
              # Add extra '||' to connect tracks
              if notfirst and ascii != []:
                  pad = ascii[-1].find('||')
                  result += [' ' * pad + '||', ' ' * pad + '||']
              else:
                  notfirst = True
  
              # Finally, add ascii to result
              result += ascii
          result += ['', '', '']
          barindex += bars
      return os.linesep.join(result)