thanks for the explanation. to generate a bst file from a dbj file just:
latex whatever.dbj martin On 27/10/05, K. Elo <[EMAIL PROTECTED]> wrote: > > Hi, > > Martin A. Hansen wrote (27.10.2005 10:50): > > excellent! that did it! > > Good to know ;-) > > > i had this feeling that tweaking of the bst file was required, since > > there unfortunately isnt a way to fix this in the makebst dbj file - > > at least i havnt been able to figure it out. > > I don't know a way to rebuild a .bst file from a .dbj file, either. But > I could imagine there is a way... > > > i am impressed that you found the spot in the bst file (so fast). > > Well, actually, I am myself working on a .bst for the finnish political > science association. So I have tried to "tame the beast"... > > But, the .bst file has some logic in it. How I figured out the solution > for Your problem was as follows: > > 1) E.g. the function "article" is defined from the line #843 onwards. > The _author-date_ (!!) block is formatted as follows: > FUNCTION {article} > { output.bibitem > format.authors "author" output.check > author format.key output > format.date "year" output.check > date.block > > The function "output.bibitem" sets the output.state variable to a value > representing the beginning of a block. The function "date.block" sets > this variable to a value representing the end of a block. > > 2) When compared with the function "output.check" (because it "closes" > the formatting of the authors) defined as follows (lines 115-121): > FUNCTION {output.check} > { 't := > duplicate$ empty$ > { pop$ "empty " t * " in " * cite$ * warning$ } > 'output.nonnull > if$ > } > > we can see, if there are authors, the function "output.nonnull" will be > executed. > > 3) This function is defined from the line 89 onwards: > FUNCTION {output.nonnull} > { 's := > output.state mid.sentence = > { ". " * write$ } > { output.state after.block = > { add.period$ write$ > newline$ > "\newblock " write$ > } > { output.state before.all = > 'write$ > { add.period$ " " * write$ } > if$ > } > if$ > mid.sentence 'output.state := > } > [...] > > Now, when excecuted the first time after the "output.bibitem", the > output.state variable is set to the value of the constant > "mid.sentence" (because the test "output.state mid.sentence =" results > false). This means, because this happens when the _authors_ are > formatted, that the autor and year (or whatever is defined to follow > the authors' names _before_ the block ends) are separated by a > mid-sentence punctuation (which was originally defined as ",")! When > the function "output.nonnull" is once again executed when the date is > formatted, the test "output.state mid.sentence =" will be true and the > next command "{ ". " * write$ }" is executed. > > Hope this a bit clarified the logic of a .bst file... > > > thanks > > You're welcome - var så god! > > > martin > > Kimmo >