我正在自定义默认迪纳特用于定制我的参考书目样式的文件。
该文件包含一些状态变量:
INTEGERS { output.state
before.all
mid.sentence
after.sentence
after.block
colon.after
period.dash }
FUNCTION {init.state.consts}
% initialisation of the state variables
{ #0 'before.all :=
#1 'mid.sentence :=
#2 'after.sentence :=
#3 'after.block :=
#4 'colon.after :=
#5 'period.dash :=
}
FUNCTION {set.period.dash}
% set ". -- "
{ output.state before.all =
{ skip$ }
{ period.dash 'output.state := }
if$
}
但我不太清楚语法。
我该如何设置这些状态变量?
例如,如果我想在每次输入后使用句点破折号 - 我需要如何调整该功能set.period.dash
?
答案1
首先要知道的重要一点是:bst 文件的语法基于波兰表示法。
知道了这一点之后,我理解了语法。我在问题中发布的代码摘录只是 init 状态的声明和初始化。
如果你想自定义特定的条目类型,正确的更改位置位于迪纳特文件,其中定义了条目类型。
例如我想修改@MISC
类型:
FUNCTION {misc}
% required:
% optional: author, title, howpublished, month, year, note, url
{ out.bibitem.start
...
url set.period.dash.check
push.url out
...
out.bibitem.end
}
在条目规范中使用了 init 状态。就我而言,我不想在 URL 前使用句号和破折号。因此,我将其注释掉了url set.period.dash.check
。
为了在每个 bibitem 之后得到一个句号,我编辑了该函数
FUNCTION {out.bibitem.end}
% end of entry
{ write$ % add new.sentence or ".~" write$
newline$
}