Anzeige:
Ergebnis 1 bis 4 von 4

Thema: BibTex, MakeBst, Erster Autor anders trennen

  1. #1
    Registrierter Benutzer
    Registriert seit
    03.01.2007
    Beiträge
    14

    BibTex, MakeBst, Erster Autor anders trennen

    Hallo,

    ich habe ein Problem, zu dem ich bisher keinen passenden Thread gefunden habe. Ich benutze seit gestern BibTeX und MakeBst, aber eine Sache passt mir in meinen References nicht. Wenn ich mehrere Autoren (>=3) habe, sollen die so ausgegeben werden:

    Nachname1, V1.; V2. Nachname2, and V3. Nachname3 .....

    Soweit habe ich das auch geschafft, aber ich möchte nach dem ersten Autor ein Semikolon, sonst Kommas haben. Kann ich das in der .bst irgendwo ändern? Wär echt klasse, wenn Ihr mir helfen könntet,

    viele Grüße,
    Alex

    [Edit:] Ich glaube Minimalbeispiel ist hier nicht nützlich, bei Bedarf mach ich natürlich eins oder häng die .bst in den Anhang!
    Geändert von vizechecker (18-07-2008 um 13:58 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    03.01.2007
    Beiträge
    14
    Hmm, also bis jetzt noch keine Ideen? Vielleicht könnt Ihr mir ja sagen, ob ich in einem von diesen Codeschnipseln aus der .bst richtig bin Wobei ich mit der (Programmier?)sprache hier nicht viel anfangen kann. Bin über jeden Hinweis froh!

    Gruß,
    Alex

    Code:
    FUNCTION {format.full.names}
    {'s :=
     "" 't :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          "{vv~}{ll}{, jj}" format.name$
          cite.name.font
          't :=
          nameptr #1 >
            {
              namesleft #1 >
                { ", " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  t "others" =
                    {
                      " " * bbl.etal *
                    }
                    {
                      numnames #2 >
                        { "," * }
                        'skip$
                      if$
                      bbl.and
                      space.word * t *
                    }
                  if$
                }
              if$
            }
            't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    Code:
    FUNCTION {format.names}
    { 'bibinfo :=
      duplicate$ empty$ 'skip$ {
      's :=
      "" 't :=
      #1 'nameptr :=
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
          nameptr #1 >
            { "{f.}" format.name$ duplicate$ empty$ 'skip$
                { tie.or.space.prefix bib.fname.font swap$ * }
              if$
              s nameptr
              "{vv~}{ll}" format.name$ bib.name.font *
              s nameptr
              "{jj}" format.name$ duplicate$ empty$ 'skip$
                { bib.fname.font ", " swap$ * }
              if$
            }
            { "{vv~}{ll}" format.name$ bib.name.font
              s nameptr
              "{f.}{, jj}"
              format.name$ duplicate$ empty$ 'skip$
                { bib.fname.font ", " swap$ * }
              if$
            }
          if$
          *
          bibinfo bibinfo.check
          type$ "presentation" =
            { check.speaker }
            'skip$
          if$
          't :=
          nameptr #1 >
            {
              namesleft #1 >
                { ", " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  numnames #2 >
                  t "others" = not and
                    { "," * }
                    'skip$
                  if$
                  t "others" =
                    {
                      " " * bbl.etal *
                    }
                    {
                      bbl.and
                      space.word * t *
                    }
                  if$
                }
              if$
            }
            't
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      } if$
    }

  3. #3
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin moin,
    vllt wär ja jurabib was für Dich?
    Da gibt es Befehle wie
    Code:
    \bibbtasep   %Trenner zwischen (genau) zwei Autoren
    \bibbfsasep  %Trenner zwischen erstem und zweitem Autor
    \bibbstasep  %Trenner zwischen zweitem und drittem Autor
    , um mal nur ein paar zu nennen, die Dir u. U. dienlich sein könnten...

    OTOH: warum setzt Du nicht einfach mal unterschiedliche selbsterdachte Zeichen(ketten) für die ", " in den format*names-Funktionen Deiner .bst, lässt es laufen und schaust Dir an, wo welche dieser Zeichen(ketten) im Ergebnis unter welchen Umständen auftauchen ... ?

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  4. #4
    Registrierter Benutzer
    Registriert seit
    03.01.2007
    Beiträge
    14
    Super Tipp! (Auch wenn er so nahe lag, dass ich selbst hätt drauf kommen können, hab mich aber zuerst nicht getraut, einfach da drin rumzuwerkeln...)

    Für mich relevant war die format.names, da ich die Vornamen abkürze, sonst wahrsch. die format.full.names. In folgendem Block

    Code:
          if$
          't :=
          nameptr #1 >
            {
              namesleft #1 >
                { "; " * t * }
                {
                  s nameptr "{ll}" format.name$ duplicate$ "others" =
                    { 't := }
                    { pop$ }
                  if$
                  numnames #2 >
                  t "others" = not and
                    { "," * }
                    'skip$
                  if$
                  t "others" =
                    {
                      " " * bbl.etal *
                    }
                    {
                      bbl.and
                      space.word * t *
                    }
                  if$
                }
              if$
            }
            't
    kann man an der Stelle des roten Semikolons das gewünschte Trennzeichen nach dem ersten Autor ändern - wenn es 3 oder mehr Autoren sind. Vielleicht hilft das ja noch jemand anderem weiter

    Also vielen Dank an rais und bis bald,
    Alex

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •