我确信我的问题非常简单,但是 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 :=
}
不过,我对这是否是一个稳定的解决方案有些怀疑……