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
>

Reply via email to