编辑 bst 文件,使额外标签仅出现在第二次出现时

编辑 bst 文件,使额外标签仅出现在第二次出现时

我确信我的问题非常简单,但是 bst 文件的语法对我来说太复杂了。我想编辑我的 bst 文件,以便如果同一作者在同一年有多部出版物,它会打印:

母鹿(1900 年) 母鹿(1900a 年) 母鹿(1900b 年)

代替

母鹿 (1900a) 母鹿 (1900b) 母鹿 (1900c)

我发现这一切都发生在这个区域:

STRINGS { longest.label last.label next.extra }

INTEGERS { longest.label.width last.extra.num number.label }

FUNCTION {initialize.longest.label} { "" 'longest.label :=  #0 int.to.chr$ 'last.label :=  "" 'next.extra :=  #0 'longest.label.width :=  #0 'last.extra.num :=  #0 'number.label := }

FUNCTION {forward.pass} { last.label label =    { last.extra.num #1 + 'last.extra.num :=
     last.extra.num int.to.chr$ 'extra.label :=    }    { "a" chr.to.int$ 'last.extra.num :=
     "" 'extra.label :=
     label 'last.label :=    }  if$  number.label #1 + 'number.label := }

FUNCTION {reverse.pass} { next.extra "b" =    { "a" 'extra.label := }  'skip$  if$  extra.label 'next.extra :=  extra.label  duplicate$ empty$    'skip$    { "{\natexlab{" swap$ * "}}" * }  if$  'extra.label :=  label extra.label * 'label := }

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

但这是我能做的最好的了...任何帮助都将不胜感激!

答案1

我找到了办法。虽然不是很优雅,但确实有用。我在 FUNCTION {forward.pass} 中将计数以“`”(尖音符,即表中的前一个 ASCII 字符)而不是“a”开头,现在读起来像这样:

FUNCTION {forward.pass}
    { last.label label =
        { last.extra.num #1 + 'last.extra.num :=
        last.extra.num int.to.chr$ 'extra.label :=
            }
            { "`" chr.to.int$ 'last.extra.num :=
            "" 'extra.label :=
            label 'last.label :=
        }
    if$
    number.label #1 + 'number.label :=
    }

不过,我对这是否是一个稳定的解决方案有些怀疑……

相关内容