BibTeX Verzeichnis alphabetisch sortieren bei eigenem Style

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


OhTeX
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 11. Mai 2012, 01:04

BibTeX Verzeichnis alphabetisch sortieren bei eigenem Style

Beitrag von OhTeX »

Tag allerseits,

Ich habe folgendes Problem und hoffe, dass mir jemand auf die Sprünge helfen kann. Ich benutze XeTeX mit BibTeX um meine Hausarbeit zu schreiben. Ich habe den Style-generator von Bib-it benutzt um ein .bst file zu erzeugen, das alles so aussehen lässt, wie es vorgegeben ist.

Ich musste allerdings noch von Hand eine Änderung vornehmen, damit er beim \cite Befehl den Bibkey einsetzt welcher aus Autor+Jahr besteht (also z.B. Davidson1986). Das war, so weit ich sehen konnte, die einzige Möglichkeit um mit Bibtex eine Autor-Jahr zitierweise hinzubekommen (ihr dürft mich gerne korrigieren :D). Klappt auch alles ganz gut.

Das einzige Problem ist nun: Wie kriege ich es hin, dass das Literaturverzeichnis alphabetisch sortiert wird? Momentan sortiert er es in der Zitierreihenfolge, aber dafür würde ich was auf den Deckel kriegen. Soweit ich weiss hängt die Reihenfolge vom .bst-File ab; kann mir also jemand sagen, wie ich das editieren müsste um eine alphabetische Reihenfolge zu bekommen? Bei Bib-it hab ich keine Option dafür gefunden.

(Ich habe bereits auf Google gesucht, aber eigentlich nur "benutz die Sortierfunktion von BibLaTeX" gefunden. Ich hätte im Prinzip nichts dagegen auf BibLaTeX umzusteigen, aber ehrlich gesagt keine großartige Lust, den ganzen Zitierstil nochmal zusammenzubasteln. Und handelsübliche .bst-Files funktionieren da ja nicht, oder?)

OhTeX
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Fr 11. Mai 2012, 01:04

Beitrag von OhTeX »

Nungut, nachdem ich etwas herumexperimentiert habe, konnte ich den Code isolieren, der für die alphabetische Sortierung zuständig ist. Für den Fall, dass jemand ein ähnliches Problem hat poste ich den mal hier. Er kommt im .bst-File nach

FUNCTION {default.type} { misc }
READ
:
FUNCTION {sortify}
{ purify$
  "l" change.case$
}
INTEGERS { len }
FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}
FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}"
      format.name$ 't :=
      nameptr #1 >
        {
          "   "  *
          namesleft #1 = t "others" = and
            { "zzzzz" 't := }
            'skip$
          if$
          t sortify *
        }
        { t sortify * }
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}
FUNCTION {author.sort}
{ author empty$
    { key empty$
        { "to sort, need author or key in " cite$ * warning$
          ""
        }
        { key sortify }
      if$
    }
    { author sort.format.names }
  if$
}
FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
        { key empty$
            { "to sort, need author, editor, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}
FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
        { key empty$
            { "to sort, need author, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}
FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
        { key empty$
            { "to sort, need editor, organization, or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}
FUNCTION {presort}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
        'editor.organization.sort
        { type$ "manual" =
            'author.organization.sort
            'author.sort
          if$
        }
      if$
    }
  if$
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=
}
ITERATE {presort}
SORT
Bei mir funktionierts, aber ich übernehme trotzdem keine Garantie dass das bei jedem so sein muss... :roll: Habe im Prinzip mit makebst einfach zwei identische Dateien erstellt die sich nur in der Sortierreihenfolge unterschieden haben und dann geguckt, was anders ist.[/i]

Antworten