/** {@inheritDoc} */
  @Override
  protected final void doAuthors(final BibAuthors authors) {
    final ITextOutput out, encoded;
    final LaTeXDocumentClass clazz;
    final int size;
    BibAuthor author;
    int i;
    String s;
    boolean needsSpace;

    super.doAuthors(authors);

    if ((authors == null) || ((size = authors.size()) <= 0)) {
      return;
    }

    out = this.getTextOutput();
    LaTeXDriver._endLine(out);

    clazz = ((LaTeXDocument) (this.getDocument())).m_class;

    s = clazz.getAuthorsBegin();
    if ((s != null) && (!(s.isEmpty()))) {
      out.append(s);
    }

    encoded = ((LaTeXDriver) (this.getDriver())).encode(out);
    for (i = 0; i < size; i++) {
      if (i > 0) {
        s = clazz.getAuthorSeparator();
        if ((s != null) && (!(s.isEmpty()))) {
          out.append(s);
        }
      }

      s = clazz.getAuthorBegin();
      if ((s != null) && (!(s.isEmpty()))) {
        out.append(s);
      }

      author = authors.get(i);

      needsSpace = false;
      s = author.getPersonalName();
      if ((s != null) && (!(s.isEmpty()))) {
        encoded.append(s);
        needsSpace = true;
      }
      s = author.getFamilyName();
      if ((s != null) && (!(s.isEmpty()))) {
        if (needsSpace) {
          encoded.append(' ');
        }
        encoded.append(s);
      }
      s = clazz.getAuthorEnd();
      if ((s != null) && (!(s.isEmpty()))) {
        out.append(s);
      }
    }

    s = clazz.getAuthorsEnd();
    if ((s != null) && (!(s.isEmpty()))) {
      out.append(s);
    }

    LaTeXDriver._endLine(out);
  }